Ver Mensaje Individual
  #30  
Antiguo 02-12-2008
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Reputación: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
¡Hola!

Cita:
Empezado por IVAND Ver Mensaje
...voy a tener que migraar la base de datos firebird 1.5 de dialect 1 al 3...
Resulta curiosa la frescura con que comentas eso después de 16 meses.

Cita:
Empezado por IVAND Ver Mensaje
...Nota : El la mi aplicacion tambien hay muchos campos persistentes como han solucionado ese inconveniente
Hace muchos años que llevo conmigo el programa GReplace. Lo utilizo cada vez que me encuentro en la necesidad de hacer cambios masivos dentro de archivos .pas o .dfm. Podría serte de utilidad a ti también.

En cuanto al redondeo, podrías echar un vistazo a un tema que va relacionado: http://www.clubdelphi.com/foros/showthread.php?t=38102

Debido a lo ahí descubierto, por ahora no hago divisiones o multiplicaciones con números fraccionarios (o fraccionables) a nivel de base de datos que requieran un redondeo diferente al convencional (hacia el infinito). En esos casos hago el redondeo en Delphi, empleando la variable GHNumericRounding y la función ghRound de GH Freebrary (mi biblioteca de funciones) antes de enviar el dato al servidor.

Confieso que la manera en que trabaja esa función no es muy elegante, pero me ha resultado efectiva. Quizá después haga una versión más optimizada de la misma como para incorporarla en Firebird a manera de UDF, y con ello poder hacer las multiplicaciones y divisiones a nivel base de datos sin problemas de pérdida o ganancia inesperada de decimales y para convenciones contables de distintos países.

De hecho, el motivo para crear esta función (y la variable de configuración GHNumericRounding) hace ya varios años, fue el reclamo de una empresa que notaba como el importe total de ciertas facturas generadas por una de mis aplicaciones difería de aquel que venía en las órdenes de compra de sus clientes. Estaba utilizando el tipo de redondeo predeterminado de Delphi (imparcial o mejor conocido como Del Banquero), cuando la empresa quería que usara el de aproximación a cero, por algún supuesto reglamento fiscal (si alguien pudiera confirmarme lo que conoce al respecto en las normas mexicanas, se lo agradecería ).

Algunos se preguntarán por qué no me apoyé en funciones nativas como Set8087CW, SetRoundMode y RoundTo. En primer lugar porque todavía no existían éstas, y posteriormente por este desconcierto: http://www.clubdelphi.com/foros/show...573#post170573

Saludos.

Al González.

Última edición por Al González fecha: 02-12-2008 a las 05:53:05.
Responder Con Cita