SELECT *
FROM OPOR T0
INNER JOIN POR1 T1 ON T0."DocEntry" = T1."DocEntry"
/*SI LA ORDEN DE COMPRA ESTA RELACIONADA A LA FACTURA*/
INNER JOIN OPCH T2 ON T1."TrgetEntry" = T2."DocEntry" AND T1."TargetType" = T2."ObjType"
INNER JOIN PCH1 T3 ON ON T2."DocEntry" = T3."DocEntry" --USO PCH1 PARA VER EL DETALLE DE CADA LINEA Y BUSCAR LAS POSIBLES NC
INNER JOIN ORPC T4 ON T3."TrgetEntry" = T4."DocEntry" AND T3."TargetType" = T4."ObjType"
/*SI LA ORDEN DE COMPRA ESTA RELACIONADA A LA FACTURA*/
INNER JOIN OPDN T4 ON T1."TrgetEntry" = T4."DocEntry" AND T1."TargetType" = T4."ObjType"
En mi Caso trabajamos Orden de Compra → Entrada Mercancía → Factura Proveedores → Nota de Crédito (si existiera)…
No es nada sencillo por la cantidad de flujos diferentes que se pueden tener, pero si se puede lograr. Lo único que te puedo sugerir es que relaciones con los campos Base y NO con los target, ya que una misma linea en los documentos solo puede tener un origen pero varios destinos y el campo target solo guarda el ultimo movimiento.
Puedes iniciar con algo como lo siguiente y poco a poco te darás cuenta de cuales flujos te hacen falta
SELECT
*
FROM
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
UNION
SELECT
*
FROM
OPOR T0
INNER JOIN POR1 T1 ON T0.DocEntry = T1.DocEntry
LEFT JOIN (OPCH T4
INNER JOIN PCH1 T5 ON T4.DocEntry = T5.DocEntry
) ON T5.BaseType = T0.ObjType AND T5.BaseEntry = T0.DocEntry AND T5.BaseLine = T1.LineNum
En lo anterior se muestra las ordenes de compra que obligatoriamente son Orden de compra->Factura y Orden de Compra->Entrada.
Las Notas de crédito son caso especial, si las relacionas de esta forma solo aparecen las que son copiar de y copiar a, las que son reconciliadas manualmente son un tema diferente
Entendido totalmente, y con este query como uniría las ordenes que no tienen ni factura ni entrada? Simplemente Ordenes Creadas abiertas.? Gracias de antemano.
Me parece en la parte de arriba del código se reemplaza OPDN T2 por OPCH T2
al igual que en el Inner Join, PDN1 T3 por PCH1 T3, me corriges si estoy equivocado. Ya es tanto arriba y abajo es la misma consulta.
Hola @Doom ten en cuenta que el vínculo entre documentos se hace a nivel de línea, de forma que un documento puede tener origen o destino en varios documentos.
Por el tiempo no sé si aún tengas abierta esta consulta. Yo hice algo similar y lo que te puedo compartir es que es algo laborioso querer ver en un solo Query las diferentes relaciones que un documento puede tener. La recomendación de @meqs tiene un potencial importante dependiendo cómo lo apliques.
En mi caso; en lugar de buscar destino, me enfoque en el origen. Primero: en lugar de solo una consulta de SQL haces varios comandos que van al Crystal. Segundo: Tomando las OPCH buscas su origen, es decir; de dónde se creó, de una OPDN o de una OPOR, incluso si se hizo directa. (Yo puse un PS para asegurar que todo tenga un documento origen), como adicional el campo PaidSum para saber si ya estaba aplicado algún pago. Te queda un informe muy completo, pero esa variedad de opciones te recomiendo que las limites para poder tener un mejor control del origen de los registros. Por ejemplo: ¿Qué tienes pensado con las OPCH que son reserva proveedor?