Query flujo Facturacion Proveedores

Buenas Tardes.

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.

Saludos.

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):

  1. Solicitud => Orden Compra
  2. Solicitud=> Cotización => Orden Compra
  3. 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

1 me gusta

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