PDA

Ver la Versión Completa : Truncar números a la hora de sumarlo con TQRExpr


martinartaza
19-01-2011, 14:39:15
Hola que tal, le comento estoy usando Delphi 6, con QReport y completando reportes, todos estos reportes le falta totalizar al final.
Después de evaluar cual seria el menor esfuerzo para modificar más de 50 reportes llegue a la conclusión, de agregar una banda Summary y poner por cada columna un TQExpr y usar la función Sum, el problema que tengo es que cuando veo un reporte y sumo a mano, no me da igual a lo que me arroja el TQExpr, esto se debe a que en los reportes se trunco las filas a la hora de mostrar los datos, entonces el TQExpr me suma con todos los decimales y me termina tirando distinto valor, que la suma de la hoja impresa.

Por ejemplo, tengo el siguiente dataset (qventas) y lo que muestra el reporte.
(los puntitos son espacio en blanco, es para mostrarlo ordenado)
Dataset. ............................................... Reporte

[Cliente] | [Cuenta] | [Neto] .......[Cliente] | [Cuenta] | [Neto]
1.......... | ... 101 .. | 20.56789 ....... 1 .... | ....101 .. | .. 20.56
1.......... | ... 102 .. | 20.00981 ....... 1 .... | ....102 .. | .. 20.00
2.......... | ... 201 .. | 20.00772 ....... 2 .... | ....201 .. | .. 20.00

Lo quiero que me aparezca al final del repote es --> Total = 60.56
Lo que me aparece ahora es = 20.58 porque 20.56789+ 20.00981 + 20.00772 me da un total de 20.58542 y al truncarlo me da 20.58, esa diferencia de 2 centavos se produce con un informe de 3 a 5 clientes, pero cuando tiro un listado de 5 hojas, la diferencia ya es demasiada significativa.

Para mostrar el total en el TQExpr estoy usando la siguiente formula.
QExpr1.Expression := SUM(q_Ventas.neto)
Lo que necesito seria algo como.
QExpr1.QExpresion := SUM(FORMATNUMERIC('0.##',q_Ventas.neto))
La expresion anterior, no me muestra nada, debe ser que está mal a pesar que al validarla me dice que no hay drama.

Bueno espero que hayan entendido y necesito hacerlo de esa manera para no perder tiempo modificando un serie de reporte en la cual cada programador que paso por acá lo creo a su manera, hay reportes con códigos, otros con echos con consulta ,en fin se perdería mucho tiempo usando otro método.

Desde ya muchas gracias.

Aleca
19-01-2011, 21:40:51
probala asi, por las dudas.

QExpr1.QExpresion := FORMATNUMERIC(',0.00',SUM(q_Ventas.neto))

si no este componente tiene una propiedad Mask que es la que debas utilizar.

martinartaza
21-01-2011, 16:36:46
Eh probado

QExpr1.QExpresion := FORMATNUMERIC(',0.00',SUM(q_Ventas.neto))

Y pasa lo mismo que con

QExpr1.QExpresion := SUM(FORMATNUMERIC('0.##',q_Ventas.neto))

En los 2 casos la validación me sale bien, pero no me muestra nada.

Tengo el pdf de la cara oculta de delphi, dice que se le puede ampliar las funciones que trae el TQExpr, voy a ver si haciendo algo de eso.
Cualquier avance lo comunicare por acá.

PD: Tengo la suerte que esto no es urgente, así que prefiero buscar una solución más elegante que laboriosa.

martinartaza
21-01-2011, 20:40:41
QExpr1.QExpresion := SUM(INT(q_Ventas.neto) + (INT(FRAC(q_Ventas.neto) * 100))/100)

A pesar que es "larga" la función, va a ser rápido el cambio masivo.
Pero porque le erro por un centavo, alguien tiene idea.


Edito

No siempre, la verdad es que me anda bastante bien, pero aveces le erro por un centavo.