Foros del Web » Programando para Internet » PHP »

Implementando ley FIFO creando codigo en PHP para manipular MySQL

Estas en el tema de Implementando ley FIFO creando codigo en PHP para manipular MySQL en el foro de PHP en Foros del Web. Bueno chicos, estoy haciendo un sistema de gestion, y lo que me pidieron especificamente es lo siguiente: compraron 3 Azucar a $1,50.- y la venden ...
  #1 (permalink)  
Antiguo 30/09/2010, 17:13
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Implementando ley FIFO creando codigo en PHP para manipular MySQL

Bueno chicos, estoy haciendo un sistema de gestion, y lo que me pidieron especificamente es lo siguiente:

compraron 3 Azucar a $1,50.- y la venden a $2,20.-
Despues:
compraron 5 Azucar a $1,70.- y la venden a $2,40.-

ellos lo que quieren es sacar la ganancia total.
parece re facil pero no lo es tanto

digamos que vendieron 2 azucar a 2,20.- y despues 6 a 2,40.- ¿como es esto? bueno actualizaron el stock antes de que se acabaran las azucares, y por lo tanto una de ella igualo el precio de venta, de las nuevas.

calculo:

2 Azucar a $2,20.- = ganancia $1,40 [2x($2,20-$1,50)].
6 Azucar a $2,40.- = ganancia $4,40 {($2,40-$1,50)+[5x($2,40-$1,70)]}
GANACIA TOTA= $5,80

Bueno lo que hice fue esto:

ID_ARTICULO // autoincremente MySQL
AR_CODIGO // Codigo designado en el codigo de barras del producto
FIFO // Ley First In First OUT ( 0, 1 , 2 , 3 , 4 ,5 ,6 etc.
AR_COSTO // Costo del producto
AR_DESCRI // descripicion del producto ("Azucar")
AR_PRECIO // Precio venta.
AR_STOCK // stock disponible

COMPRA TRES:
101 123 1 1,50 azucar 2,20 3

VENDE DOS:
101 123 1 1,50 azucar 2,20 1

COMPRA CINCO:
102 123 2 1,70 azucar 2,40 5
101 123 1 1,50 azucar 2,40 1

Utilizo el campo FIFO para saber el orden cual tiene que acabarce primero.
Mi problema viene cuando compran "6", ya que agarra 5 de 1,7 (costo) y una de 1,5 (costo).

Que pasa cada venta, deposita el producto en otra tabla:

ID_VENTA
VEN_ARTICULO
VEN_CODIGO
VEN_DESCRI
VEN_COSTO
VEN_PRECIO
VEN_CANTIDAD

y tendria un patron haci:

10001 101 123 azucar 1,5 2,2 2
10002 101 123 azucar 1,5 2,4 1
10003 102 123 azucar 1,7 2,4 5

AHORA VIENE MI SOLICITUD DE AYUDA:

teniendo esto:

102 123 2 1,70 azucar 2,40 5
101 123 1 1,50 azucar 2,40 1

¿como compro 6 y dejo la tablas de venta haci?

10002 101 123 azucar 1,5 2,4 1
10003 102 123 azucar 1,7 2,4 5

Gracias por llegar hasta ak abajo
y la verdad recurro ak por que no sabria como buscar algo similar.
  #2 (permalink)  
Antiguo 30/09/2010, 17:18
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Implementando ley FIFO creando codigo en PHP para manipular MySQL

Me imagino que tendria que hacer una consulta:

AR_ABC (tabla donde alojo los productos)
SELEC * FROM AR_ABC WHERE AR_CODIGO='123'.
Lebantar en este caso los dos campos
ID_ARTICULO 101
ID_ARTICULO 102
y compararlos, para saber quien tiene el numero FIFO mas chico.
Despues descontar de STOCK. necesito 6 tomo 1 del 101 y 5 del 102..

pero todo eso ya no se hacerlo :D

Última edición por SirDuque; 30/09/2010 a las 17:20 Razón: aclaro un poco mas
  #3 (permalink)  
Antiguo 30/09/2010, 17:52
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Implementando ley FIFO creando codigo en PHP para manipular MySQL

Mira, el problema no es tanto de PHP o bases de datos, sino de planteamiento.

Antes de que continues tratando de averiguar como deben ser las tablas, tienes que saber como se realiza el proceso, en papel, que documentacion necesitas, de donde obtienes los costos, etc.

Nunca maneje inventarios con ese sistema de costos, siempre usaba el promedio, pero supongo que en algun lado deberias tener un registro (log) de la cantidad que queda disponible por cada entrada, haces una salida, verificas esa cantidad, aplicas el costo y actualizas el registro.

