Tablas ORDR ODLN OINV

Buenas tardes a la comunidad,

Tengo un problema en relacion a las tablas de ORDR,RDR1,ODLN,DLN1,OINV,INV1

Quiero generar un Query que me muestre la siquiente Informacion:

Todas las notas de ventas que estan amarrada a las facturas pero que no tienen entregas (Pedido->Factura) , adicional a eso quiero que me muestre los pedidos que estan relacionados con las entregas y las facturas(Pedido->Entrega->Facturas)

El query que genere solo me muetra Pedido->Facturas pero no las que viene Pedido->Entrega->Facturas

la forma que lo tengo

FROM INV1 A1
LEFT JOIN OINV A2 ON A2.DocEntry = A1.DocEntry
LEFT JOIN RDR1 A3 ON A3.DocEntry = A1.BaseEntry AND A3.LineNum = A1.BaseLine
LEFT JOIN ORDR A4 ON A4.DocEntry = A3.DocEntry
LEFT JOIN OCRD A6 ON A6.CardCode=A2.Cardcode

Este segundo query me muestra Pedido->Entrega->Factura , pero cuando se realiza Pedido->FActura no me la muestra

Select ‘Orden de Venta’[Tipo Documento], T0.DocNum,T0.DocDate, T0.CardName, T1.ItemCode, T1.Dscription,T1.Quantity as cantidad,
‘Entrega de Venta’[Tipo Doumento Destino], T3.DocNum, T3.CardName, T2.ItemCode, T2.Dscription,T2.Quantity as cantidad,
‘Facturas de venta’[Tipo Doumento Destino], T5.DocNum, T5.CardName, T4.ItemCode, T4.Dscription,T4.Quantity as cantidad
From ORDR T0 Inner join – Encabezado de Orden de venta
RDR1 T1 on T0.DocEntry = T1.DocEntry Inner Join --Detalle de Orden de venta
DLN1 T2 on T1.DocEntry = T2.BaseEntry and T1.LineNum = T2.BaseLine inner join --Detalle Entrega de venta
ODLN T3 on T2.DocEntry = T3.DocEntry inner join – Encabezado Entrega de venta
INV1 T4 on T2.DocEntry = T4.BaseEntry and T2.LineNum = T4.BaseLine and T2.ItemCode = T4.ItemCode inner join --Detalle de la Factura de venta
OINV T5 on T4.DocEntry = T5.DocEntry

Existe una persona que me ayudara a entender ??

@Jorge_Hernand en la INV1 el campo que hace referencia al documento base es el campo BaseType, por ejemplo cuando el documento base es una entrega basetype = ‘15’ sino posee documento base es basetype = ‘-1’ , Como en tu query estas trayendo todo con el inner join y basado en que el docentry es igual, te esta dejando afueras a todos los documentos que no cumplen esa función, por eso mejor hacer un union all y agregas todas las facturas que tienen basetype = ‘16’ que serian las ordenes de ventas.

Saludos

1 me gusta

@Patricio_Guti no te entiendo , como quedaria la Union.

@Jorge_Hernand pega aquí la query completa… a ver si puedo ajustar según lo que te indique.

Saludos

@Patricio_Guti , en esta consulta solo me muestra Pedido-entrega-factura, pero no las ordenes de ventas que estan amarrada a factura , adicional que el mismo pedido se le genero entrega->Facturas

Select ‘Orden de Venta’[Tipo Documento], T0.DocNum, T0.CardName, T1.ItemCode, T1.Dscription,
‘Entrega de Venta’[Tipo Doumento Destino], T3.DocNum, T3.CardName, T2.ItemCode, T2.Dscription,T2.Quantity,
‘Facturas de venta’[Tipo Doumento Destino], T5.DocNum, T5.CardName, T4.ItemCode, T4.Dscription
From ORDR T0 Inner join – Encabezado de Orden de venta
RDR1 T1 on T0.DocEntry = T1.DocEntry Inner Join --Detalle de Orden de venta
DLN1 T2 on T1.DocEntry = T2.BaseEntry and T1.LineNum = T2.BaseLine inner join --Detalle Entrega de venta
ODLN T3 on T2.DocEntry = T3.DocEntry inner join – Encabezado Entrega de venta
INV1 T4 on T2.DocEntry = T4.BaseEntry and T2.LineNum = T4.BaseLine and T2.ItemCode = T4.ItemCode inner join --Detalle de la Factura de venta
OINV T5 on T4.DocEntry = T5.DocEntry
Where T0.DocNum = ‘12’ – Este filtro lo puedes cambiar por fechas o el campo que necesites filtrar[Quantity]

