Comprobar datos desde una consulta en un formulario en access

Estoy desarrollando un pequeño sistema de inventario para el control de los mismos en mi departamento. Almaceno las información de facturas, proveedor y código de producto en una tabla llamada entradas, en otra asociada a esta por el id del producto, donde almaceno el nombre la cantidad del producto entre otros datos, y para consultar las facturas con sus productos utilizo un JOIN. En el formulario de la salida de los productos (distribuciones) tengo 4 campos combinados en cascada en el siguiente orden:

Código de factura ... CodFact

Nombre del Producto ... NomProd

Código del departamento... CodDep

Código del trabajador... CodTrab

Luego tengo el campo donde se introduce la fecha de salida, y hasta ahí todo bien, el problema radica en el campo cantidad del producto que se le da salida. Pues necesito comprobar que la cantidad que se introduzca sea inferior o igual a la existente en la tabla producto y en caso de existir distribuciones de este mismo producto entonces se toma el valor inicial en la tabla productos y se le reste la suma de las cantidades anteriormente distribuidas. Adjunto imagen del formulario de salida en caso de necesitar cualquier otro detalle por favor pueden comunicármelo.

2 respuestas

Respuesta
2

Puedes hacerlo de muchas formas. Por ejemplo, en el evento antes de actualizar del cuadro de texto Cantidad crea un procedimiento de evento y entre Private Sub y End Sub puedes poner

If cantidad>dlookup("cantidad","productos","producto='" & me.producto & "'") then

Msgbox"Nenico, no te das cuenta que no puedes vender más de lo que hay", vbokonly,"Eso es ilegal"

Docmd. Cancelevent

end if

He supuesto que la tabla donde figuran los productos y sus existencias se llama Productos y que el combinado del formulario donde eliges el producto se llama tambien así, Producto.

Pero te digo lo que haría, crearía(si no la tienes) una tabla Productos, con, por ejemplo, Idproducto, Nombre, precio, Existencias(donde pondría las existencias iniciales). Y a medida que voy comprando o vendiendo, cuando elijo un producto y anoto la cantidad me la vaya sumando o restando de las existencias iniciales, con lo que las tendrás siempre actualizada. Además le añadiría a ese formulario Distribuciones un cuadro de texto Antes, donde para ayudar a evitar confusiones me aparecieran las existencias de ese producto antes de comprar y vender.

¡Gracias! es realmente una pena no poder clasificar su respuesta con 5 estrellas

Profes expertos, después de desocupar mi agenda me he sentado incormporar su código en mi proyecto pero me marca un error, también en el generador de códigos me pone la primera línea de su código en rojo. No adjunto imagen del problema porque no me sale la opción

Vamos a suponer que "antes de empezar" en el almacén tienes estos productos

Verás que le he puesto a todos 100. También tengo un formulario Compras

Donde en el subformulario Detalle de la compra voy a elegir patatas para comprar

Una vez que la elijo

En Antes me pone las existencias que hay hasta ese momento. Vamos a suponer que compro una cantidad

En Después me pone las nuevas existencias y en la tabla Productos

Parecido sería para Ventas, sólo que restando.

Si quieres, repito, si quieres, mándame un mensaje(sólo el mensaje) a [email protected] y te mando un ejemplo.

Si lo haces, en el asunto del mensaje pon tu alias Jose Javier, ya que si no sé quien me escribe ni los abro.

Respuesta
1

Personalmente no me gusta esa forma de llevar los inventarios, pero una forma en que puedes hacer la validación de existencias sería ésta:

En el evento "Antes de actualizar" del campo Cantidad le generas un código como este (con los nombres que tengas donde pongo en negrita):

If Me.Cantidad>DLookUp("Cantidad","TablaProductos";"Producto='" & Me.NombreProducto & "'") Then

Msgbox "No hay existencias de producto sufientes para esta salida",vbCritical

Cancel=True

End If

Es decir, uso la función DLookup para buscar en la TablaProductos el valor del campo Cantidad que se corresponde con el registro en el que el Producto sea igual al valor seleccionado en el cuadro combinado NombreProducto del formulario.

Y para actualizar el stock, en el botón Guardar, añades al código que ya tengas:

CurrentDb.Execute "UPDATE Productos SET Cantidad=Cantidad-" & Nz(Me.Cantidad,0) & " WHERE Producto='" & Me.NombreProducto & "'"

Es decir, que te actualice en la tabla Productos el campo Cantidad restando a esa Cantidad el valor del cuadro de texto Cantidad del formulario en aquel registro en en el que el Producto coincida con el Producto seleccionado en el cuadro combinado NombreProducto.

Como no me queda claro cómo son los nombres de los campos ni con qué valor trabaja el cuadro combinado, he supuesto que lo hace con el nombre del producto. Si fuera otro (por ejemplo el id producto), tendrás que cambiar la parte de "Producto='" & Me.NombreProducto & "'" por la que corresponda.

Un saludo.


Gracias a ambos por sus prontas respuestas y ambas me aclaran bastantes dudas. Sveinbjorn El Rojo, el problema es que no tengo una tabla de cantidades, tengo la tabla productos y la de salidas, lo que pretendo es calcular las salidas , si ud fuera tan amable de alumbrarme con algún otro método para obtener las salidas, se lo agradecería. Adjunto estructura de las tablas Productos y Salidas.  pues no comprendo muy bien su explicación anterior en cuanto a los codigos

PD: Perdonen la molestia

Tabla: Salidas

Tabla: Productos

Fíjate que en mi respuesta no hablo para nada de una tabla cantidades, sino de un campo Cantidad que supongo existe en la tabla Productos.

A la vista de tus imágenes, tienes el campo CantProd en la tabla Productos, que salvo el nombre, es lo que te sugería en la respuesta previa.

A mi me gusta llevar el control de stocks con 3 tablas (productos, entradas y salidas) y calcularlo en una consulta, lo que me evita tener que andar actualizando "manualmente" (entiéndase programando un código para ello) la tabla de productos. En la web de Neckkito (http://neckkito.xyz/nck/index.php) tienes 5 ejemplos de gestión de almacén (búscalo así en el buscador)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas