Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-03-2011
Efren2006 Efren2006 is offline
Miembro
 
Registrado: feb 2006
Posts: 172
Poder: 19
Efren2006 Va por buen camino
Problema con DisplayFormat

Tengo un Pequeño problema,

Yo tengo en mi projecto una rutina que le coloca automaticamente a todos los campos numericos su DisplayFormat segun se requiera, ahora el problemas es que tengo unos campos numericos que necesito que cuando el Valor sea CERO (0) no aparesca el Valor ni siquiera '0.00', pero SI tiene debe salir de la siguiente manera '#,##0.00', por mi desconocimiento en la parte de las mascaras de Delphi no he encontrado una mascara que pueda hacerlo... existe alguna ??

Saludos
Responder Con Cita
  #2  
Antiguo 22-03-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
lo estas mostrando en un reporte?

si es asi en el onPrint podrias escribir mas o menos esto

Código SQL [-]
 
if CampoQuery.Value = 0 then
    value := ''
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 22-03-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
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
Esta sería la cadena de formato que necesitas:

,0.00;;#

La ayuda de Delphi sobre la propiedad TNumericField.DisplayFormat dice esto:

Cita:
To allow different formats for positive, negative, and zero values, the format string can contain between one and three sections separated by semicolons.

One section: The format string applies to all values.

Two sections: The first section applies to positive values and zeros, and the second section applies to negative values.

Three sections: The first section applies to positive values, the second applies to negative values, and the third applies to zeros.

If the section for negative values or the section for zero values is empty, that is, if there is nothing between the semicolons that delimit the section, the section for positive values is used instead.
Cita:
A fin de permitir diferentes formatos para valores positivos, negativos y cero, la cadena de formato puede contener entre una y tres secciones separadas por punto y coma.

Una sección: La cadena de formato aplica a todos los valores.

Dos secciones: La primera sección aplica a valores positivos y ceros, y la segunda sección aplica a valores negativos.

Tres secciones: La primera sección aplica a valores positivos, la segunda sección aplica a valores negativos, y la tercera aplica a ceros.

Si la sección para valores negativos o la sección para valores ceros está vacía, es decir, si no hay nada entre los puntos y comas que delimitan la sección, en su lugar es utilizada la sección para valores positivos.
Saludos.

Al González.
Responder Con Cita
  #4  
Antiguo 22-03-2011
Efren2006 Efren2006 is offline
Miembro
 
Registrado: feb 2006
Posts: 172
Poder: 19
Efren2006 Va por buen camino
Gracias por su tiempo


Amigo Oscarac, no es en reporte que tengo el problema es a nivel del Formularios. de todas maneras muchisimas gracias por el dato.


Efectivamente Amigo AL Gonzalez esa es la solución ... Infinitas Gracias,

Un aporte mas a mi conocimientos de Delphi

Saludos a todos y gracias por sus aportes
Responder Con Cita
  #5  
Antiguo 30-03-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Cita:
Empezado por Al González Ver Mensaje
Esta sería la cadena de formato que necesitas:

,0.00;;#

La ayuda de Delphi sobre la propiedad TNumericField.DisplayFormat dice esto:
Aplica tambien para campos calculados?
estoy colocando este formato en un campo calculado.. pero me muestra 0.00
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #6  
Antiguo 30-03-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
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
Cita:
Empezado por oscarac Ver Mensaje
Aplica tambien para campos calculados?
estoy colocando este formato en un campo calculado.. pero me muestra 0.00
No veo por qué no habría de aplicar. ¿Qué valor tiene el campo?

Un saludo.

Al.
Responder Con Cita
  #7  
Antiguo 30-03-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
pues el campo tiene valor 0.0
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #8  
Antiguo 30-03-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
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
Cita:
Empezado por oscarac Ver Mensaje
pues el campo tiene valor 0.0
Ah, bueno, entonces aparentemente el campo tiene un valor de 0. Necesitaría más información para tratar de ayudarte.

Haz la prueba de compararlo contra cero (If Campo.Value = 0 Then); puede que tenga una pequeña fracción no perceptible cuando se aplica el formato de dos decimales.

¿De qué clase es el objeto campo (TCurrencyField, TFloatField,...) y qué componentes de acceso a datos estás utilizando?
Responder Con Cita
  #9  
Antiguo 30-03-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
respondiendo.....

aqui Uso Access - ADO, el campo es TFloatField y lo que esta mas abajo son las operaciones que hago en el OnCalcFields

