Ya busqué lo que había por aquí. En mi empresa había una consulta expresamente para revisar artículos con baja rotación (Gestion inactivos) pero nos da error constantemente de un tiempo a esta parte. He consultado con nuestro partner y parece que puede ser algún artículo el que esté dando problemas, pero no lo encontramos, así que creí que buscarles otra consulta podría ser de utilidad a mis compañeros, ya que en Julio hacen una revisión de esos artículos para la primera mitad del año y ya van con un mes de retraso.
En otro foro (perdón por la infidelidad) he encontrado una consulta:
-- Informe para SBO de Indicadores de Inventario
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
[Artículo]=t1.itemcode,
Consumo=isnull(t1.consumo,0),
[Consumo medio diario]=isnull(t1.consumo/datediff(day,@dataInicio,@dataFinal),0),
[Stock inicial]=isnull(coalesce(t0.saldoinic,0),0),
[Stock final]=isnull(coalesce(t0.saldoinic,0)+coalesce(t1.saldofin,0),0),
[Stock promedio]= isnull((coalesce(t0.saldoinic,0)+(coalesce(t0.saldoinic,0)+t1.saldofin))/2,0),
[Rotación stock]= case isnull((coalesce(t0.saldoinic,0)+(coalesce(t0.saldoinic,0)+t1.saldofin))/2,0) when 0 then 0 else isnull(t1.consumo / ((coalesce(t0.saldoinic,0)+(coalesce(t0.saldoinic,0)+t1.saldofin))/2) ,0) end,
[Cobertura de stock]= case isnull(coalesce(t1.consumo/datediff(day,@dataInicio,@dataFinal),0),0) when 0 then 0 else isnull(((coalesce(t0.saldoinic,0)+(coalesce(t0.saldoinic,0)+t1.saldofin))/2)/ ( t1.consumo/datediff(day,@dataInicio,@dataFinal)),0) end
FROM (
SELECT
a1.itemcode,
saldoInic=isnull(sum(coalesce(s1.Inqty,0))-sum(coalesce(s1.outqty,0)),0)
FROM OITM a1
JOIN OINM s1 on a1.itemcode=s1.itemcode
WHERE s1.docdate<@dataInicio
GROUP BY a1.itemcode
) as t0
RIGHT JOIN (
SELECT
a.itemcode,
entradas=isnull(sum(s.Inqty),0),
consumo=isnull(sum(s.outqty),0),
saldoFin=isnull(sum(s.Inqty)-sum(s.outqty),0)
FROM OINM s
JOIN OITM a on a.itemcode=s.itemcode
WHERE s.docdate BETWEEN @dataInicio and @dataFinal
GROUP BY a.itemcode ) t1 on t1.itemcode=t0.itemcode
donde:
- Consumo (D):El consumo de unidades en un periodo de tiempo
- Stock promedio (Sm):Se determina calculando la media de 2 valores de stock entre dos fechas conocidas Sm=(Sinicial+Sfinal)/2
- Rotación del stock (Rs): Frecuencia media de renovación de las existencias consideradas, durante un tiempo dado. Calculado como Rs=D/Sm Por ejemplo una rotación anual de 12 significa que las existencias consideradas se renuevan 12 veces al año, es decir una vez por mes.
- Consumo medio diario (Cj): Calculado como el consumo D divido por el número de días del periodo de cálculo
- Cobertura del stock (Cs): La cobertura es el stock promedio Sm dividido por el consumo medio diario Cj. El valor obtenido es el número de días de cobertura.
El listado nos muestra la siguiente información:
El código del artículo.
El consumo (D) en el periodo indicado al inicio.
El consumo diario de cada artículo (Cj), según la media entre el consumo y los días del intervalo informado.
El stock inicial (Sinicial), o stock al principio del periodo de tiempo informado.
El stock final (Sfinal) o stock en el momento de la fecha final del ámbito estudiado.
El stock promedio (Sm) en el periodo estudiado.
La rotación de stock (Rs), o las veces que se ha repuesto durante el periodo estudiado
La cobertura de stock (Cs), o los días que disponemos de stock de este articulo.
(fuente: ht_p://sapb1hub.blogspot.com.es/2010/08/calculo-de-la-rotacion-del-inventario-y.html)
Creo que podría ser un punto de partida y aunque no tiene la misma estructura que la que teníamos anteriormente, quizás les valga para salir del paso en esta ocasión.
Qué les parece a ustedes?