En este post, expondremos como poder obtener, para cada artículo, una nueva información relacionada con el stock, el lote económico, calculado según la formula de Harrys-Wilson. En 1934, Wilson introduce el concepto de Lote Económico, mediante una formula, que permite calcular la cantidad óptima de reabastecimiento y el tiempo óptimo entre dos pedidos de un producto para una entidad dada (planta, centro logístico, almacén,…). Existen unas premisas a tener en cuenta:
- El horizonte que afecta a la gestión de stocks es ilimitado, por lo que el proceso continúa de forma indefinida.
- La demanda es continua, conocida y homogénea en el tiempo, por lo que se supone que la tasa de consumo es D unidades/año.
- El plazo de entrega, L, es constante y conocido.
- No se aceptan rupturas de stock.
- El coste variable de adquisición es constante, CA €/unidad.
- La entrada del lote en el sistema es instantáneo al transcurrir el plazo de entrega.
- El lote tendrá siempre el mismo tamaño, para que los parámetros del modelo sean constantes.
- Se considera un coste de lanzamiento del pedido de CL €/pedido. Este es el coste total de ejecutar, seguir y realizar un pedido.
- Se considera un coste de posesión de stock igual a CP €/unidad. Este es el coste total de almacenar un articulo, (espacio, gestión, manipulación, financiación,…).
declare @dataInicio datetime
declare @dataFinal datetime
declare @tempo int
SET @tempo=(SELECT TOP 1 T0.TRANSNUM FROM OINM T0 WHERE T0.[DocDate] >=[%0] AND T0.[DocDate] <=[%1])
SET @dataInicio=(SELECT '[%0]')
SET @dataFinal=(SELECT '[%1]')
SELECT s.itemcode
,Consumo=sum(s.outqty)
,[Lote Economico]=round(sqrt( (2*max(a.U_SE_LECL)*sum(s.outqty)) /max(a.U_SE_LECP)),2)
,[NumPedidos Periodo]=round((sum(s.outqty)/sqrt( (2*max(a.U_SE_LECL)*sum(s.outqty))/max(a.U_SE_LECP))),2)
,[CicloAprov. Dias]=round(datediff(day,@dataInicio,@dataFinal)/(sum(s.outqty)/ sqrt( (2*max(a.U_SE_LECL)*sum(s.outqty))/max(a.U_SE_LECP))),0)
FROM OINM s JOIN OITM a ON a.ItemCode=s.ItemCode
WHERE s.docdate BETWEEN @dataInicio AND @dataFinal
AND s.outqty>0 and a.U_SE_LECL>0 and a.U_SE_LECP>0
GROUP BY s.itemcode
ORDER BY s.itemcode
- La primera columna nos indica el código del articulo.
- El consumo de cada artículo en el periodo indicado al inicio.
- El lote económico según la formula de Wilson y los datos entrados.
- El numero de pedidos a realizar durante el periodo estudiado.
- El ciclo de aprovisionamiento en días, o cada cuantos días es necesario realizar un pedido.
- El dato de Lote económico guardarlo en el campo 'Pedido múltiple' de la pestaña planificación del maestro de artículos, así se utiliza en el cálculo de necesidades (MRP) estándar de SAP B1.
De donde se obtiene el campo a.U_SE_LECL?
ResponderEliminarGracias
Hola, alguien tiene la consulta pero de tal manera que los años sean variables y no fijos?
ResponderEliminardeclare @dataInicio datetime
declare @dataFinal datetime
declare @tempo int
SET @tempo=(SELECT TOP 1 T0.TRANSNUM FROM OINM T0 WHERE T0.[DocDate] >=[%0] AND T0.[DocDate] <=[%1])
SET @dataInicio=(SELECT '[%0]')
SET @dataFinal=(SELECT '[%1]')
SELECT s.itemcode ,Consumo=sum(s.outqty) ,[Lote Economico]=round(sqrt( (2*max(a.U_SE_LECL)*sum(s.outqty)) /max(a.U_SE_LECP)),2) ,[NumPedidos Periodo]=round((sum(s.outqty)/sqrt( (2*max(a.U_SE_LECL)*sum(s.outqty))/max(a.U_SE_LECP))),2) ,[CicloAprov. Dias]=round(datediff(day,@dataInicio,@dataFinal)/(sum(s.outqty)/ sqrt( (2*max(a.U_SE_LECL)*sum(s.outqty))/max(a.U_SE_LECP))),0)
FROM OINM s JOIN OITM a ON a.ItemCode=s.ItemCode
WHERE s.docdate BETWEEN @dataInicio AND @dataFinal
AND s.outqty>0 and a.U_SE_LECL>0 and a.U_SE_LECP>0
GROUP BY s.itemcode
ORDER BY s.itemcode