Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problema con Stock

Estas en el tema de Problema con Stock en el foro de Mysql en Foros del Web. Bueno antes que nada gracias por la atención. Estoy haciendo un pequeño Sistema en Php y mysql. en el cual lo unico que necesito es ...
  #1 (permalink)  
Antiguo 12/03/2012, 09:06
 
Fecha de Ingreso: junio-2011
Mensajes: 54
Antigüedad: 12 años, 10 meses
Puntos: 1
Exclamación Problema con Stock

Bueno antes que nada gracias por la atención.
Estoy haciendo un pequeño Sistema en Php y mysql. en el cual lo unico que necesito es saber el stock de cada producto diferenciando por ejemplo el edificio tambien.

Les paso las tablas en un principio y me dicen que opinan del armado.

__________________________________
t_edificio
-------------------------------------------------------
Id_edi | Nombre | Direccion | Telefono
-------------------------------------------------------



___________________________________
t_Productos
-------------------------------------------------------
IdPro | Nombre | Comentario
-------------------------------------------------------




__________________________________
t_proveedores
-------------------------------------------------------
IdProveed | Nombre | Mail
--------------------------------------------------------



__________________________________________________ _
t_movimiento
----------------------------------------------------------------------------------
IdMov | Producto | Proveedor | Ubicacion | cant | movim
----------------------------------------------------------------------------------



____________________________________
t_Stock
----------------------------------------------------------
IdStock | Producto | Cant
----------------------------------------------------------


Bueno esas son mis 5 tablas las mas importante es la tabla t_movimiento. cada vez que haya un movimiento (entrada o salida) va a figurar en esta tabla todo(obviamente hay mas campos pero la acorte ahora un poco). En la columna movim va a figurar si el movimiento es de salida o entrada.
En la Tabla t_stock ya van a figurar los productos ya cargado con anterioridad pero en "0" y en el caso que haya una entrada la consulta va a hacer un Update a la cantidad obviamente sumando. Y en el caso que sea una salida me hace un Update restando.


Es la mejor forma de controlar un Stock? hay otra forma? ahora como obtengo el stock pero por ubicaciones? porque la tabla t_stock me da solo el resultado de Stock por productos no por ubicación. Que me recomiendan?

Muchas Gracias!!
  #2 (permalink)  
Antiguo 14/03/2012, 07:11
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Problema con Stock

Hay muchas maneras de controlar un stock pero sólo una se adapta a lo que tú quieres. En cualquier caso, te falta la relación producto/ubicación para saber cuál es el stock en cada almacén. Esto se logra simplemente con una tabla stock con los id de almacén/producto y el stock de cada uno. Para obtener los resultados necesitarás usar JOINS. Respecto de los movimientos, ahora que recién empiezas puedes ampliar un poco el horizonte, en lugar de tener "entrada" y "salida" puedes tener una tabla de movimientos con n tipos de movimientos., Se puede seguir con este tema mucho rato pero con lo que tienes ya puedes empezar.
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 14/03/2012, 12:36
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema con Stock

Hay muchas formas de hacerlo pero algunas no son correctas por que hay unas reglas de normalizacion del diseño a seguir.

A ver ERROR la tabla stock no es necesaria y ademas es peligroso tenerla.

Por que?

Por que la información que contiene es el resultado de un calculo sobre la información que ya tienes en t_movimiento, luego cualquier error en ese update te dejara la bbdd en un estado incoherente, craso error. Evitar esta situación es un principio básico en el momento de diseñar una base de datos relacional.

Te propongo lo siguiente

__________________________________
t_edificio
-------------------------------------------------------
Id_edi | Nombre | Direccion | Telefono
-------------------------------------------------------



___________________________________
t_Productos
-------------------------------------------------------
IdPro | Nombre | Comentario
-------------------------------------------------------




__________________________________
t_proveedores
-------------------------------------------------------
IdProveed | Nombre | Mail
--------------------------------------------------------



__________________________________________________ _
t_movimiento
----------------------------------------------------------------------------------
IdMov | IdPro | IdProveed | Id_edi | cant | movim | fecha
----------------------------------------------------------------------------------
movim será 1 entradas 2 Salidas


Y luego para obtener el stock solo tienes que hacer lo siguiente


Código MySQL:
Ver original
  1. CREATE VIEW VStock AS SELECT p.idPro, p.nombre as Prod,
  2.            e.id_Edi, e.nombre as Edif,
  3.            SUM(if(m.movim=1,m.cant,0)) as entradas,
  4.            SUM(if(m.movim=2,m.cant,0)) as salidas,
  5.            SUM(if(m.movim=1,m.cant,0))-SUM(if(m.movim=2,m.cant,0)) as Stock
  6. FROM (t_movimiento m INNER JOIN t_Productos p ON m.IdPro=p.IdPro)
  7.          INNER JOIN t_edificio e ON m.Id_edi=e.Id_edi
  8. GROUP BY p.nombre,
  9.            e.nombre;

Esto lo ejecutas una sola vez y te creará una vista o tabla virtual que siempre te dara el stock actual por productos y edificios... y a demas no ocupa espacio de disco.

Para consultarla, como si fuera una tabla normal

Código MySQL:
Ver original
  1. SELECT * FROM VStock; ///Stock completo
o

Código MySQL:
Ver original
  1. SELECT SUM(S.Stock) as StockProducto
  2. FROM VStock S
  3. WHERE S.idPro=X
  4. GROUP BY S.idPro;   ///Stock del producto X

Obviamente debes crear las FK que relacionen y aseguren que existen en las tablas principales los id que introduces en t_movimiento.

Asi con solo hacer el insert en t_movimiento, ya tienes actualizado el stock.

Planteate como conseguirias las compras por producto y proveedor...

Periodicamente habra que resumir la tabla movimientos para que no se haga infinita... esto tambien lo tendrias que hacer con tu modelo, por ejemplo con una t_movimientos por años donde debe haber un asiento de entrada con el stock inicial....momento en el que se suele hacer inventario para ajustar el stock contable con el real... ya se sabe que siempre hay alguna diferencia.

Todo esto se complica cuando te piden que digas el valor monetario del stock....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 14/03/2012 a las 13:24

Etiquetas: stock, tablas, update
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:32.