![]() |
Otra vez fallos de redondeos.
Hola grupo. Tengo FB 3.0 y dialect 3.
Hago una consulta para sacar la suma por bases imponibles, la cuota y el total de una factura a partir de los detalles que la componen:
Y este es el resultado: Código:
CODIGO PORC_IVA BASE CUOTA_1 CUOTA_2 TOTAL_FACTURA He buscado por el foro pero no he encontrado una solución a esto, y creo que no debe ser el único que lucha con los redondeos. El problema es que me genera gran cantidad de descuadres en contabilización y totalizaciones. ¿Una ayudita? |
A ver si esto te ayuda:
https://docwiki.embarcadero.com/RADS...nding_Routines Hay otros redondeos en Delphi. Si buscas en los foros también encontrarás hilos antiguos donde hemos hablado de esto. |
Gracias Neftali.
Todas las operaciones en delphi están controladas. Los rendondeos los hace correctamente. El problema lo tengo en una vista de firebird, (CREATE VIEW) en SQL. La vista saca totalizada las bases, descuentos, cuotas de iva, cuotas de recargo y el total de la linea. Necesito que la vista saque correctamente el redondeo. Cuando hay un importe con #.#5 y le aplico un 10% de descuento, o un 10% de IVA, el redondeo lo hace como quiere, probad esto:
Devuelve 17.45. No puedo usar las librerías de delphi en SQL. (bajo programa los redondeos están controlados, uso math.simpleRoundTo, o la funcion MyRound que copie de "Casimiro" ). El problema lo tengo en las consultas estadísticas y ahora en contabilidad, que no me coincide la base + iva con el total. Antes tenía grabada la cuota de iva calculada por delphi.... un campo por cada base, porc_iva, cuota, porc_rec y recargo: con 3 tipos de IVA tenía 15 campos... lo quité cuando empezaron con el 5%, 2%, 7.5%.... demasiados campos inútiles a la larga.... ahora sólo tengo base_imponible y total_Factura. Cuando necesito el desglose de IVA lo saco de una VIEW.... EMPEZARON LOS PROBLEMAS. El total de la vista no coincide con el total factura. |
Prueba así a ver:
Código:
CAST(SUM(PVP * UNIDADES) AS NUMERIC(9, 2)) AS BASE, |
Sería necesario saber exactamente qué datos tienes en ese campo, porque no me cuadra que no redondee correctamente, jamás tuve ese problema.
|
Prueba esto....
Saludos |
Cita:
Esto es algo que hay considerar: * No asumas que tipo de datos es un literal ('174.55') sin leer la documentación * Hacer a ciegas ` AS NUMERIC(9, 2)` hace un `cast` que cuando es de `alto a bajo` es un `corte`. Osea es malo. No es redondear! * Cuando tienes datos que se trabajan en multiples lenguajes/bd asegurare que *realmente* estan verdaderamente alineados. que son tipos realmente *equivalentes* en vez de ser *similares*. Fíjate en los docs que tengan los mismo exactos rangos. Por ultimo, yo considero que siempre tienes que tener una UNICA fuente de LA VERDAD. O haces redondeos siempre en Firebird, o siempre en Delphi. En mi caso, yo guardo todo los datos calculados en la bd (ie: Los cálculos los hago siempre en Rust, en vez de en Postgres), ya que hay reglas dinámicas para determinar cuando se aplica o no los impuestos (antes o después de los descuentos por ejemplo), así que no puedo hacer cálculos simples en la bd:
Y nunca hago `ROUND` en la bd, porque eso es en mi opinion 'presentacional', ósea, es algo que se configura similar a cual idioma y cual símbolo de moneda se usa. Todo es exacto en la bd (nota como yo no pongo un corte de cuantos decimales aquí, que es un problema el día que tengas que manejar varios países. Japón por ejemplo no usa decimales!) y a la hora de `reportes` se toma esa decisión. |
Cita:
|
Cita:
Gracias a todos por vuestro interés. |
La franja horaria es GMT +2. Ahora son las 15:24:20. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi