Hola @Laura.pripe88
El query que tienes devuelve el campo [OnHand] de la tabla OITW, pero lo puedes calcular al tener inventario inicial + entradas - salidas. Por esa razón yo no utilice la tabla OITW.
He modificado el query que coloque arriba para que te sea más útil, auque siempre lo puedes modificar según tus necesidades:
@dataInicio datetime,
@dataFinal datetime,
@almacen text
AS
WITH Inventario AS
(
SELECT O.ItemCode, ISNULL(SUM(COALESCE(O.inqty,0))-SUM(COALESCE(O.OutQty,0)),0) AS Inventario
FROM OINM O
WHERE O.Warehouse=CONVERT(NVARCHAR,@almacen) and O.DocDate < DATEADD(DAY,-1,@dataInicio)
GROUP BY O.ItemCode
)
SELECT T0.ItemCode,
T0.Dscription,
T3.WhsCode,
T3.WhsName,
COALESCE(T2.Inventario,0) AS 'Inventario Inicial',
SUM(COALESCE(T0.InQty,0)) AS Entradas,
SUM(COALESCE(T0.OutQty,0)) AS Salidas,
COALESCE(T2.Inventario,0) + SUM(COALESCE(T0.InQty,0)) - SUM(COALESCE(T0.OutQty,0)) AS Existencia,
T4.AvgPrice AS Costo
FROM OINM T0 LEFT JOIN ITM1 T1 on T0.ItemCode=T1.ItemCode
LEFT JOIN Inventario T2 on T0.ItemCode=T2.ItemCode
JOIN OWHS T3 on T0.Warehouse = T3.WhsCode
LEFT JOIN OITM T4 on T0.ItemCode = T4.ItemCode
WHERE T0.Warehouse=CONVERT(NVARCHAR,@almacen) AND CONVERT(DATE,T0.DocDate,112) BETWEEN CONVERT(DATE,@dataInicio,112) AND CONVERT(DATE,@dataFinal,112)
GROUP BY T0.ItemCode, T0.Dscription, T2.inventario, T4.AvgPrice, T3.WhsCode, T3.WhsName
ORDER BY T0.ItemCode
La columna “Existencia”, la puedes omitir ya que no es eficiente hacer este calculo desde el query, lo puedes calcular en el reporte únicamente (si lo haces en Crystal), sin embargo la deje para que veas porque no use la OITW.
Recuerda que el resultado es en el rango de fechas que definas, en algunos casos puede ser la existencia negativa, debido a que han habido mas salidas que entradas en dicho período, lo digo porque me ha pasado que cuando los usuarios lo ven se asustan.
Saludos, y espero que te sea de utilidad.