cancel
Showing results for 
Search instead for 
Did you mean: 

Query Orden de Ventas

Former Member
0 Kudos

Estimados:

Tengo un query en el cual me piden informar los documentos de destino y base a contar desde la orden de ventas.

1.- Orden de ventas

2.- Entrega (Guía de despacho)

3.- Factura

4.- Devolución.

El error que me da el Query es que al momento de traer los datos de 1 mes, me arroja el resultado de una orden de ventas en 2 filas, esto está bien, ya que la OV tiene 2 Devoluciones, pero en la fila que no tienen asociada la Factura le ingresa un número que no corresponde.

Espero me Puedan ayudar, saludos a todos y muchas gracias.

Query:

select distinct  

        t0.DocNum as 'Folio NV'

       ,t0.DocDate

       ,t2.FolioNum as 'Folio Guía'

       ,t4.FolioNum as 'Folio Fact.'

       ,case when isnull(t6.DocNum, 0) = 0  then 'Sin devol.' else 'Devolucion' End as Estado

       ,isnull(t6.DocNum,0)as 'N° Devol.'

from ORDR T0

left join  RDR1 t1 on t1.docentry = t0.docentry

inner join ODLN t2 on t2.DocEntry = t1.TrgetEntry

left join  DLN1 t3 on t3.BaseEntry = T0.DocEntry and t3.DocEntry = t2.DocEntry

inner join OINV t4 on t4.DocEntry = t3.TrgetEntry

left join  INV1 t5 on t5.BaseEntry = t3.DocEntry and t5.DocEntry = t4.DocEntry

left join  ORDN t6 on t3.TrgetEntry = t6.DocEntry

left join  RDN1 t7 on t7.BaseEntry = t5.DocEntry and t7.DocEntry = t6.DocEntry

where T0.Docdate between '20160501' and '20160530'

order by t0.DocNum

Accepted Solutions (1)

Accepted Solutions (1)

gerardo_mendez
Active Contributor
0 Kudos

Hola compañero.

No comprendí muy bien tu error pero mi primer consejo es que tus Joins entre encabezado y detalle siempre sea INNER JOIN y tus Joins entre diferentes documentos sean LEFT JOIN

ORDR Inner Join RDR1

OINV Inner Join INV1

ODLN Inner Join DLN1

RDR1 Left Join ODLN

DLN1 Left Join OINV...

Saludos. Quedo Pendiente.

Former Member
0 Kudos

Estimado Gerardo:

Muchas gracias por tu respuesta, haré las pruebas y te comento que tal.

Saludos.

Alex

Former Member
0 Kudos

Gerardo:

Realicé lo que me dijiste, dejar solamente INNER JOIN entre encabezado y detalle, pero al ejecutarlo no me arroja información.

Crees que me puedas ayudar con el Query, por que en realidad no me está funcionando.

Muchas gracias de antemano.

Alex

gerardo_mendez
Active Contributor
0 Kudos

Hola Alex...

De esta manera me ha funcionado, prueba en tu entorno:

select distinct 

        t0.DocNum as 'Folio NV'

       ,t0.DocDate

       ,t2.DocNum as 'Folio Guía'

       ,t4.DocNum as 'Folio Fact.'

       ,case when isnull(t6.DocNum, 0) = 0  then 'Sin devol.' else 'Devolucion' End as Estado

      ,isnull(t6.DocNum,0)as 'N° Devol.'

from ORDR T0

Inner join  RDR1 t1 on t1.docentry = t0.docentry

Left join ODLN t2 on t2.DocEntry = t1.TrgetEntry

Inner Join DLN1 t3 on t3.DocEntry = t2.DocEntry

Left Join OINV t4 on t4.DocEntry = t3.TrgetEntry

Inner join  INV1 t5 on t5.DocEntry = t4.DocEntry

left join  ORDN t6 on t3.TrgetEntry = t6.DocEntry

where T0.Docdate between '20160101' and '20160530'

order by t0.DocNum

No olvides que una buena forma de agradecer las aportaciones es marcando las respuestas como respuestas de ayuda y en caso de existir, marcar la respuesta correcta (Los Likes no dan puntos, jeje)

Puntos de reputación en las discusiones:

Quien responde recibe:Quien pregunta debe presionar:
5 puntos por respuesta que "ayude"
Límite: 15 por discusión.
10 puntos por respuesta "correcta"
Límite: 1, una vez que marcamos una respuesta como correcta, el tema queda marcado como "solucionado".

Former Member
0 Kudos

Estimado Gerardo:

Gracias por tu tiempo, pero lamentablemente no me funciona tu Query. Lo he realizado directamente en SQL y esperé 2 minutos y no me entregaba información.

He realizado este query el cual me funciona, pero se demora como 25 aprox. Existe alguna manera de arreglarlo.

