En base a los múltiples mensajes donde piden una consulta que muestre todo el flujo desde un pedido hasta la factura les comparto el siguiente query.
SELECT distinct T0."CardCode", T0."CardName", T0."DocEntry" as EntrySolComp, T0."DocNum" as NumSolComp,T0."DocDate" as FechasolComp, T0."DocTotal" as TotSolCompmx, T0."DocTotalFC"as TotSolcompusd, T1."BaseType" as baseSolComp, T0."CANCELED" as StatusSolComp, T1."TargetType" as SolCompdocDest, T1."TrgetEntry" as SolCompdocdest, T2."DocEntry" as EntryPedido, T5."DocNum" as NumPedido , T5."DocDate" as FechaEntreg, T5."CANCELED" as StatusEntreg, T5."DocTotal" as TotEntregmx, T5."DocTotalFC"as TotEntregusd,T4."DocEntry" as EntryFact, T4."DocNum" as NumFact, T4."DocDate" as FechaFact, T4."CANCELED" as StatusFact,T4."DocTotal" as TotFactmx, T4."DocTotalFC"as TotFactusd
FROM OPRQ T0
INNER JOIN PRQ1 T1 ON T0."DocEntry" = T1."DocEntry"
LEFT JOIN POR1 T2 ON T2."DocEntry" = T1."TrgetEntry"
LEFT JOIN PDN1 T3 ON T3."DocEntry" = T2."TrgetEntry"
LEFT JOIN OPDN T4 ON T3."DocEntry" = T4."DocEntry"
LEFT JOIN OPOR T5 ON T2."DocEntry" = T5."DocEntry"
ORDER BY T0."DocNum"
Si requieren mas información solo adecúenlo a sus necesidades, esto esta en HANA.
No es con intención de atacar y me disculpo de antemano pero si fuera así de sencillo no lo buscarían y/o pedirían por todos lados, el ejemplo que das sirve para un caso ideal, con el simple hecho de que en una orden compra con una sola linea reciba 2 entradas parciales ya no va a mostrar todo.
Otra cosa, si tus mapas de relaciones son como arañas que se combinan o dividen los documentos, esa forma de relacionar multiplica las líneas y el distinct no lo arregla.
Una forma de solucionar lo anterior es:
OPOR T0
INNER JOIN POR1 T1 ON T0.DocEntry = T1.DocEntry
LEFT JOIN (OPDN T2
INNER JOIN PDN1 T3 ON T2.DocEntry = T3.DocEntry
) ON T3.BaseType = T0.ObjType AND T3.BaseEntry = T0.DocEntry AND T3.BaseLine = T1.LineNum
BaseType porque una entrada puede venir de una factura de reserva o de una orden de compra (los mas comunes), y el ObjType es el que dicta de que registro de SAP de trata. BaseEntry Lo puedes considerar el campo llave al que apunta BaseLine Apunta a la Linea Origen
En todas las tablas (de documentos) existen los 3 campos base y los 3 campos target, pero los documentos de SAP pueden tener solo un origen (por eso es mejor utilizar los campos base) pero múltiples destinos (campos target que solo guardan el mas reciente).
En pocas palabras, el conjunto de ObjType, DocEntry y LineNum son la llave del cada uno de los documentos de SAP (encabezado y lineas) y la combinación de BaseType, BaseEntry y BaseLine es el ForeignKey apuntando al origen
A todo esto le debes sumar el proceso de la empresa, por ejemplo en mi caso para llegar a la orden de compra, dependiendo de que producto se compra puedes tomar 3 caminos (Validaciones de transaction):
Solicitud => Orden Compra
Solicitud=> Cotización => Orden Compra
Orden Compra
Y ya ni hablamos de llegar al fin del flujo de compra, entonces ahí debes ingeniártela para contemplar TODOS los casos, desde una posible solicitud hasta una posible Factura, Nota de Crédito o Devolución