Si es como tu dices, que mientras que existan sacos de cemento antiguos, siempre se saquen los antiguos antes que los nuevos (FIFO), entonces el precio medio no te servirá al 100%.
Supongo que sabes que para calcular el precio medio de un artículo se utiliza la siguiente fórmula :
(Exist. Antigua * Pr.Med.Antig) + (Nueva Compra * Nuevo Precio)
Nuevo Precio Medio = -----------------------------------------------------------------
Exist. Antigua + Nueva Compra
Si te vas a regir por el sistema FIFO que propones, pues te propongo la siguiente lógica :
Tabla de compras :
50 sacos x 3.850 $ (de los cuales ahora mismo en almacén me quedan 30)
Deberás de llevar un registro de existencia actual que ponga 30.
Nuevas compras :
90 sacos x 4.500 $
50 sacos x 5.600 $
Los registros de compra se ordenan secuencialmente (o tb. por fecha de compra)
Existencia nueva actual : 170.
Retiro para la obra (p.ej.) 40 sacos en una primera tanda.
Primer cálculo : 170 (Ex.Act.) - 40 (que retiro) = 130 que tiene que quedar.
Voy hacia atrás en el registro de compras hasta que la suma de las últimas compras sea mayor que la existencia restante que acabo de calcular.
Ejemplo en este caso
50 última compra (< 130 .... sigo)
50 + 90 = 140 (> 130 ... paro)
140 - 130 = 10. Es decir, de la retirada de 40 sacos, 10 son al precio que compre los 90 (4.500 $), y 40 - 10 = 30 son al precio de la anterior compra que tendré que buscar (3.850 $).
Costo de la 1ª tanda de 40 sacos :
(30 x 3850) + (10 x 4500).
Al retirar 40 mi nueva existencia se convierte en 170 - 40 = 130.
Siguiente tanda de retirada : 100 sacos.
Nueva operación : 130 (Ex.Act) - 100 (que retiro) = 30 que tienen que quedar al final de la segunda retirada.
De nuevo voy para atrás en el registro de compras.
50 (última compra) (> 30 de mi calculo) .... paro
50 - 30 = 20 sacos que tengo que coger de la última compra a 5.600 $
100 sacos retirados - 20 sacos al último precio = 80 sacos al precios anterior de 4.500 $
Total consumido :
40 sacos
(30 x 3850) + (10 x 4500) = 160.500
100 sacos
(80 x 4500) + (20 x 5600) = 472.000
Total = 632.500
Si finalmente gastos los 30 sacos que te quedan en existencia, por la misma lógica te saldrá que esa retirada de 30 sacos será a 5600 $ cada uno, es decir, 168.000 $.
El total de costo habría sido entonces = 800.500 $ que es precisamente la cantidad que buscas.
Este sistema, como comprobarás, además te permite llevar la existencia actual, que según mis tandas de retirada han sido sucesivamente, 30, 170, 130, 0.
Esta es la lógica vista con un ejemplo práctico y numérico. Ahora te toca programar
Espero te haya servido y mi planteamiento sea el que tu propones.
Saludos