Siguiendo con este tema. He realizado unas pruebas y he llegado a este código.
Código Delphi
[-] TipoPrecioUnit:=PuFinal;
PrecioUnitarioOriginal:=EdtPrecUnit.DoubleValue;
Cantidad:=EdtCant.DoubleValue;
FactorIVA1:=1+(IVA1/100);
FactorIVA2:=1+(IVA2/100);
FactorIVA3:=1+(IVA3/100);
FactorDescuento:=1+(Descuento/100);
FactorRecargo:=1+(Recargo/100);
if TipoPrecioUnit = PuFinal then
PrecioUnitarioCalculado:=PrecioUnitarioOriginal/FactorIVA1
else
PrecioUnitarioCalculado:=PrecioUnitarioOriginal;
if Descuento > 0 then
PrecioUnitarioCalculado:=PrecioUnitarioCalculado/FactorDescuento;
if Recargo > 0 then
PrecioUnitarioCalculado:=PrecioUnitarioCalculado*FactorRecargo;
SubTotal:=PrecioUnitarioCalculado*Cantidad;
if IVA1 > 0 then
TotalIVA1:=(SubTotal*FactorIVA1)-SubTotal
else TotalIVA1:=0;
if IVA2 > 0 then
TotalIVA2:=(SubTotal*FactorIVA2)-SubTotal
else TotalIVA2:=0;
if IVA3 > 0 then
TotalIVA3:=(SubTotal*FactorIVA3)-SubTotal
else TotalIVA3:=0;
TotalItem:=SubTotal+TotalIVA1+TotalIVA2+TotalIVA3;
Label1.Caption:='PrecioUnitarioCalculado: '+FloatToStr(PrecioUnitarioCalculado);
Label2.Caption:='SubTotal: '+FloatToStr(SubTotal);
Label3.Caption:='TotalIVA1: '+FloatToStr(TotalIVA1);
Label5.Caption:='TotalIVA2: '+FloatToStr(TotalIVA2);
Label6.Caption:='TotalIVA3: '+FloatToStr(TotalIVA3);
Label4.Caption:='TotalItem: '+FloatToStr(TotalItem);
TipoPrecioUnit es un tipo enumerado (PuFinal, PuBase) que me indica si el precio unitario es con o sin IVA incluido.
IVA1,
IVA2 e
IVA3 son las alicuotas de los diferentes IVAs que afectan la operación. Algo parecido ocurre con
Descuento y
Recargo.
De por qué siempre considero el IVA1 se debe a que ese IVA es el que siempre se cobra (excepto en un caso especial que en la práctica es igual a esto).
Me gustaría saber si la lógica del cálculo está bien.
Aún no sé cómo calcular los Impuestos Internos...
Gracias por su atención.