@Patricio_Guti

Posiblemente estoy haciendo una mala relacion pero el proposito es tener ordenes de ventas-> Entregas->Facturas . asi como ordenes y Facturas

Un ejemplo claro es que yo puedo ver que en el mismo pedido puedo ver la trasabilidad de hacer pedido-entrega-facturas de ese mismo pedido->Facturas yo lo pueda ver en la consulta y no tengas que sacarlo separado es decir dos query

Yo en mi base no tengo ordenes de ventas que pasen directo a factura asi que no puedo probar… fijate si te salen los documentos directo con estas modificaciones.

Select distinct 
case T0.ObjType when '17' then 'Orden de Venta' end as [Tipo Documento], 
T0.DocNum,
T1.LineNum,
T0.DocDate, 
T0.CardName, 
T1.ItemCode, 
T1.Dscription,
T1.Quantity as cantidad,
case T1.TargetType	when '15' then 'Entrega de Venta'
					when '13' then 'Facturas de ventas' 
					when '-1' then 'Sin Destino'end as [Tipo Doumento Destino], 
case T1.TargetType	when '15' then  T3.DocNum
					when '13' then T5.DocNum end as 'Numero Doc. Destino', 
case T1.TargetType	when '15' then T3.CardName
					when '13' then T5.CardName end as 'Nombre SN',
case T1.targetType	when '15' then T2.ItemCode 
					when '13' then T4.itemcode
					when '-1' then null end as 'Numero Codigo',
case T1.targetType	when '15' then T2.Dscription 
					when '13' then T4.Dscription
					when '-1' then null end as 'Descripcion',
case T1.targetType	when '15' then T2.Quantity
					when '13' then T4.Quantity
					when '-1' then null end as 'Cantidad'
 
--T2.Dscription,
--T2.Quantity as cantidad,
--T4.ItemCode, 
--T4.Dscription,
--T4.Quantity as cantidad

From ORDR T0 Inner join --– Encabezado de Orden de venta
RDR1 T1 on T0.DocEntry = T1.DocEntry left Join --Detalle de Orden de venta
DLN1 T2 on T1.DocEntry = T2.BaseEntry and T1.LineNum = T2.BaseLine left join-- and T1.LineNum = T2.BaseLine inner join --Detalle Entrega de venta
ODLN T3 on T2.DocEntry = T3.DocEntry left join --– Encabezado Entrega de venta
INV1 T4 on T2.DocEntry = T4.BaseEntry and T2.LineNum = T4.BaseLine and T2.ItemCode = T4.ItemCode left join -- and T2.LineNum = T4.BaseLine and T2.ItemCode = T4.ItemCode inner join --Detalle de la Factura de venta
OINV T5 on T4.DocEntry = T5.DocEntry

@Patricio_Guti , el detalle esta cuando es un pedido-factura , solo me muestra el campo de la factura pero los demas campo numero doc destino, articulos,cantidad no se refleja

@Jorge_Hernand ok entiendo ahora ajuste la consulta, prueba con esta.

Saludos

Select distinct 
case T0.ObjType when '17' then 'Orden de Venta' end as [Tipo Documento], 
T0.DocNum,
T1.LineNum,
T0.DocDate, 
T0.CardName, 
T1.ItemCode, 
T1.Dscription,
T1.Quantity as cantidad,
case T1.TargetType	when '15' then 'Entrega de Venta'
					when '13' then 'Facturas de ventas' 
					when '-1' then 'Sin Destino'end as [Tipo Doumento Destino], 
case T1.TargetType	when '15' then  T3.DocNum
					when '13' then T7.DocNum end as 'Numero Doc. Destino Pedido', 