Muchas gracias.

Query.

select distinct  

        t0.DocNum as 'Folio NV'

       ,t0.DocDate

       ,t2.FolioNum as 'Folio Guía'

       ,isnull(t4.FolioNum,0) as 'Folio Fact.'

       ,case when isnull(t6.DocNum, 0) = 0  then 'Sin devol.' else 'Devolucion' End as Estado

       ,isnull(t6.DocNum,0)as 'N° Devol.'

from ORDR T0

left join  RDR1 t1 on t1.docentry = t0.docentry

inner join ODLN t2 on t2.DocEntry = t1.TrgetEntry

left join  DLN1 t3 on t3.BaseEntry = T0.DocEntry

                  and t3.DocEntry = t2.DocEntry

                  and t3.BaseType='17'

left join  INV1 t5 on t5.DocEntry = t3.TrgetEntry

                  and t5.BaseType='15'

left join OINV t4 on t4.DocEntry = t5.DocEntry

left join  ORDN t6 on t6.DocEntry = t3.TrgetEntry

left join  RDN1 t7 on t7.BaseEntry = t3.DocEntry and t7.DocEntry = t6.DocEntry

where t0.DocDate between '20160501' and '20160530'

order by t0.DocNum

Former Member
0 Kudos

Hola a todos en el foro, puede alguien ayudar con el Query mencionado anteriormente.

Espero puedan responder.

Gracias.

Alex

Former Member
0 Kudos

Alex!

Por favor probar este Query, tomar en cuenta que debes evaluar que  estes seleccionando al base de datos de la sociedad de SAP y adicional, que en el rango de fechas que estes ejecutando la consulta, tengas documentos. ** En este apartado del Qry: BETWEEN '20160101' AND '20160530'*

USE [BASE_DATOS_SAP]

GO

SELECT DISTINCT

        T0.DOCNUM AS 'FOLIO NV'

       ,T0.DOCDATE

       ,T2.DOCNUM AS 'FOLIO GUÍA'

       ,T4.DOCNUM AS 'FOLIO FACT.'

       ,CASE WHEN ISNULL(T6.DOCNUM, 0) = 0  THEN 'SIN DEVOL.' ELSE 'DEVOLUCION' END AS ESTADO

      ,ISNULL(T6.DOCNUM,0)AS 'N° DEVOL.'

FROM ORDR T0

INNER JOIN  RDR1 T1 ON T1.DOCENTRY = T0.DOCENTRY

LEFT JOIN ODLN T2 ON T2.DOCENTRY = T1.TRGETENTRY

INNER JOIN DLN1 T3 ON T3.DOCENTRY = T2.DOCENTRY

LEFT JOIN OINV T4 ON T4.DOCENTRY = T3.TRGETENTRY

INNER JOIN  INV1 T5 ON T5.DOCENTRY = T4.DOCENTRY

LEFT JOIN  ORDN T6 ON T3.TRGETENTRY = T6.DOCENTRY

WHERE T0.DOCDATE BETWEEN '20160101' AND '20160530'

ORDER BY T0.DOCNUM

Favor nos cuentas si fue de ayuda.

Saludos,

Carlos B.

Former Member
0 Kudos

Estimado Carlos:

Gracias por tu respuesta, pero lamentablemente no me funciona, ya que me entrega otra información en el campo Folio Fact. cuando ésta tienen devolución y no debería entregar información en ese campo, ya que no tiene factura.

Así quedó finalmente el Query y funciona.

select distinct 

        t0.DocNum as 'Folio NV'

       ,t0.DocDate

       ,t2.FolioNum as 'Folio Guía'

       ,isnull(t4.FolioNum,0) as 'Folio Fact.'

       ,case when isnull(t6.DocNum, 0) = 0  then 'Sin devol.' else 'Devolucion' End as Estado

       ,isnull(t6.DocNum,0)as 'N° Devol.'

     from  ORDR T0

left join    RDR1 t1 on t1.docentry = t0.docentry

inner join ODLN t2 on t2.DocEntry = t1.TrgetEntry

left join    DLN1 t3 on t3.BaseEntry = T0.DocEntry

                  and t3.DocEntry = t2.DocEntry

                  and t3.BaseType='17'

left join   INV1 t5 on t5.DocEntry = t3.TrgetEntry

                  and t5.BaseType='15'

left join   OINV t4 on t4.DocEntry = t5.DocEntry

left join   ORDN t6 on t6.DocEntry = t3.TrgetEntry

left join   RDN1 t7 on t7.BaseEntry = t3.DocEntry and t7.DocEntry = t6.DocEntry

where t0.DocDate between '[%0]' AND '[%1]'

order by t0.DocNum

Gracias a todos.

Alex O.

Answers (0)