Inventario NO vendido en años anteriores


#1

Buenas tardes amigos…

Bueno les comento un poco un caso que me acaban de presentar y no entiendo que pasa en mi query que no me trae la información.

En la empresa donde laboro, trabajan tanto con productos terminados como con materia prima. Los productos terminados son los que normalmente se venden, y de vez en cuando se venden las materias primas, entonces me pidieron lo siguiente:

“Necesitamos un reporte de TODO el inventario que tenemos en existencia actualmente pero no se ha vendido en el último año (no ha tenido movimientos de salida)”

Bien. Intenté por SAP en Inventario - Informes de Inventario - Artículos inactivos

Se supone que este reporte te trae los materiales que no han tenido ningún tipo de movimiento a la fecha, con su stock y demás… “Pero…” (siempre existe un pero) resulta que si el artículo es parte de un Kit o de un conjunto que se vende todo junto, y se vendió su producto padre, pero no el hijo por separado te sale en este informe.

Como no conseguí como separarlo me dije a mi mismo: “bueno… no debe ser tan dificil crearlo y hacerlo ¿verdad?..”

Bien… Tengo un Query, que se supone que me debería de estar haciendo estas funciones, pero al correrlo me trae de resultado Nada… les coloco aquí primero el Query antes de explicar lo que hago en el mismo:


Select distinct
	oitm.ItemCode, 
	ItemName, 
	OnHand
from OITM 
where 
	oitm.itemcode not in (select distinct code from ITT1) --Con esto no me traigo los productos que sean hijos
	and OnHand > 0 --solo traigo lo que tenga en existencia
	and itemcode not in (
		select distinct itemcode from INV1 
		where inv1.docdate >= '01/01/2017' and INV1.docdate <= '12/31/2017' 
					) --Con este saco los artículos que tuvieron por lo menos 1 venta
order by itemcode, ItemName, OnHand

Ok… ahora explico mi problema. La primera parte me trae todos los artículos que no son hijos. eso al parecer está bien. El primer “And” me trae solo lo que tengo algo de existencia hasta aquí todo bien. ese query solo me trae unos 285 artículos.
Ahora cuando le coloco el último Itemcode not in (artículos con al menos 1 venta) el resultado me lo trae vacío…

Ahora bien. me traje las consultas por separada, sin el último validador de las ventas, el query me trae 285 artículos. el select de la INV1, solito (fuera de la consulta) me trae en total unos 165 artículos. Me dije a mi mismo que era imposible que 285 artículos con existencia diera 0 contra una tabla de solo 265 artículos y efectivamente si llevo los resultado de ambos querys por seaprado a un Excel me encuentro con los artículos que NO HAN SINDO VENDIDOS. pero no así en el query que me viene un resultado completamente vacío como si todo hubiera tenido sus ventas.

Debo decir que tengo aproximadamente unos 3 o 4 años que no me lanzo un query por lo que estoy un poco quemado y no lo vi muy bien en un Inner Join o algo así jajajaja.


#2

Hola :thinking:

A mi me funciona perfecto, lo ejecute tal cual lo publicaste, le agregue la condicion para que no tome las facturas anuladas, pero eso no afecta en gran manera el resultado.

Pruebalo desde esta otra forma a ver si te resulta

SELECT DISTINCT 
		T0.itemcode 
		,T1.ItemCode
		,ItemName
		,OnHand
FROM 
	OITM T0 LEFT JOIN (SELECT ItemCode --ESTE QUERY TRAE LAS VENTAS DEL PERIODO
			   FROM  OINV T0 JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry AND T0.CANCELED = 'N'
		                                      AND T0.docdate >= '01/01/2017' and T0.docdate <= '12/31/2017' 
			    ) T1 ON T0.itemcode = T1.itemcode 
WHERE 
	T0.itemcode NOT IN (select distinct code from ITT1)
	and T0.OnHand > 0 
	AND T1.ItemCode is null --ESTA CONDICION FILTRA LOS ITEMS QUE NO TIENEN COINCIDENCIA EN OINV

Saludos :vulcan_salute:


#3

Mmmmm extrañamente tu query si trae resultados… de hecho con el “t1.itemcode is null” ya me trae únicamente los que no se vendieron, (que yo lo hacía en el not in() )

Pero bueno…

Esta es mi base y de aquí parto… debo terminar esto hoy y les aviso cualquier cosa si lo cierro con esa solución xD


#4

Estimado, espero haber entendido bien tu necesidad, me tome la libertad de armarte una pequeña query con lo que entendí que necesitas, espero te sea útil.

SELECT
	T0.ItemCode
	, T0.ItemName
	, T0.OnHand
FROM OITM T0 
LEFT JOIN ITT1 T1 ON T0.ItemCode = T1.Code
WHERE ISNULL(T1.Code, '') = '' AND T0.InvntItem = 'Y' AND T0.SellItem = 'Y'
AND NOT EXISTS (SELECT * FROM INV1 TX0 WHERE T0.ItemCode = TX0.ItemCode AND TX0.DocDate BETWEEN '01/01/2017' AND '31/12/2017')
AND T0.OnHand > 0
ORDER BY T0.ItemCode, T0.ItemName, T0.OnHand ASC

#5

El Primer Query que me pasó @GabrielGS ya me ayudó con una buena parte…

Solo que ahora me encontré con otro tema… Resulta que tengo artículos que “HOY” no están en ninguna lista de materiaes (ITT1) pero, si estaban antes y por consiguiente SI fueron vendidos en el 2017…

Ando viendo como darle la vuelta a esta consulta que pensaba sería sencilla y terminó siendo una pequeña Hydra de 7 cabezas


#6

Según lo que indicas todo puedes resolverlo con una query o tal vez 2 y después unirlas, suerte.


#7

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.