Tratamiento de retenciones en B1

Yo hice este pequeño código con tablas pivote que te pueda servir, revísalo, si en algo te puede servir
(No lo seguí usando porque había un dato que me jalaba operaciones muy viejas, por un numero de operación o Numero de transacción o algo así y no quise molestar a los de sistemas :sweat_smile:

Te das cuenta cuando la factura es muy antigua

SELECT 
P.[Codigo],
P.[Nombre],
P.[RFC],
P.[Documento],
P.[FechaFact],
P.[FechaPago],
P.[TotalDocto],
P.[Pagado],
Round((Pagado/TotalDocto),4) as Porcentaje,
ROUND(Max-IVATotal,2) as Importe,
round(ROUND(Max-IVATotal,2)*Round((Pagado/TotalDocto),8),2) as ImportePagado,
round(P.[IVATotal]*Round((Pagado/TotalDocto),8),2) as [IVAAcr],
round(P.[Base Retenciones]*Round((Pagado/TotalDocto),8),2)as[BaseRet],
round([1I]*Round((Pagado/TotalDocto),8),2) as [ISRRetHono],
round([1V]*Round((Pagado/TotalDocto),8),2) as [IVARetHono],
round([2I]*Round((Pagado/TotalDocto),8),2) as [ISRRetArre],
round([2V]*Round((Pagado/TotalDocto),8),2) as [IVARetArre],
round([FV]*Round((Pagado/TotalDocto),8),2) as [IVARetFletes],
round([5V]*Round((Pagado/TotalDocto),8),2) as [RetCedular]

FROM(
SELECT 

T2.[DocNum]'Documento', 
T0.[DocDate]'FechaPago', 
T2.[DocDate]'FechaFact',
T2.[CardCode]'Codigo', 
T2.[CardName]'Nombre', 
T2.[BaseAmnt]'Base Retenciones', 
T2.[VatSum] AS 'IVATotal', 
T2.[Max1099] as 'Max',
T2.[DocTotal]'TotalDocto', 
T1.[SumApplied]'Pagado',
T3.[WTCode]'Ret', 
T3.[WTAmnt]'Monto', 
T4.[LicTradNum]'RFC'

FROM OVPM T0  
INNER JOIN VPM2 T1 ON T0.[DocNum] = T1.[DocNum] 
INNER JOIN OPCH T2 ON T1.[DocEntry] = T2.[DocEntry] 
left JOIN PCH5 T3 ON T2.[DocEntry] = T3.[AbsEntry] 
LEFT JOIN OCRD T4 ON T4.[CardCode] = T2.[CardCode]

WHERE 
T0.[DocDate] >= [%0] AND T0.[DocDate] <= [%1] 
 and t0.Canceled = 'N' ) P

PIVOT (
   SUM(Monto) 
         FOR [Ret] IN ([1V],[1I],[2V],[2I],[5V],[FV])
                  
)P

order by FechaPago, Codigo
2 Me gusta