Primero toma en cuenta que tienes 2 tipos de reconciliaciones:
-
las automáticas que están relacionadas a un documento, grlte un pago, esto lo identificas por el campo “IsSystem” de la OITR, si es “Y” es automático. En estos casos podrias sacar el pago desde los campos “SrcObjAbs” = 24 (Pagos recibidos), y con el campo “InitObjAbs” tienes el Identificador del Pago. Claro que si el Pago conecta un anticipo, este ya no aparecería en tu reporte.
-
en el caso de los manuales es mas complejo, por que puedes seleccionar 2 o mas pagos, y conectar a 2 o mas facturas, con lo que no tienes manera de identificar a que pago especificamente corresponde el monto conciliado, ahi solo te quedaria referenciar o el ID de la reconciliacion, o hacer una concatenacion de los pagos o anticipos.
La otra opciones ver que hace SAP cuando sacas las transacciones aplicadas a una factura.
Ahi te aparecen 2 querys, uno para la linea cabecera de la factura con el totalizador de importes:
SELECT T0.[TransType], T0.[BaseRef], T0.[TransId], T0.[Line_ID], MIN(T2.[ReconType]), MIN(T2.[ReconRule1]),
MIN(T2.[ReconRule2]), MIN(T2.[ReconRule3]), T0.[RefDate], T0.[DueDate], MAX(T2.[ReconDate]),
T0.[BatchNum], T0.[CreatedBy], T0.[Ref1], T0.[Ref2], T0.[Ref3Line], T0.[ContraAct], T0.[LineMemo],
SUM(T1.[CashDisSum]), T0.[Debit], T0.[Credit], T0.[BalDueDeb], T0.[BalDueCred],
SUM(T1.[ReconSum]), T0.[SYSCred], T0.[SYSDeb], T0.[BalScDeb], T0.[BalScCred],
SUM(T1.[ReconSumSC]), T0.[FCDebit], T0.[FCCredit], T0.[BalFcDeb], T0.[BalFcCred],
SUM(T1.[ReconSumFC]), MAX(T2.[ReconNum]), T0.[ShortName], T0.[Account], T0.[FCCurrency],
T2.[ReconCurr], COUNT(T2.[ReconNum]), T1.[IsCredit], MAX(T2.[OldMatNum])
FROM [dbo].[JDT1] T0
LEFT OUTER JOIN [dbo].[ITR1] T1 ON T0.[Line_ID] = T1.[TransRowId] AND T0.[TransId] = T1.[TransId]
LEFT OUTER JOIN [dbo].[OITR] T2 ON T1.[ReconNum] = T2.[ReconNum]
WHERE (T0.[TransId] = (@TransID_Asiento_de_la_factura) ) AND T0.[ShortName] <> T0.[Account]
GROUP BY T0.[TransType], T0.[BaseRef], T0.[TransId], T0.[Line_ID], T0.[RefDate], T0.[DueDate],
T0.[BatchNum], T0.[CreatedBy], T0.[Ref1], T0.[Ref2], T0.[Ref3Line], T0.[ContraAct],
T0.[LineMemo], T0.[Debit], T0.[Credit], T0.[BalDueDeb], T0.[BalDueCred], T0.[SYSCred],
T0.[SYSDeb], T0.[BalScDeb], T0.[BalScCred], T0.[FCDebit], T0.[FCCredit], T0.[BalFcDeb],
T0.[BalFcCred], T0.[ShortName], T0.[Account], T0.[FCCurrency], T2.[ReconCurr], T1.[IsCredit]
ORDER BY T0.[TransId],T0.[Line_ID]
Y el otro query que te da el detalle de las transacciones aplicadas:
SELECT T1.[TransType], T1.[BaseRef], T1.[TransId], T1.[Line_ID], T2.[ReconType],
T2.[ReconRule1], T2.[ReconRule2], T2.[ReconRule3], T1.[RefDate], T1.[DueDate],
T2.[ReconDate], T1.[BatchNum], T1.[CreatedBy], T1.[Ref1], T1.[Ref2], T1.[Ref3Line],
T1.[ContraAct], T1.[LineMemo], T0.[CashDisSum], T1.[Debit], T1.[Credit], T1.[BalDueDeb],
T1.[BalDueCred], T0.[ReconSum], T1.[SYSCred], T1.[SYSDeb], T1.[BalScDeb], T1.[BalScCred],
T0.[ReconSumSC], T1.[FCDebit], T1.[FCCredit], T1.[BalFcDeb], T1.[BalFcCred], T0.[ReconSumFC],
T2.[ReconNum], T1.[ShortName], T1.[Account], T1.[FCCurrency], T2.[ReconCurr], T2.[ReconNum],
T0.[IsCredit], T2.[OldMatNum], T3.[ReportID], T3.[ActStatus]
FROM [dbo].[ITR1] T0
INNER JOIN [dbo].[JDT1] T1 ON T0.[TransRowId] = T1.[Line_ID] AND T0.[TransId] = T1.[TransId]
INNER JOIN [dbo].[OITR] T2 ON T0.[ReconNum] = T2.[ReconNum]
LEFT OUTER JOIN [dbo].[ECM2] T3 ON T2.[ReconNum] = T3.[SrcObjAbs] AND T3.[SrcObjType] = 321
WHERE EXISTS (
SELECT U0.[ReconNum]
FROM [dbo].[ITR1] U0
WHERE U0.[TransId] = (@TransID_Asiento_de_la_factura) AND U0.[TransRowId] = (0) AND T2.[ReconNum] = U0.[ReconNum]
)
AND (T1.[TransId] <> (@TransID_Asiento_de_la_factura) OR T1.[Line_ID] <> (0) )
ORDER BY T2.[CreateDate]
Son algo complicado estos querys, pero por ahí va el tema.