Cómo actualizo una consulta mediante VBA, para buscar el saldo de un producto mediante la función DLookup?

He estado trabajando un sistema para el control de mercancía. Tengo un formulario llamada despachos, el cual tiene un subformulario continuo llamado “DetalleDespachos”. En el que están los campos IdProducto, NombreProducto y CantidadSalida.

Cree una consulta llamada ProductosDisponibles en la que me muestra el saldo de cada producto (Según el campo IdProducto), y establecí una expresión llamada “SaldoDefinitivo”, la cual no es más que la suma de todos los ingresos menos el total de todos los despachos.

El problema es que he puesto el siguiente código en el evento después de actualizar del campo “CantidadSalida”, con el fin que no sea posible dar salida a una cantidad mayor a lo existente (según la consulta "ProductosDisponibles”)

If (DLookup("[SaldoDefinitivo]", "[ProductosDisponibles]", "Idproducto =" & Idproducto)) <= Me.CantidadSalida Then

MsgBox "No hay la cantidad suficiente para este despacho"

Cancel = True

Me.CantidadSalida.Undo

End If

La cosa es que me arroja como resultado de la búsqueda el valor no teniendo en cuenta la última salida realizada, por tanto me aparece mayor cantidad de producto. Siendo necesario actualizar el formulario oprimiendo la tecla F5, pero me manda al primer registro. Quiero que la consulta se actualice inmediatamente después de ingresar o modificar la cantidad despachada y realice la búsqueda (DLookup) inmediatamente después, para tener el valor exacto del saldo de ese producto.

Respuesta
2

Que tú veas ese valor en el formulario no significa que la información se haya guardado en la tabla. Simplemente corrige el valor buscado en la expresión agregándole el valor de ese último registro.

If (DLookup("[SaldoDefinitivo]", "[ProductosDisponibles]", "Idproducto =" & Idproducto)) + me.cantidadSalida <= Me.CantidadSalida Then

Supuestamente así debería darte el valor correcto.

Otra opción es guardar la información en la tabla antes de ejecutar la función de dominio sobre la consulta. El código te quedaría una cosa así:

...

Docmd. Runcommand accmdsaverecord

If (DLookup("[SaldoDefinitivo]", "[ProductosDisponibles]", "Idproducto =" & Idproducto)) <= Me.CantidadSalida Then

MsgBox "No hay la cantidad suficiente para este despacho"

Cancel = True

Me.CantidadSalida=null

End If

...

Saludos,

Neckkito

Access MVP

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas