jueves, 17 de marzo de 2022

LAMBDA: Método FIFO

Creo que me estoy volviendo un poco loco con las funciones LAMBDA :DD
Hoy he decidido intentar aplicar estas funciones para aplicar el método de valoración de inventario por el método FIFO
Asi que partiremos de una tabla de movimientos para un artículo, donde recogemmos sus entradas y salidas:
LAMBDA: Método FIFO


El primer cálculo será para obtener un vector con el stock vivo en cada movimiento.
En I4 escribimos:
=SCAN(0;
$E$4:$E$10*SI($C$4:$C$10="Entrada";1;-1);
LAMBDA(ac;itm;ac+itm))
LAMBDA: Método FIFO

La función SCAN recorre acumulando las unidades de entrada y salida, a las que hemos cambiado el signo para facilitar el correcto acumulado.

El siguiente paso es clave para el desarrollo, ya que con este cálculo obtenemos el consumo actual de cada entrada que exista, de acuerdo a las salidas.
(FUNDAMENTAL QUE LOS DATOS ESTÉN ORDENADOS CON UN CRITERIO TEMPORAL!)
LAMBDA: Método FIFO

En J4 la fórmulita LAMBDA...
=LAMBDA(vector;ValorReparto;
MAP(SCAN(0;vector;LAMBDA(ac;itm;MIN(itm;ValorReparto-ac;itm)));
SCAN(0;SCAN(0;vector;LAMBDA(ac;itm;MIN(itm;ValorReparto-ac;itm)));LAMBDA(acum;elto;acum+elto));
LAMBDA(prim;seg;SI(seg<ValorReparto;prim;SI(prim=0;0;prim-seg+ValorReparto)))))($E$4:$E$10*SI($C$4:$C$10="Entrada";1;0);$J$14)

Nuesta función LAMBDA requiere dos argumentos, un vector con los movimientos de unidades, y por otro lado el número de unidades totales que salen...
El argumento 'matriz' está compuesto de una función MAP con dos matrices:

matriz 1:

SCAN(0;vector;LAMBDA(ac;itm;MIN(itm;ValorReparto-ac;itm)))
que nos devuelve un vector solo con las unidades de entrada

matriz 2:

SCAN(0;SCAN(0;vector;LAMBDA(ac;itm;MIN(itm;ValorReparto-ac;itm)));LAMBDA(acum;elto;acum+elto))
nos devuelve un acumulado SOLO de las unidades de entrada (y sí, se debería haber empleado LET).
Estas serían las dos matrices/vectores anteriores:
LAMBDA: Método FIFO

El último argumento de MAP es la función LAMBDA:
LAMBDA(prim;seg;SI(seg<ValorReparto;prim;SI(prim=0;0;prim-seg+ValorReparto)))
que se encarga de comparar y operar sobre los dos vectores anteriores, de tal forma que obtenemos el vectoro final con las unidades consumidas de cada compra!

Con este cálculo clave solo nos queda una sencilla resta en la celda K4:
=$E$4:$E$10*SI($C$4:$C$10="Entrada";1;0)-J4:J10
con lo que obtenemos las unidades pendientes de vender, esto es, el stock vivo no empleado vinculado a cada compra.
LAMBDA: Método FIFO


Acabamos en la celda L4 multiplicando unidades pendientes por precio, con lo que llegamos a nuestra valoración FIFO.

Seguramente se pueda lograr de una forma más directa con estas funciones, pero como ejercicio donde empleamos dos matrices en la función MAP, me parece muy interesante ;-)

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.