Ayuda con Query Articulos sin mov y clientes

Buen dia compañeros,

Tengo un query que he sacado de foros que me funciona para mostrar los articulos que no han tenido movimiento en 6 meses de un almacen y es el siguiente:

SELECT T0.[ItemCode], T1.[ItemName], T2.ItmsGrpNam as Familia ,T1.InvntryUom as UdM, T0.OnHand as Stock, T0.AvgPrice as CostoPromedio, T0.OnHand*T0.AvgPrice as CostoTotal
FROM OITW T0  
INNER JOIN OITM T1 ON T0.[ItemCode] = T1.[ItemCode] 
INNER JOIN OITB T2 ON T1.ItmsGrpCod=T2.ItmsGrpCod
WHERE T0.[WhsCode] IN ('MEX') AND  T0.[OnHand] >'0' AND T0.[ItemCode] not in (Select Distinct T2.Itemcode from OINM t2 where t2.DocDate > DATEADD(mm, -6, GETDATE())) 
ORDER BY (T0.[OnHand]*T0.[AvgPrice]) DESC

Al yo usar DATEADD(mm, -6, GETDATE()) es que quiero me traiga info a partir de 6 meses hacia atras. Este resultado lo revise con varios articulos aleatoriamente y si me muestra que no tienen movimiento desde hace 6 meses.

Pero ahora necesito saber que clientes fueron los que compraron por ultima vez esos articulos que no han tenido movimiento.

Para eso estoy formulando el siguiente query:

Select Y0.CardCode as Codigo, Y0.CardName as Cliente, Y0.DocNum as NumFactura, Y0.DocDate as FechaFactura ,Y0.DocTotal as TotalMX
FROM OINV Y0 
INNER JOIN INV1 Y1 ON Y0.DocEntry=Y1.DocEntry
INNER JOIN OITM Y2 ON Y1.ItemCode=Y2.ItemCode
INNER JOIN OITW Y3 ON Y2.ItemCode=Y3.ItemCode
WHERE Y3.WhsCode = 'MEX' AND Y3.OnHand>'0' AND Y3.ItemCode not in (Select Distinct T2.Itemcode from OINM t2 where t2.DocDate > DATEADD(mm, -6, GETDATE())) 

Pero no me responde como yo deseo…alguien podria echarme una mano con esto.

Muchas gracias por tomarse el tiempo.

Hola…

Antes que nada Bienvenido al foro… Por favor pasa por la sección de Presentaciones para poder conocerte, saber de que trabajas, y poder ayudarte según el conocimiento o “poder” que tengas dentro de SAP B1. Esto nos ayuda mucho a los demás para saber que podemos decirte que hagas y que no por ser más complicado.

AHora bien… Un par de detalles que sería importante revisar:

  1. Por favor colocar el código dentro del formato de código para poder hacer una mejor lectura en el foro.
  2. Recomiendo que cambies en el final la consulta, en vez de ser fecha del documento mayor la fecha actual menos 6 meses… eso no te va a funcionar para lo que quieres (el DATEADD(MM,-6,getdate()) ahorita en Abril por ejemplo te va a dar resultado noviembre, y al pedirle que la fecha sea superior ha (>), quiere decir que te está trayendo documentos que se SI han movido en los últimos 6 meses, y por lo que entendí es que tu quieres los que NO han tenido movimiento en estos 6 meses.
  3. organiza el query por partes, así te será más fácil de crear y comprender que estás haciendo, ejemplo:
    a.- Ya tienes un query que te trae los artículos que no han tenido movimiento en los últimos 6 meses (aunque me parece que está mal, en serio revisa el t2.docdate > … ),
    b.- ahora necesitas traer las factura con el Max(Docnum) donde se vendieron esos artículos (esto es de la OINV y de la INV1).
    c.- Por último en la unión de esas 2 consultas, sacas tu consulta final con los datos específicos que quieras. y necesites.

Puedes organizar esto con tablas temporales, o los 2 primeros querys convertirlo en vistas de SAP… tienes distintas formas de organizarlo.

Ya esta mi presentacion, muchas gracias por tus comentarios.

Te comento que inicialmente no senti necesario hacer tablas temporales o vistas…estoy definiendolo primero en el SQL Mgmnt…te platico tambien que del primer query si hice unas pruebas de al menos 15 articulos y los que me muestra no han tenido mvimiento, eso revisado dentro de SAP mediante auditoria de articulos, quiza lo que si falta sea especificar el tipo de doc por que tambien podria traer movimientos de tansferencias, dejarlo esclusivo para puras ‘entregas’ (mi procedimiento es Cot-Ped-Entrega-Fac).

Quiza lo que mencionas del DATE es que me trae para adetante de noviembre, el punto ahi es que estoy agregando un “not in” que hace la parte que te comento.

Sigo haciendo pruebas…y si lo resuelvo antes lo pongo en el foro.

Saludos

Aqui dejo el query que al final use que me da la informacion como la queria.

Select DISTINCT Y0.CardCode as Codigo, Y0.CardName as Cliente, (Y0.DocNum) as NumFactura, Y0.DocDate as FechaFactura , Y1.ItemCode as Articulo ,Y1.LineTotal as TotalLineaMX
FROM OINV Y0 
INNER JOIN INV1 Y1 ON Y0.DocEntry=Y1.DocEntry
INNER JOIN OITM Y2 ON Y1.ItemCode=Y2.ItemCode
INNER JOIN OITW Y3 ON Y2.ItemCode=Y3.ItemCode
INNER JOIN NNM1 Y4 ON Y0.Series=Y4.Series
WHERE Y4.SeriesName in ('F-MEX','R-MEX') 
AND Y0.DocDate>='20170101' AND Y0.DocDate<=getdate()
AND Y3.OnHand>'0' AND Y1.TargetType<>'14' 
AND Y3.ItemCode not in (Select Distinct T2.Itemcode from OINM t2 where t2.DocDate > DATEADD(mm, -6, GETDATE())) 
ORDER BY Y0.DocDate DESC
 

Sigo probando pero inicialmente si me trae informacion a como la queria ver…trae todos los clientes que me compraron algun material que no se ha vendido en 6 meses, para de esa manera saber a quien ofrecerle el stock que se tiene. El query esta delimitiado por fechas y en base al nombre de la serie, no arroja facturas canceladas.

Por si alguien lo quiere probar o comentar.

Saludos

1 me gusta

Este tema se cerró automáticamente 30 días después de la última publicación. No se permiten nuevas respuestas.