Query para saldos de movimientos de articulos

buenas tardes foro alguien tiene un query que me pueda proporcional para sacar los saldos finales de inventarios por almacenes de salidas entradas y stock tanto en cantidad final como en costo final

ejemplo

articulo 1 saldo inicial 100
coto inicial $10
entradas 50
costo entrada $5
salida 100
costo salida $100
stock 50
saldo de coto final $50

se que esta el de auditoria de stock pero ese no me sirve por que solo me da el stock final, si biene los movimientos de entradas y salidas pero no biene una agrupacion total de las cantidades

Hola Asanchez, en que version de SAP estas trabajando, porque yo he trabajado con SAP B1 ver 8 y 9, en las dos versiones me da el reporte de auditoria de stocks con existencia por registro y el stock final, no entiendo que es lo que necesitas,

Saludos

como les comento requiero un reporte donde solo me de los saldos finales en total, el reporte de auditoria de stocks me da el stock final pero los movimientos de entrada y salida no me manda un saldo final

porque no adjuntas una pantalla del reporte para comprenderte mejor, yo en ese reporte puedo ver el saldo final de las piezas filtradas y por almacen

Lo qué consulta Asanchez, me parece que va dirigido a la composición del saldo, no únicamente el saldo final:

Partir de un saldo inicial + Entradas - Salidas = Saldo Final

En realidad yo para obtener esto lo que hice fue hacer un query con la tabla OINM, la traslado a excel y genero una tabla dinámica para resumir los movimientos. No sé sí alguien tiene una mejor solución, me gustaría conocerla.

SELECT T0.[TransNum], T0.[BASE_REF], T0.[DocDate], T0.[ItemCode], T0.[Dscription],T1.[SalUnitMsr], T0.[InQty], T0.[OutQty], T0.[Price], T0.[Currency], T0.[Rate], T0.[TransValue],T0.[InvntAct],T0.[Warehouse],  T0.[CardCode], T0.[CardName], T0.[PrjCode], T0.[OcrCode], T0.[Comments] FROM OINM T0  INNER JOIN OITM T1 ON T0.[ItemCode] = T1.[ItemCode] WHERE T0.[DocDate] >=[%0] AND T0.[DocDate] <=[%1] ORDER BY T0.[ItemCode]

Pus coincido con @Nestor_Romo, lo que buscan lo da sin problemas el informe de auditoría de stock o tampoco estoy entendiendo el requerimiento.

Sería bueno un ejemplo de la estructura del reporte que buscas.

Saludos.

Hola @Asanchez,

Tengo un query que hice hace algún tiempo y que te puede ayudar ya que devuelve los movimientos de entradas y salidas, pero no devuelve los costos, lo tienes que modificar según lo que necesitas.

@dataInicio datetime,
@dataFinal datetime,
@almacen text
as

with c 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 o.ItemCode,
o.Dscription,
coalesce(c.inventario,0) as inv_ini,
sum(coalesce(o.InQty,0)) as entradas,
sum(coalesce(o.OutQty,0)) as salidas,
i.Price,
f.WhsName

from oinm o left join itm1 i on o.ItemCode=i.ItemCode
left join c on c.ItemCode=o.ItemCode
join owhs f on o.Warehouse = f.WhsCode

where o.Warehouse=convert(nvarchar,@almacen) and convert(date,o.DocDate,112) between convert(date,@dataInicio,112) and convert(date,@dataFinal,112) and i.PriceList=1

group by o.ItemCode, o.Dscription, c.inventario, i.Price, f.WhsName

order by o.ItemCode

Saludos

2 Me gusta

Hola @juliosura

Disculpa, estaba trabajando igual en un query de Entradas y Salidas por articulo y almacén; solo que la verdad aún no he podido anexarle el inventario inicial y los costos.

Hasta momento esto es lo que he podido armar:

SELECT T0.[ItemCode], T2.[ItemName], T1.[WhsCode], T1.[WhsName], SUM ( T3.[InQty]) AS 'Entradas',SUM( T3.[OutQty]) AS 'Salidas', T0.[OnHand] FROM OITW T0  INNER JOIN OWHS T1 ON T0.[WhsCode] = T1.[WhsCode] INNER JOIN OITM T2 ON T0.[ItemCode] = T2.[ItemCode] INNER JOIN OINM T3 ON T2.[ItemCode] = T3.[ItemCode] WHERE T3.[DocDate] >=[%0] AND  T3.[DocDate] <=[%1] GROUP BY T2.[ItemName], T0.[ItemCode], T1.[WhsCode], T1.[WhsName], T0.[OnHand]

Estaba viendo el que creaste pero soy algo inexperta aún en las consultas, jejeje :sweat_smile:

Si alguien pudiera guiarme, se lo agradecería enormemente.

Saludos!!!

1 me gusta

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.

2 Me gusta

Este tema se cerró por inactividad.

Copia la URL de este debate, y abre un nuevo tema en #feedback si:

  • El autor del debate no marcó ninguna respuesta como solución, y tú crees tener la solución
  • Crees tener otra solución a la que actualmente está marcada.

Si, en cambio tienes una duda parecida a la que se debatió, o la misma duda, abre un nuevo tema en la categoría que corresponda y pon que el tema se debatió oportunamente (pega el enlace a este debate), así los otros lectores pueden saber de qué hablas.

Ayúdanos a tener una comunidad organizada.