Una vez que entiendas bien el proceso y lo hayas ensayado, entonces puedes "traducirlo a PHP" para aplicarlo en tu sistema.
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 30/09/2010, 18:03
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Implementando ley FIFO creando codigo en PHP para manipular MySQL

Cita:
Iniciado por Triby Ver Mensaje
Mira, el problema no es tanto de PHP o bases de datos, sino de planteamiento.

Antes de que continues tratando de averiguar como deben ser las tablas, tienes que saber como se realiza el proceso, en papel, que documentacion necesitas, de donde obtienes los costos, etc.

Nunca maneje inventarios con ese sistema de costos, siempre usaba el promedio, pero supongo que en algun lado deberias tener un registro (log) de la cantidad que queda disponible por cada entrada, haces una salida, verificas esa cantidad, aplicas el costo y actualizas el registro.

Una vez que entiendas bien el proceso y lo hayas ensayado, entonces puedes "traducirlo a PHP" para aplicarlo en tu sistema.
Gracias Triby por el consepto, el tema es que entiendo bien lo que quiero hacer, y lo tengo en papel. lo que no se es que funsion utilizar con PHP para por hacerlo.
DIGAMOS: tengo la trayectora, pero con un hueco en el medio.

[QUERY]Yo se que tengo que agarrar estas tablas:

102 123 2 1,70 azucar 2,40 5
101 123 1 1,50 azucar 2,40 1

[UPDATE] y dejar STOCK en 0 haci:

102 123 2 1,70 azucar 2,40 0
101 123 1 1,50 azucar 2,40 0

en la tabla de Ventas que vendria a ser el LOG:

[INSERT] insertar esto:
10002 101 123 azucar 1,5 2,4 1
10003 102 123 azucar 1,7 2,4 5

SOLO sabiendo que: tengo que vender 6 azucares
por lo tanto lo que no me sale y no se como explicarme para que me ayuden
es primero utilizar el stock de 101 y despues el 102, ya que puede que no venda todos las azucares y que me sobre uno, pero para eso debo ELIMINAR o agotar el stock de la primera carga insertada este caso 101.
  #5 (permalink)  
Antiguo 30/09/2010, 19:15
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Implementando ley FIFO creando codigo en PHP para manipular MySQL

El problema esta en que creas dos registros para un mismo producto, solo porque el costo es diferente.

Tabla de productos:
-----------------------------
Clave
Codigo de barras
Descripcion
Unidad de medida
Costo -- Este sera relativo y tal vez innecesario a menos que manejes promedio
Valor -- Este podria servirte mas para valuar el inventario
Existencia (No importa si es del que vale 1.50 o 1.70, aqui va todo)

Tabla de movimientos:
------------------------------------------
Documento -- Factura, Remision, etc.
Numero de documento
Tipo -- Entrada / Salida
fecha
id de producto
cantidad
costo -- Tanto entrada como salida
precio -- Solo para venta
disponible -- En caso de entradas, aqui descontaras las salidas posteriormente

Para hacer tus salidas:
------------------------------
1- Lees las entradas de acuerdo al producto, donde haya existencia disponible, ordenando por fecha (Primero las mas antiguas)
2- Tomas la cantidad necesaria, descontando la cantidad disponible en cada una de las entradas
3- Creas tu(s) movimiento(s) aplicando los costos obtenidos de cada entrada
4- Descuentas la existencia y valor en la tabla de productos

P.D. No me lo tomes a mal, a veces resulta incomoda una lectura cuando la ortografia no es correcta: "asi" se escribe asi, no haci.
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 30/09/2010, 19:45
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Implementando ley FIFO creando codigo en PHP para manipular MySQL

Buenisimo triby pero no tengo intencion de cambiar mi modelo yo solo estoy pidiendo
una mano en las funciones que tengo utilizar, para tomar dos FILAS y llevar una columna a 0 siguiendo un ORDEN por fecha o por numero que esta en X columna.

FILA 1 "datocomun", "Xdato", "FIFO=1", "Xdato", "Cantidad/Stock/Mariposas/paises= 3";
FILA 2 "datocomun", "Xdato", "FIFO=2", "Xdato", "Cantidad/Stock/Mariposas/paises= 4";

necesito 6 "Cantidad/Stock/Mariposas/paises":

FILA 1 "Cantidad/Stock/Mariposas/paises= 3"; -6

(-3)

Fatan 3:

FILA 2 "Cantidad/Stock/Mariposas/paises= 4"; -3

RESULTADO:

FILA 1 "datocomun", "Xdato", "FIFO=1", "Xdato", "Cantidad/Stock/Mariposas/paises= 0";
FILA 2 "datocomun", "Xdato", "FIFO=2", "Xdato", "Cantidad/Stock/Mariposas/paises= 1";

