Inventario con lotes y vencimiento en access

Tengo una BD (sencilla pero completa) en la que ya tengo todas las tablas: Productos, Clientes, venta y detalle Venta, Compras y detalle Compra:
DetalleCompra: iddetalle, idproducto, cantidad, precio, lote, vencimiento, total

DetalleVenta: iddetalle, idproducto, cantidad, precio, lote, vencimiento, total

El tema está que a pesar de que actualizo la existencia del producto (Compras - Venta), no consigo como manejar los lotes. Es decir, para cada compra de un producto con Lote, pueden existir varias salidas de ese mismo lote en varias facturas. Pero actualizo la existencia y no logro como manejar los lotes, y que se vaya consumiendo y actualizando de con las salidas (ventas). En el formulario de Venta puedo obtener el lote del producto con cuadro combinado, pero no logro rebajar esa cantidad con lote. ¿Qué debo Hacer? ¿Manejar un tabla de lotes cuyo clave principal sea el numero de lote? ¿Manjar solo una tabla con los movimientos? Por favor si alguien puede ayudarme u orientarme, esto es lo único que me está atrasando el proceso de la BD. Los benditos Lotes.

2 respuestas

Respuesta
2

José: Si es que quieres tener "trazabilidad" porcada lote de un Producto, has de llevar un control independiente del Stock general por cada ProductoLote.

Es decir Entrada-Salida-Saldo. El tratamiento va a ser el mismo que el que ya estés usando para la existencia a nivel de Producto, pero al nivel que corresponda. Un saludo >> Jacinto

Hola jacinto, muchas gracias por tu colaboración, pero el tema es que no se como hacer lo que dices, puedes por favor ser tan amable y con un esquema o capture, de como deben ser las relaciones de estas tablas y que tablas, por lo menos para tener una idea de lo que debo desarrollar.

Gracias de antemano

José: Te pongo las Imágenes de unos apuntes que he hecho.

Punto de partida >>1 Tabla de Entradas y otra de Salidas, que aunque no coincidan los Nombres ya las tienes.

2 Consultas: Una sobre la Tabla de Entradas y otra sobre la de Salidas

Y finalmente una Consulta con esas dos Consultas:

Y el resultado final, partiendo de los datos de Entradas y Salidas:

Un saludo >> Jacinto

Hola Jacinto, gracias por el apoyo, entiendo entonces según el esquema enviado que debo tener una tabla de con IdLote y que esta también tenga id producto. ¿Correcto?, ¿Si es así como seria las relaciones? ¿, sino es así por favor aclárame un poco. Disculpa tanta molestia, pero e serio estoy trabado en esto y nno logro aun ver con claridad. Sumado que no se nada de programación. Solo me apoyo en las herramientas de access y en el apoyo de personas como tú en la web.

Gracias de antemano,

José: No es necesario que tengas ninguna Tabla aparte porque pienso que ya tienes una de entradas y otra de salidas para obtener el Stock final. Es en esas tablas que has de poner un campo (si es que no lo tienes ya), de IdLote que puede ser un Número o un Texto (yo he puesto un número), porque no sé el Lote que tu citas cómo lo identificas. Veo la respuesta de Icue (un saludo) y ya ves que el pone como lote >>AAAA, BBBB... con lo que el IdProductoLote podría ser 1AAAA, 1BBBB...

Después de eso es seguir lo que te he comentado. Un saludo >> Jacinto

Jacinto, pero lo que veo aqui con el ejemplo es que ahora tengo un idprodlte, que no coincide con el idprducto. Entonces (y solo te lo consulto porque no le he hecho un las tablas) cuando llame en las salidas al producto no me va aparecer ese resultado en el cuadro combinado. Recuerda que lo que quiero es que; al cargar por compras tenga  los lotes listos, y al llamar al producto por las ventas (formulario de salida) al colocar el producto en su idproducto, luego en el campo lote, me aparezcan por en cuadro combinado todos los lotes y existencias que tiene ese producto >0, pero no veo como pueda hacer eso si tengo por ejemplo un IDproducto 1 y un idprodlote 11. 

No se si me entiendas. 

José: Creo entender lo que me cuentas, pero el que te aparezca o no en ese Combo que mencionas la Existencia Actual de un ProductoLote va a depender del Origen de Fila que le pongas.

Si en la última Consulta añades el IdProducto que yo he omitido porque desconozco tu estructura de datos y la usas como Origen de Fila del Combo, seguro que te va a mostrar la Existencia actual.

Como Idea y aquí acabo porque ya es tarde puedes mejorar un poco la Consulta así:

Espero sea una guia que solucione tu problema. Un saludo >> Jacinto

