Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cálculo costo promedio (https://www.clubdelphi.com/foros/showthread.php?t=93450)

oscarac 01-10-2018 22:11:57

Cálculo costo promedio
 
Buenas Tardes

Estoy desarrollando un modulo de control de inventarios y el calculo del costo promedio es básico para este tipo de módulos, la idea es la siguiente :

Ingresos de mercaderia:
Los productos vienen con un precio y en una primera instancia ese es el costo del articulo, cuando hay mas ingresos del mismo producto, lo que se hace es dividir el importe total entre la cantidad total, me explico

Fecha Producto Cantidad Precio Promedio
01.02.2018 Producto x 100 2.50 2.50
06.02.2018 Producto x 300 2.10 2.20


por la siguiente razón:
Ingreso Precio Saldo Cantidad Ingreso Importe Saldo Importe Costo Promedio
100 2.5 100 250 250 2.5 (Se Divide 250 / 100)
300 2.1 400 630 880 2.2 (Se Divide 880 / 400)

y asi sucesivamente

Este proceso de calculo del costo, lo genero al momento del ingreso de los productos y hasta aqui todo esta perfecto.
En la salida de los productos (Venta), el costo promedio debe ser el ultimo calculado segun la fecha de ingreso


y como nada es perfecto en la vida.....que sucede...

en los inventarios a veces se pueden hacer modificaciones tanto en los ingresos como en las salidas y para darles un ejemplo
el primero ingreso se modifica la cantidad a 200, el costo quedaria de esta manera

Ingreso Precio Saldo Cantidad Ingreso Importe Saldo Importe Costo Promedio
200 2.5 200 500 500 2.5 (Se Divide 500 / 200)
300 2.1 500 630 1130 2.26 (Se Divide 1130 / 500)

una vez modificado tendria que re-calcular el costo promedio para los sucesivos ingresos y salidas posteriores a la fecha en que hice la modificacion.


la idea es re-calcular el costo promedio, en funcion a las fechas de ingreso, costo unitario y acumulado

tengo una tabla donde se guarda toda esa informacion, de acuerdo al mes, almacen y articulo

la idea que tengo es barrer esa tabla hacerle EDIT e ir re-calculando, pero temo que ese proceso demore muchisimo y tampoco creo que sea el mas apropiado

alguien tiene una idea de como optimizarlo?
alguien tiene alguna experiencia previa haciendo este tipo de calculos y re-calculos ?

espero haberme explicado bien.

Casimiro Notevi 01-10-2018 23:15:13

Existen distintas formas de calcular ese precio, los principales son el medio, el ponderado, lifo y fifo.
Tendrás que decidir qué método interesa más a esa empresa, pues no existe una forma fija y definitiva, depende de cada uno.
Echa un vistazo a esto, aunque puedes encontrar muchísima más información al respecto haciendo una búsqueda por la web.

Y por supuesto el lugar para hacer los cálculos es en la propia base de datos, mediante triggers que se disparan cuando cambian las existencias.

mamcx 02-10-2018 02:52:32

Cita:

Empezado por oscarac (Mensaje 528737)
la idea que tengo es barrer esa tabla hacerle EDIT e ir re-calculando, pero temo que ese proceso demore muchisimo y tampoco creo que sea el mas apropiado

Según entiendo el problema no es calcular sino que pasa si se hace un cambio en el pasado.

Hablando puramente por rendimiento, un RDBMS debería hacer updates o deletes/insert rapidísimo mientras no hayan bloqueos sobre la tabla (ie: transacciones concurrentes que alteren la tabla).

No te preocupes por rendimiento a menos que hagas mediciones. .

---

Por el lado contable, no debería existir el "borrado" sino el "enmendado". En las tablas de tipo contable no se borra, se adicionan registros que indican que se esta enmendando un proceso pasado. A la hora de reportes, simplemente se suma todo. Algo asi:

Cita:

Fecha Producto Cantidad Precio Promedio Delta Evento
10/2018 Producto x 100 2.50 3.50 2.50 Insertado
11/2018 Producto x 100 2.50 2.50 -1.0 Corregido
Esto es una salvacion a la hora de auditar porque algo no funciona.

Y ademas hace los reportes precisos. El 10/2018 la cant registrada es 3.50 . No 2.50 si lo que hicieras fuera desaparecer la informacion.

oscarac 02-10-2018 16:11:09

Entiendo,

en cuanto a la auditoria de la información, cualquier dato modificado se guarda en otras tablas que son invisibles para los usuarios en las cuales se puede verificar la información anterior
y tienes razon

el problema es el recalculo, no el calculo en si, por politica, se pueden realizar ventas sin stock y despues con el ingreso de la mercaderia vendida se regulariza, pero en cuestiones de costo los datos son incorrectos, es por eso necesario el recalculo.

lo que queria era ideas de como hacer el recalculo sin tener que "barrer" la data, pero veo que segun las caracteristicas que quiero implementar al modulo, esto tendra que ser asi (barrer)

duilioisola 02-10-2018 16:46:16

Yo tengo una tabla que tiene los datos básicos del documento y el cálculo del Precio Medio Ponderado.
A esto agrego una marca de validez.
Cuando hay una modificación/inserción o borrado, invalido los registros posteriores a la fecha.
De esta manera si encuentro un registro que es válido lo utilizo. Si es inválido llamo a una función que recalcula a partir de una fecha y me devuelve el registro que quiero.

Ejemplo:
  1. entra 10 a 100€
  2. Salen 5 a 90€
  3. Entran 7 a 90€
Código:

ID_ART, FECHA, ID_DOC_Y_LIN, UDS, PRECIO, STOCK, PMP,    LIFO,  FIFO,  VALIDO
1,      1/1/18, 1,          10,  100.00, 10,    100.00, 100.00, 100.00, 1
1,      4/1/18, 2,          -5,  100.00,  5,    100.00, 100.00, 100.00, 1
1,      9/1/18, 3,            7,  90.00, 12,    94.17,  90.00, 100.00, 1
...



La franja horaria es GMT +2. Ahora son las 00:36:35.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi