on 06-30-2016 6:04 PM
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
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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:
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
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.
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.
User | Count |
---|---|
98 | |
11 | |
11 | |
6 | |
6 | |
4 | |
4 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.