Como hago un inventario simple!

Respuesta de
raulmoscardo
a
Usuario
Antes que todo he leído tus respuestas y son de lo mejor, sobretodo la quediste de filtrar listas el 11/04/2002, excelente. Bueno mi problema es que necesito hacer un inventario simple, tengo las tablas y las consultas y quiero añadir en el formulario el filtro de listas, pero en el formulario frmSelector no me da la opción de avanzar en los registros, y ademas no se como puedo hacer que una vez que yo venda un producto me lo reste de las existencias, sera mucho pedir que me ayudaras o me guiaras en donde puedo encontrar la información. De antemano muchas gracias. Ojala me contestes porque he enviado la pregunta a otros expertos y creo que voy a morir esperando.
Experto
La primera pregunta no acabo de entenderla, cuando te refieres a avanzar por los registros, si no te importa matizar un poco como es la consulta que tienes hecha, estaré encantado de ver si puedo echarte una mano.

Para la otra cuestión, la de restar un producto de las existencias, tendrías que seguir el ejemplo basado en el formulario Pedidos de Neptuno.mdb modificada:

1º Crear una consulta de actualización basada en la tabla Productos. Vista en SQL quedaría así:

PARAMETERS ParamIdProducto Long, ParamQtyShipped Short;
UPDATE DISTINCTROW Productos SET Productos.UnidadesEnExistencia = [UnidadesEnExistencia]-[ParamQtyShipped]
WHERE (((Productos.IdProducto)=[ParamIdProducto]));

añadir en Parámetros los dos campos:
ParamIdProducto (Tipo de dato=Entero Largo)
ParamQtyShipped (Tipo de dato=Entero)

Guardar la consulta como Inventario

2º Si ya tienes un módulo hecho puedes pegar la siguiente función:

Function Inventario()
'funciona: aunque no acaba de convencer el rendimiento
Dim DB As Database
Dim Q As QueryDef
Set DB = CurrentDb()
Set Q = DB.QueryDefs("Inventario")
Q!ParamIdProducto = Forms!Pedidos![Subformulario Pedidos].Form![IdProducto]
Q!ParamQtyShipped = Forms!Pedidos![Subformulario Pedidos].Form![Cantidad]
Q.Execute
Q.Close
End Function

3º Ahora vamos a llamar a la función Inventario, para que se ejecute en el procedimiento de evento Al Salir de mi campo Cantidad de mi Subformulario Pedidos:

Private Sub Cantidad_Exit(Cancel As Integer)
Call Inventario
End Sub

Nota: en realidad es la función Inventario la que se encargará de ejecutar la consulta de actualización. Deberías prever algún método para evitar que durante la edición de un registro se pudiese ejecutar la función dos veces (estaríamos restando por duplicado). Una solución seria que llamásemos a la función cuando terminamos de editar el registro, en lugar de al salir del campo Cantidad. Eso ya lo dejo en tus manos.

Un cordial saludo
Raul
Experto
Perdona, que ya caí en la primera cuestión. Tú me hablabas del mismo frmSelector, claro.
No puedes avanzar por los registros porque el formulario es independiente, es decir, no está basado en ninguna tabla/consulta. Lo único que tienes que hacer es elegir en Datos Origen del registro con que tabla/consulta va a trabajar el form .

Un saludo
Raul
Usuario
Que más te puedo decir, simplemente tu si que ERES UN REAL EXPERTO, MIL GRACIAS Y FELICITACIONES, TE PASASTE!.