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:
- entra 10 a 100€
- Salen 5 a 90€
- 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
...