Query OV-Entrega-Factura

Buenas tardes,

Estoy tratando de realizar un query que me arroje todas las Ordenes de Venta creadas en una fecha determinada con información de sus documentos destino (Entregas y Facturas). Pero también requiero visualizar en la misma consulta aquellas Ordenes de Venta que no tienen Entregas ni Facturas.

Esta es la consulta que hice, muestra las Ordenes de Venta con o sin Entregas pero muestra información errónea de las Facturas relacionadas. Es decir, la consulta funciona hasta las Entregas, pero truena cuando quiero ver información de las Facturas.

SELECT
DISTINCT(T0.DocNum) as 'Numero de Pedido',
T0.DocDate as 'Fecha de Pedido',

Case
When T0.DocStatus = 'O' and T0.Canceled = 'N' Then 'Abierto'
When T0.DocStatus = 'C' and T0.Canceled = 'N' Then 'Cerrado'
When T0.DocStatus = 'C' and T0.Canceled = 'Y' Then 'Cancelado'
else
''
end as 'Estatus de Pedido',

(T0.Doctotal-T0.vatsum) as 'Importe s/iva MXN OV',
T0.CardCode as 'Codigo Cliente',
T0.CardName as 'Nombre Cliente',
T3.DocNum as 'Numero de Entrega',
(T3.Doctotal-T3.vatsum) as 'Importe s/iva MXN ENT',
T5.DocNum as 'Numero de Factura',
T5.DocDate as 'Fecha de Factura'

FROM ORDR T0
INNER JOIN RDR1 T1 ON T0.DocEntry = T1.DocEntry
LEFT JOIN DLN1 T2 ON T1.DocEntry = T2.BaseEntry AND T1.LineNum = T2.BaseLine
LEFT JOIN ODLN T3 ON T2.DocEntry = T3.DocEntry
LEFT JOIN INV1 T4 ON T2.DocEntry = T4.BaseEntry AND T2.LineNum = T4.BaseLine OR T1.DocEntry = T4.BaseEntry AND T1.LineNum = T4.BaseLine
LEFT JOIN OINV T5 ON T4.DocEntry = T5.DocEntry

WHERE 
T1.TargetType<>14  AND 
T0.[DocDate] >='04-05-2022' AND  T0.[DocDate] <= '04-05-2022'

ORDER BY T0.DocNum

Espero me puedan dar ideas de como resolverlo.

Saludos.

Hola,

En qué sistema estás haciendo el query? Las tablas que están consultando de qué sistema son?

Hola @aarevalo tu consulta esta bien y devuelve los datos correctamente.

Quizás en la fecha que estás evaluando no tienes ningún pedido que no tenga documentos vinculados.

¿Por cierto, podrías pasar por la sección de presentaciones y hacer una?

@cmayka LAS TABLAS QUE ESTAN USANDO SON TABLAS NATIVAS DE SAP, SALUDOS!!!

Hola,

Es en SQL y las tablas son nativas de SAP.

¡Saludos!

¡Hola!

Una disculpa, minutos después de subir la publicación me di cuenta del error de mi query, el cual ocasionaba que no arrojara información de las Facturas, pero ya lo corregí. Y después modifique la publicación con el query correcto.

Ahora solo detecto algunas inconsistencias en la consulta. Por ejemplo, hay Ordenes de Venta que se repiten, pero no deberían por que solo tienen una Entrega y una Factura. Si tuvieran mas de una Entrega se entendería que apareciera mas de un Pedido…

Mapa de relaciones:

Saludos.

Te puede estar apareciendo OVs repetidas si es que el documento tiene más de 1 partida, y cada partida pueda estar relacionado a más de 1 Entrega y/o más de 1 factura. Otra posible causa puede ser el “OR” que tienes en el LEFT JOIN de INV1.

Además, cuando quieras unir estas tablas, añade también el OBjType = BaseType…

Aquí te comparto el query un poco más afinado. Prúebalo y nos cuentas cómo te fue.

SELECT
	DISTINCT(T0.DocNum) as 'Numero de Pedido',
	T0.DocDate as 'Fecha de Pedido',
	Case
		When T0.DocStatus = 'O' and T0.Canceled = 'N' Then 'Abierto'
		When T0.DocStatus = 'C' and T0.Canceled = 'N' Then 'Cerrado'
		When T0.DocStatus = 'C' and T0.Canceled = 'Y' Then 'Cancelado'
		else
		''
		end as 'Estatus de Pedido',
	(T0.Doctotal-T0.vatsum) as 'Importe s/iva MXN OV',
	T0.CardCode as 'Codigo Cliente',
	T0.CardName as 'Nombre Cliente',
	T3.DocNum as 'Numero de Entrega',
	(T3.Doctotal-T3.vatsum) as 'Importe s/iva MXN ENT',
	T5.DocNum as 'Numero de Factura',
	T5.DocDate as 'Fecha de Factura'
FROM ORDR T0
	INNER JOIN RDR1 T1 ON T0.DocEntry = T1.DocEntry
	LEFT JOIN DLN1 T2 ON T1.DocEntry = T2.BaseEntry
		AND T1.LineNum = T2.BaseLine
		AND T1.ObjType = T2.BaseType
	LEFT JOIN ODLN T3 ON T2.DocEntry = T3.DocEntry
	LEFT JOIN INV1 T4 ON (T2.DocEntry = T4.BaseEntry AND T2.LineNum = T4.BaseLine AND T2.ObjType = T4.BaseType)
		OR
		(T1.DocEntry = T4.BaseEntry AND T1.LineNum = T4.BaseLine AND T1.ObjType = T4.BaseType)
	LEFT JOIN OINV T5 ON T4.DocEntry = T5.DocEntry
WHERE 1 = 1
	and T1.TargetType<>14
	AND T0.[DocDate] >='04-05-2022' AND T0.[DocDate] <= '04-05-2022'
ORDER BY T0.DocNum

Saludos,

JC.

2 Me gusta

Buen día,

Las correcciones que hiciste ayudaron a resolver varias inconsistencias en el query.

Muchas gracias, me ayudaste bastante.

Saludos.

Solo te falta pasar por la sección de presentaciones y deleitarnos con la tuya.

1 me gusta