case T1.TargetType	when '15' then T3.CardName
					when '13' then T7.CardName end as 'Nombre SN',
case T1.targetType	when '15' then T2.ItemCode 
					when '13' then T6.itemcode
					when '-1' then null end as 'Numero Codigo',
case T1.targetType	when '15' then T2.Dscription 
					when '13' then T6.Dscription
					when '-1' then null end as 'Descripcion',
case T1.targetType	when '15' then T2.Quantity
					when '13' then T6.Quantity
					when '-1' then null end as 'Cantidad',
case T2.TargetType	when '-1' then  null
					when '13' then T5.DocNum end as 'Numero Doc. Destino Entrega', 
case T2.TargetType	when '13' then T5.CardName
					when '-1' then null end as 'Nombre SN',
case T2.targetType	when '13' then T4.itemcode
					when '-1' then null end as 'Numero Codigo',
case T2.targetType	when '13' then T4.Dscription
					when '-1' then null end as 'Descripcion',
case T2.targetType	when '13' then T4.Quantity
					when '-1' then null end as 'Cantidad'
 
--T2.Dscription,
--T2.Quantity as cantidad,
--T4.ItemCode, 
--T4.Dscription,
--T4.Quantity as cantidad

From ORDR T0 Inner join --– Encabezado de Orden de venta
RDR1 T1 on T0.DocEntry = T1.DocEntry left Join --Detalle de Orden de venta
DLN1 T2 on T1.DocEntry = T2.BaseEntry and T1.LineNum = T2.BaseLine left join-- and T1.LineNum = T2.BaseLine inner join --Detalle Entrega de venta
ODLN T3 on T2.DocEntry = T3.DocEntry left join --– Encabezado Entrega de venta
INV1 T4 on T2.DocEntry = T4.BaseEntry and T2.LineNum = T4.BaseLine and T2.ItemCode = T4.ItemCode left join -- and T2.LineNum = T4.BaseLine and T2.ItemCode = T4.ItemCode inner join --Detalle de la Factura de venta
OINV T5 on T4.DocEntry = T5.DocEntry left join
INV1 T6 on T6.BaseEntry = T1.DocEntry left join
OINV T7 on T7.DocEntry = T6.DocEntry

@Patricio_Guti ,

Sale mucha informacion y en la factura solo son 3 lineas

Y cuantos documentos asociados tiene la factura?

recuerda que la relación es a nivel de línea, si en la factura asociaste mas de una OV o entregas esas se verán en la query por separado.

Pero ahí estaría la base modifica lo necesario o vuelve al principio copia tu query y hace un union all entre cada uno y la de abajo le restringe que solo te traiga las OV que tengan
una factura como destino RDR1.TargetType = ‘13’

Solo estoy usando un Where=Docnum’13’ que es el numero de mi nota de venta

por eso debes dentro de la misma query generar otra y unirlas… ya que en tu primera query cuando la orden de venta pasa directo a factura, no existe la relación factura - Entrega que en tu query la tienes aquí.

DLN1 T2 on T1.DocEntry = T2.BaseEntry and T1.LineNum = T2.BaseLine inner join --Detalle Entrega de venta
ODLN T3 on T2.DocEntry = T3.DocEntry inner join – Encabezado Entrega de venta
INV1 T4 on T2.DocEntry = T4.BaseEntry and T2.LineNum = T4.BaseLine and T2.ItemCode

INV1 T4 cuando no hay una entrega asociada no se relaciona con la DLN1 que es la entrega…

Por eso intenta crear una consulta que solo te traiga las OV que tiene relación directa con la Factura… mantén la misma cantidad de campos y luego cuando lo tengas. Tomas tu query inicial al final le ingresas un union all y agregas la query de las OV que solo tienen Facturas y listo.

Saludos

Tal como dice Patricio, haz un UNION ALL
… es simple seria algo tal que asi:

TuPrimeraSQL
Union all
TuSegundaSQL

Importante es que te asegures que la parte Select de ambas query tengan la misma estructura de campos a obtener

1 me gusta

Sin profundizar mucho en el tema… creo que tienes que tener 2 consultas, una para las que van directas a facturas y otra para las que pasan por entregas.

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