*<Define Variables>
LOCAL lnImporte,;
lnSum,;
lnSumaRedon,;
lnDifer,;
lnSuma_aPagar
lnImporte = 109.35
*</Define Variables>
*<Crea un escenario de simulación>
*<Generar Cursor>
CREATE CURSOR curRedond ("concepto" c(30), "importe" n(12,2))
*</Generar Cursor>
*<Agregar Valores de simulación>
FOR i = 1 TO 5
INSERT INTO curRedond (concepto,importe) ;
VALUES ("Concepto"+TRANSFORM(m.i), m.lnImporte)
NEXT
*</Agregar Valores de simulación>
*</Crea un escenario de simulación>
*<Calcula la suma del campo importe>
SELECT SUM(importe) FROM curRedond WHERE !DELETED() INTO ARRAY laSum
lnSum = IIF(_tally > 0,laSum[1,1],0)
*</Calcula la suma del campo importe>
*<Análisis de redondeos>
lnSumaRedon = ROUND(m.lnSum,0)
lnDifer = ROUND(m.lnSumaREdon - m.lnSum,2)
* Si la diferencia de redondeo es distinto de cero
* se agrega un registro al cursor
* para mostrar esa diferencia en el reporte.
IF !EMPTY(m.lndifer)
INSERT INTO curRedond (concepto,importe) ;
VALUES ("Redondeos",m.lnDifer)
ENDIF
*</Análisis de redondeos>
* En lugar de el código que sigue, acá debe ir la llamada al reporte.
* Esto es solo al efecto de controlar que el proceso sea correcto.
* Se vuelve a sumar el cursor, redondeo incluido, si es que se incluyó
SELECT SUM(importe) FROM curRedond WHERE !DELETED() INTO ARRAY laSum
lnSuma_aPagar = IIF(_tally > 0,laSum[1,1],0)
lcMessage = "Suma Original: "+TRANSFORM(m.lnsum,"999,999.99") + CHR(13);
+ "Suma Original Redondeada="+TRANSFORM(m.lnSumaRedon,"999,999.99") + CHR(13);
+ "Diferencia por Redondeo="+TRANSFORM(m.lnDifer,"999,999.99") + CHR(13);
+ "Suma final del Cursor=" +TRANSFORM(m.lnsuma_aPagar,"999,999.99")
MESSAGEBOX(m.lcMessage)
SELECT curRedond
GO top
BROWSE
USE IN curRedon