Conclusion:

necesito restar 6

y como una fila no llega a 6 utilizo las dos o mas (siguiendo algun orde, por fecha o por id etc.)
  #7 (permalink)  
Antiguo 24/01/2012, 17:21
 
Fecha de Ingreso: abril-2011
Mensajes: 66
Antigüedad: 13 años
Puntos: 7
Respuesta: Implementando ley FIFO creando codigo en PHP para manipular MySQL

Hola Buenas.

Leyendo este articulo, que es uno de los pocos que encontre que hablen sobre la ley FIFO, tambien tengo el mismo problema que el usuario SirDuque que fue quien inicio y expuso su problema.

MI problema, digo que es parecido, porque yo lo que necesito es algo para muchos muy sencillo que es que me muestre el precio que deberia tener un producto, segun la extraccion del producto; me explico con mator detalle y las tablas que he creado.

Tengo por primera parte, una tabla llamada MOVIMEINTOS_BODEGA, que resgitra los movimeintos de ingreso y egreso de bodega. Esta tabla tiene el siguiente formato.

id_interno // autoincremental
ingreso_egreso // si es un ingreso o egreso
id_tipo_movimiento // que tipo de ingreso, y que tipo de egreso
id_tipo_documento // documento
num_documento // numero del documento
id_articulo
cantidad // canttidad que corresponde segun el movimiento
id_bodega_origen // si es un ingreso, correponde a la bodega a la cual ingresa el producto, si es un traspaso de bodega, corresponde a la bodega de origen de un producto.
id_bodega_destino // corresponde a la bodega de destino de un producto (solo en caso de traspaso)
id_responsable // persona responsable del movimiento
id_responsable_recibe // persona que recibe un producto (en caso de traspaso)
id_persona_autoriza // persona autoriza el traspaso
fecha_autorizacion // fecha de autorizacion del traspaso
fecha_movimiento // fecha en la que se realizael movimiento.

y despues tengo otra tabla en la cual especifico el stock de productos, de acuerdo a la bodega en la cual se encuentre BODEGA_STOCK.

id_interno // autoincremental
id_bodega // corresponde a la bodega
id_articulo // identificacion del articulo
stock_maximo // se establece el stock maximo de un producto para una bodega
stock__minimo // se establece stock minimo ..... (lo mismo)
stock_critico // se establece el stock critico.
cantidad // almacena el stock actual que poseo en bodega de un producto

Se que muchos me diran que es algo improductivo, he indebido almacenar un valor que se debe calcular, debido a que el stock actual se debe calcular, obtenido de: (sumatoria de todos los ingresos) - (sumatoria de todos los egresos), pero la verdad es que tuve que hacrelo asi, para aliviar la carga al servidor, para no tener que siempre estar calculando por cada peticion que se realize.

y manejo otra tabla la cual contiene los precios. esta tabla esta conformada como:

BODEGA_HISTORICO

id_interno // autoincrement
id_detalle_factura // almaceno el id de donde se registro este producto en una factura
id_articulo // articulo comprado
cantidad // cantidad comprada
fecha_compra // fecha de compra del producto
precio unitario // precio del producto por unidad

MOVIMEINTOS BODEGA

1 INGRESO 1 1 111 2 3 1 null 100 null null null 2012-01-03 00:00:00
2 INGRESO 1 1 112 2 5 1 null 100 null null null 2012-01-16 00:00:00
3 EGRESO 4 3 113 2 4 1 null 100 null null null 2012-01-20 00:00:00


BODEGA_STOCK

1 1 2 250 5 3 4

BODEGA_HISTORICO

1 122 2 3 2012-01-03 00:00:00 50
2 142 2 5 2012-01-16 00:00:00 100

ahora lo que yo quiero conseguir es que, de acuerdo a las bases de datos que tengo, poder realizar la consulta, de tal manera que; si realizo un egreso de un producto en 4 unidades, y si quiero consultar el precio de los productos egresados, me muestre en la consulta, que los primeros 3 articulos los cuales ingresaron, costaron 50 cada unidad, y que el cuarto articulo sacado, tiene un costo de 100; que me muestre ambos precios para ese tipo de casos.

Y lo que nose hacer tambien es para cuando el producto se eencuentre dentro de la cantidad de una sola compra, me explico. Por ejemplo, si en ves de sacar 4 unidades, ubiese sacado 2 unidades, cuanto es el costo de ese prodcuto por dos unidades ?

Por lo que estuve leyendo, todo esto, mas lo del usuario que inicio este post, son parte del concepto de FIFO pertenecientes a software de bodega.

Saludos.

Etiquetas: ley, manipular, mysql
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 23:48.