none
Inventario de productos con fecha de vencimiento RRS feed

  • Pregunta

  • Buenos días a todos, mi problema es que no se me ocurre como hacer una Base de datos para compras y ventas de productos con fecha de vencimiento, osea como planificar mis tablas y toda la lógica. Ejemplo: Compro 12 gaseosas Coca con fecha de vencimiento 01/01/2020, vendo sólo 8 de esas. A la semana siguiente compro el mismo producto e igual cantidad, pero su fecha de vencimiento es el 09/10/2020, osea que en mi stock debería tener 16=12+4 y en el almacen, ¿Como hago que se sumen o descuenten y de qué tabla?

    Yo ya hice una base de datos parecida, pero no sé como gestionar las fechas de vencimiento. Acá les paso el diagrama, tendría que quedar algo así, digamos.

    Desde ya muchas gracias!

    martes, 12 de marzo de 2019 15:25

Todas las respuestas

  • Hola  

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te comento que estaremos realizando una revisión a profundidad acerca del inconveniente que se te está presentando.

    Proporcionaremos una respuesta lo más pronto posible.

    Gracias por usar los foros de MSDN.

    Pedro Alfaro
     ____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
    martes, 12 de marzo de 2019 18:31
  • Hola mattjcordoba:

    Uno de los problemas a los que te enfrentas, no es que tu plantees un modelo que tenga en cuenta si las coca o la gaseosa tienen fecha de vencimiento, sino más bien, si tu operario a la hora de introducir datos, esta dispuesto a introducir algo que identifique ese producto con su fecha de vencimiento.

    Partimos de tu ejemplo, si a un camarero, le pides que cuando sirva una coca, introduzca la fecha de caducidad en tu sistema, obviamente, esto no va a funcionar. Otra posibilidad es que quien se encarga del almacen identifique todas las cocas con una etiqueta, para pasar por el lector de códigos de barras y que esta etiqueta señale el producto exacto con su caducidad (como ocurre por ejemplo con los productos comestibles con caducidad), y así puedes saber si ese lote con esa fecha ha salido. Pero en el caso de las bebidas, no va a ocurrir porque nadie va a asumir el coste de proceso que esto conlleva. Ni tu cliente, ni el personal del almacén, ni el personal de barra.

    Ahora bien como esa no es tu pregunta, yo sólo te indico,que gestionar las fechas, desde el punto de vista del programador, tiene una dificultad asumible, pero desde el punto de vista de quien tiene que introducir datos en el sistema, es por lo menos "agobiante".

    Ahora voy al grano con tú modelo. Un producto no tiene fecha de vencimiento. Cuando tu introduces codProducto = 1 nombre = coca...da igual cuando caduque, todas las cocas de la historia, deberían de ser codProducto = 1.

    Venta tiene detalleVenta. ¿Porque compra no tiene Detalle Compra?

    En detalle venta, relacionado 1 a 1 por cada linea de detalle venta, puedes tener una tabla Lotes. En esta tabla lotes, tienes el articulo, las unidades, y un identificador del lote.

    Luego tienes una tabla lotes que se relaciona con el DetalleVentasLotes donde 1 lote se puede mencionar en n detallesVentasLotes. En esta tabla lotes, tienes que determinar todos los datos relativos al lote, como son la fecha de caducidad, las unidades de las que disponía ese lote, en el momento de su generación,..y toda la información que quieras adjuntar al lote.

    Con esto tienes que una venta con lotes, cuando estas introduciendo la linea de venta, donde escojas un producto con lote, entonces, tienes que mostrar los lotes disponibles, el usuario escoge uno e introduce las unidades a consumir, y lo guardas en detalleVentasLotes.

    Dejo pendiente el tema del stock.

    Te planteo una pregunta así al vuelo. ¿Cuál es la diferencia programática entre una compra y una venta?

    Dado que la pregunta en base de datos, tiene pocas diferencias, e independientemente de tú modelo de datos, parece obvio, que según mi planteamiento, todo lo que te he específicado para las ventas vale, para las compras. Y funciona exáctamente igual.

    Y el punto más conflictivo, o al menos, el que genera más diferencias de criterio.

    Stock. El stock de un lote de un artículo, es la suma de todas sus compras, menos la suma de todas sus ventas, pero siempre teniendo en cuenta la fecha de caducidad, porque aunque tengas stock, si esta caducado, no vale, por tanto hay que tenerlo siempre en cuenta, pero es calculado en el momento de la solicitud, no almacenado en ninguna tabla.

    Para esto te haces una vista, por item, y lote, con fechas, donde las compras suman y las ventas restan por la tabla detalleventaslotes y detallecompraslotes, y ya lo tienes.

    Este podría ser un ejemplo asumible de tu diagrama, según mi opinión.

    Si quieres tener una tabla stock, tambien lo podrías tener, pero yo considero, que no es necesario.

    Espero te ayude

    martes, 12 de marzo de 2019 21:01
  • Es tedioso porque al momento de facturar o dar salida debes indicar de qué lote o vencimiento estás entregando. No hay de otras, no puedes asumir que has despchado las mas viejas primero.

    El sistema Aspel SAE tiene una prueba de 30 dias funcionales, tiene opcion para marcar productos con lotes/vencimientos, lo manejan en una tabla adicional, te sugiero instales la prueba customizando la instalación en SQL Server para que veas las tablas cómo lo maneja, es en realidad algo sencillo.

    miércoles, 13 de marzo de 2019 0:12
  • Hola Javier! Te explico. El diagrama no es justamente el que estoy usando para la pregunta que hice. Sé que las Compras también deberían tener detalle. También tengo entendido que si saco el atributo "fecha_vencimiento" de la tabla Producto tendría que ir por ejemplo a una tabla Stock: codproducto, stock, fecha_vencimiento. Ejemplo compré : 3 Coca grande con fecha de vencimiento 01/01/20 y 6 Coca grande con fecha de vencimiento 09/09/2020. Pero cuando compre o venda, ¿de dónde se descuenta el stock? Podría ser de la tabla Productos o la tabla Stock o de dónde?

    ¿Cómo lo harías vos, Javier? Gracias por explayarte tanto, lo de la vista me parecía correcto porque así también lo había planteado. O sea, que el stock (ya sea por suma por producto con misma fecha de vencimiento o por codproducto) se genere por una vista/consulta.

    miércoles, 13 de marzo de 2019 3:18
  • Hola José! Lo que mencionas del primer párrafo lo pensé hacer por medio de consulta, que se descuente por PEPS (primero entrado primero salido). Voy a probar lo que me decís abajo. Muchas gracias!
    miércoles, 13 de marzo de 2019 3:21
  • Hola mattjcordoba:

    Fecha_vencimiento no es un atributo de producto, por tanto no debe de ir en producto.

    Es un atributo de un lote, por tanto tienes (siempre a mi juicio), de crear una tabla de lotes.

    Stock no es una tabla al uso, porque cual es el stock que tienes cuando en tu almacen hay 10 gaseosas, 2 caducaron hace 15 días, 2 caducaron hace 10 días, 2 caducaron hace 5 días, 2 caducarón hoy, 2 caducarán en 5 días, 2 caducarán en 10 días???

    Físicamente, el espacio de almacenaje, lo están ocupando 10 gaseosas. Si se te inunda el bar y reclamas al seguro, cual es el coste, que vas a asociar a la reclamación 4 gaseosas o 10.

    Tu puedes calcular, según te he contado, por una lado el stock por la suma del detalle, de las compras y ventas, para codProducto.

    Y también puedes calcular, el stock, por la suma del detalle_Lote el stock a fecha de hoy.

    En la imágen se me olvidó introducir la tabla de lotes, donde en texto, te había puesto, que especificases todos los detalles, del lote.

    miércoles, 13 de marzo de 2019 5:14
  • Fuiste muy claro, Javier! Voy a  tratar de hacer lo que me dices. Muchas gracias!
    miércoles, 13 de marzo de 2019 13:50
  • De nada
    miércoles, 13 de marzo de 2019 14:02