Código Delphi [-]
 if qryBalanceComprobacionMensualDEBE.Value > qryBalanceComprobacionMensualHABER.Value then
    qryBalanceComprobacionMensualSD.Value := qryBalanceComprobacionMensualDEBE.Value - qryBalanceComprobacionMensualHABER.Value;
  if qryBalanceComprobacionMensualDEBE.Value < qryBalanceComprobacionMensualHABER.Value then
    qryBalanceComprobacionMensualSA.Value := qryBalanceComprobacionMensualHABER.Value - qryBalanceComprobacionMensualDEBE.Value;
  if Copy(qryBalanceComprobacionMensualcuenta.AsString,1,2) < '60' then
  Begin
    if qryBalanceComprobacionMensualDEBE.Value > qryBalanceComprobacionMensualHABER.Value then
      qryBalanceComprobacionMensualID.Value := qryBalanceComprobacionMensualDEBE.Value - qryBalanceComprobacionMensualHABER.Value;
    if qryBalanceComprobacionMensualDEBE.Value < qryBalanceComprobacionMensualHABER.Value then
      qryBalanceComprobacionMensualIA.Value := qryBalanceComprobacionMensualHABER.Value - qryBalanceComprobacionMensualDEBE.Value;
  End;
  if Copy(qryBalanceComprobacionMensualcuenta.AsString,1,2) >= '60' then
  Begin
    if qryBalanceComprobacionMensualDEBE.Value > qryBalanceComprobacionMensualHABER.Value then
      qryBalanceComprobacionMensualRD.Value := qryBalanceComprobacionMensualDEBE.Value - qryBalanceComprobacionMensualHABER.Value;
    if qryBalanceComprobacionMensualDEBE.Value < qryBalanceComprobacionMensualHABER.Value then
      qryBalanceComprobacionMensualRA.Value := qryBalanceComprobacionMensualHABER.Value - qryBalanceComprobacionMensualDEBE.Value;
  End;


los Campo SD, SA, ID, IA, RD, RA tienen en el Displayformat ,0.00;;#
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #10  
Antiguo 30-03-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
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
No sé si ya has verificado que el campo sea realmente 0 o algo como 0.0000000000021, poniendo un If de prueba como el que te comenté:
Cita:
Empezado por Al González Ver Mensaje
Haz la prueba de compararlo contra cero (If Campo.Value = 0 Then); puede que tenga una pequeña fracción no perceptible cuando se aplica el formato de dos decimales.
Ahora, al ver que utilizas TFloatField, casi no hay duda de que esa es la razón del problema.

Para valores monetarios usa mejor TCurrencyField, TFmtBCDField o TBCDField, ya que estos guardan el dato en formato de punto fijo (siempre la misma cantidad de decimales), a diferencia de la clase TFloatField que lo hace en formato de punto flotante (cantidad de decimales variable).

Saludos.

Al González.
Responder Con Cita
  #11  
Antiguo 30-03-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
ya coloque el campo en los formatos mecionados TCurrencyField, TFmtBCDField o TBCDField y sigue saliendo 0.00 a pesar que en el formatdispay coloco ,0.00;;#

q sera?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #12  
Antiguo 30-03-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
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
Cita:
Empezado por oscarac Ver Mensaje
ya coloque el campo en los formatos mecionados TCurrencyField, TFmtBCDField o TBCDField y sigue saliendo 0.00 a pesar que en el formatdispay coloco ,0.00;;#

q sera?
Como ya comenté antes, es posible que el valor del campo NO sea 0, tal como tú crees. Insisto en que deberías hacer una prueba como la siguiente para cerciorarnos:

Código Delphi [-]
If CampoCalculado.Value <> 0 Then
  ShowMessage (FloatToStr (CampoCalculado.Value));

Puedes usar para ello algún evento, como el OnClick de un botón.

Responder Con Cita
  #13  
Antiguo 30-03-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Cita:
Empezado por Al González Ver Mensaje
Como ya comenté antes, es posible que el valor del campo NO sea 0, tal como tú crees. Insisto en que deberías hacer una prueba como la siguiente para cerciorarnos:
Pues ya hice la Prueba y el valor es 0
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #14  
Antiguo 31-03-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
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
Que bueno que ahora sí la hiciste, gracias.

Ahora, por favor, a manera de prueba, reduce tu evento OnCalcFields a una sóla sentencia:
Código Delphi [-]
qryBalanceComprobacionMensualSD.Value := 0;
(o como se llame el campo que esté dando el problema)

¿Sigue presentándose la misma situación?

Y otra pregunta que quizá debí hacerte antes: ¿En qué tipo de objeto estás presentando el valor del campo? Hay componentes que priorizan su propio formato antes que el indicado por la propiedad DisplayFormat de los objetos campos. Tal vez esta sea la razón del problema.

Saludos atentos.

Al González.
Responder Con Cita
  #15  
Antiguo 31-03-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
estoy usando un TqrExpr...

y ya di con la solucion....
en Expression debi haber colocado asi desde un principio

FORMATNUMERIC(',0.00;;#',RA)

gracias por la paciencia Al González
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #16  
Antiguo 31-03-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
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
Me alegro por el feliz resultado, más paciencia has tenido tú.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
La propiedad DisplayFormat gcaffe Varios 1 25-12-2009 15:18:01
DisplayFormat de campo calculado hcalero Varios 1 10-05-2007 19:44:09
DisplayFormat en Builder c++ 5??? alt126 C++ Builder 1 20-04-2006 11:31:54
Comportamiento extraño de DisplayFormat Thales Conexión con bases de datos 0 02-12-2005 21:56:32
DisplayFormat en tiempo de ejecución? mguixot OOP 4 01-06-2004 11:38:19


La franja horaria es GMT +2. Ahora son las 01:53:51.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi