Ver Mensaje Individual
  #15  
Antiguo 24-04-2012
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 Marcelo.

No he tenido tiempo de ver a detalle el problema (hoy se me fue la mitad del día buscando una casa de empeños que aceptara relojes Relic).

En su momento, para salir del paso, redefiní el método GetAsVariant en una clase interpuesta:

Código Delphi [-]
Function TFmtBCDField.GetAsVariant :Variant;
Begin
  { NOTA: Esta redefinición resuelve defecto presentado en Delphi 7 y
    otras versiones anteriores a la 2007, relacionado con la división y
    multiplicación de variantes BCD con valores Currency
    (http://www.clubdelphi.com/foros/showthread.php?t=78225). }

  Result := Inherited GetAsVariant;

  { Evitamos que el valor devuelto sea variante de tipo BCD,
    sustituyéndolo por un variante de tipo Currency }
  If Not VarIsNull (Result) Then
    Result := System.Currency (Result);
End;

Eso me basta para el proyecto en cuestión, dado que todos los campos FmtBCD que utilizo son para cantidades monetarias. En otros casos, quizá podría añadirse a ese mismo If una verificación de la propiedad Currency (de tipo Boolean y que solamente tiene impacto en el formato de despliegue).

De todas formas, tengo los fuentes de Delphi 7 y 2007, así que sólo es cosa de encontrar un hueco de tiempo (un hueco sin preocupaciones "primitivas") para echar una mirada en las funciones involucradas y encontrar la diferencia, es decir, esa corrección que evidentemente trae Delphi al menos desde la versión 2007.

¿Los demás han podido adelantarse a ver algo de esto?

Saludos.
Responder Con Cita