Jacinto, me funcionó muy bien así como lo indicas, sin embargo solo me muestra  los lotes de los productos que se han vendido. en realidad me gustaria (o por lo menos es lo que se busca) es que cuando llame al producto  me muestre todos los lotes independientemente si tuvo ventas o no (tal cual como lo expresas tú en tu ejemplo), pero a mi no me arrojó los resultados. seguramente hay algo que estoy haciendo mal.  tambien solo está trayendo las ventas de un lote y no de todos los lotes para un producto. (Pasa con el producto 1 que tiene dos ventas y solo refleja una).Te anexo los resultados: No sé si es por la especie de relación que tienen las consultas, sin embargo al quitarlas tampoco cuadran los resultados 

ConsultaCompraDetallle

ConsultaVentaDetalle

Consulta Compras-Ventas

Resultado

Tabla Compras Detalle

Tabla Ventas

Saludos y gracias por todo

José: Previendo que se alargue el post demasiado sin llegar a una solución, miro de prepararte un ejemplo y te facilito el enlace de descarga. No puedo preparártelo de inmediato, aunque creo que antes de un par de días será posible hacerlo. Un saludo >> Jacinto

Listo, gracias amigo,

Muy amable 

José: Este es el link de descarga del ejemplo que he preparado.

http://www.mediafire.com/file/w425bkjh97b74um/StockProductosConLotes.rar/file 

Seguro que hay otros modos de hacerlo, como por ejemplo el que cada Producto/Lote tenga el rango de producto único, con un Precio de Compra y venta del momento.

El ejemplo no está considerado así, y el Precio de venta se supone que es un promedio que previamente se ha calculado.

En el ejemplo verás que no coincide la Existencia de la Tabla Productos, con el obtenido en la Consulta, e incluso verás una cantidad negativa (-8). Lo he provocado así, para poner de manifiesto la importancia de la nota sobre el control de errores.

He desarrollado la parte de Salidas (Pedidos o Ventas). El proceso de Entradas es análogo.

Poco más se me ocurre, salvo que espero que te ayude a resolver tu problema. Un saludo >> Jacinto

Jacinto, la información suministrada es perfecta. Hace la función que necesito, El error que tenia era que en las propiedades de combinación  tenia la opción 1  y en tú ejemplo tenias la 2, (Corregido y procesado), ahora solo te quiero hacer la ultima pregunta y espero puedas apoyarme,  

te lo mostraré con una imagen,

Sucede que cuando las vetas son =0 la consulta no me hace la resta (en tu ejemplo lo hace perfectamente. Un abrazo y muchas gracias por todo el apoyo. Ya valoro tu respuesta!!

Mi ejemplo

Tú Ejemplo:

José: No se me ocurre de donde puede venir esa anomalía.

Mira que en la consulta Final estén los Nz(...;0) y que realmente actúan. Si quieres añadir aunque sea redundante esos Nz al Campo Existencia así:

ExistActual: Nz([Entradas];0)-Nz([Salidas];0)

Un saludo >> Jacinto

Respuesta
1

Si no quieres usar consultas, supongamos que tengo una tabla Productos, con su lotes(sólo le he puesto Lote a un par)

Te pongo como ejemplo el formulario Ventas, ya que el de compras sería exactamente igual. Si el el combinado elijo el producto y su lote

Una vez que selecciono el producto y su lote

En existencias me pone las que hay de ese producto y ese lote hasta ese momento. Una vez que escribo la cantidad que vendo, entre otras cosas, en Quedan me pone precisamente eso, y en la tabla

El código del evento Después de actualizar del control Cantidad es

Quedan = Existencias - Cantidad
DoCmd.RunSQL "update productos set existencias=quedan where idproducto=" & Me.Idproducto & ""

Hola Julián González Cabarcos, gracias por tu respuesta, sucede que este ejemplo que amablemente me envías no me sirve, dado que tendría que tener varios id para le mismo producto. Y en realidad lo que busco es que un producto pueda manejar en todo su historia muchos lotes, y esos lotes puedan estar también en varios almacenes, porque es así como funciona en la realidad.

Muchas gracias de antemano si me puedes apoyar

No se como usas los almacenes, pero sería exactamente igual que con los lotes. Supongamos que tengo la tabla Productos

Cada Producto tiene varios lotes

En el formulario Detalleventa, el control Lote lo transformo en un combinado de forma que

Cuando elijo un producto, en el combinado Lote sólo aparecen los lotes de ese producto, y cuando elijo un lote, en precio me pone el de ese lote, en existencias las que tiene hasta ese momento

Una vez que pongo la cantidad de venta, en quedan me pone las existencias posteriores y en la tabla Lotes

El código del evento Al recibir el enfoque del combinado Lote es

Private Sub Lote_GotFocus()
Lote.RowSource = "select lote from lotes where idproducto=" & Me.Idproducto & ""
End Sub

Y el código Después de actualizar del cuadro de texto Cantidad

DoCmd.RunSQL "update lotes set existencias=quedan where lote='" & Me.Lote & "'"

De todas formas, 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 Mejias, ya que si no sé quien me escribe ni los abro.

Por cierto, en el formulario de compras, sería lo mismo que el de ventas pero poniendo

Quedan =existencias+cantidad

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas