jueves, 5 de julio de 2012

5-) Formato condicional en FastReport(Parte 2)

Formato condicional en FastReport(Parte 2)

Ahora bien, continuamos con los formatos condicionales, que tal, que se nos presenta un caso un poco mas complicado.
Nuestro cliente quiere ver los saldos en varios colores. y los quiere ver de esta manera:
Saldos de menores de 5000 en verde
Saldos que entre 5000 y 8000 en naranja
Saldos mayores de 8000 en rojo

Para que este mas claro miren la siguiente imagen


Para este ya tendremos que programar un poco, FastReport es un diseñador de reportes potente que nos permite implementar código en nuestro reportes y variar los resultados de nuestros reportes.

El paradigma de programación siempre es el orientado a objecto, usando propiedades y eventos.
Los script que soporta son los siguientes:
  1. PascalScript
  2. C++Script
  3. BasicScript
  4. JScript
En nuestro caso usaremos PascalScript y primero que conoceremos es saber donde podemos codificar.
Usaremos para nuestro propósito el evento AfterData del objecto "memo12" que es de la clase "TfrxMemoView". veamos la siguiente imagen para ubicarnos.



La fecha rojo indica donde esta el objecto que deseamos usar, le damos clic. Ahora fijemos la mirada en la fecha verde, esa flecha verde esta apuntando a una pestaña llamada "Events" en la ventana "Object Inspector". la pestaña "events" muestra los eventos del objecto seleccionado.
En nuestro caso usaremos el evento "OnAfterData" este evento se ejecuta después que el objecto a obtenido la data y esto sucede antes de imprimir dicha data.
Ahora observemos la fecha azul, esta apuntando la misma linea del evento "OnAfterData" pero un poco mas a la derecha, donde no hay texto, en ese punto de damos doble clic.


No mostrara el editor de código, la fecha roja indica las pestañas que nos sirven para poder ver de forma rápida el diseño del reporte o regresar rápidamente al código. La pestaña "Page1" nos regresa a donde estábamos y la pestaña "Code" a la que vemos en la imagen

Si observamos la fecha verde, "fastReport" nos creo el cuerpo del procedimiento que se ejecutara cuando ocurra el evento.



La fecha azul es el cuerpo principal, pero no lo usaremos esta vez.


Ahora agregaremos este codigo, basados en los que explicamos al principio.

       if value > 8000 then
       memo12.font.color:=clRed
       else if (value >= 5000) and  (value <= 8000) then
       memo12.font.color:=$000080FF          
       else if value < 5000 then
       memo12.font.color:=clGreen;
Tendríamos que verlo así:


Como pueden observar el codigo usa la expresion "value" para comparar el dato que obtuvo el objecto y lo compara con estos tres criterios

Saldos de menores de 5000 en verde
Saldos que entre 5000 y 8000 en naranja
Saldos mayores de 8000 en rojo
Observe que "Memo12" es el objecto que cambios el color de sus letras, Atraves del miembro "Font" y su propiedad "Color"

El color que usamos en el caso que comparamos entre 5000 y 8000, usamos el valor hexadecimal, este valor lo podemos encontrar usando el dialogo que usamos para ver los colores. 

Espero les sirva y espero siempre sus comentarios.
Descarga el contenido de esto blog. Texto y videos. http://adf.ly/1SLDQq

5 comentarios:

  1. Hola Marvin, me encanta haber dado con tu Blog sobre FastReport y es que me pregunto si me podrías ayudar ya que tengo un problema que me lleva de cabeza: ¿Cómo podría asignar a un label que tengo en un Form el texto que lleva una variable de un Reporte de FastReport? A ver si me explico, es como asignar valor a una variable de FastReport por código ¡¡ pero al revés !!
    ¿Me ayudarías? ¡¡ Gracias de antemano !!

    ResponderEliminar
    Respuestas
    1. Esto es lo entiendo, quieres ejecutar un reporte y capturar un valor del reporte para mostrarlo en tu formulario.
      Si quieres hacer esto no es necesario que uses un reporte, puedes hacer ese calculo desde la aplicación.

      Recuerda que los reportes son usados para salida o mostrar datos.

      Eliminar
  2. Que tal oye necesito de tu ayuda, mira tengo una aplicación en Delphi en la cual enlace una base de datos, ahora lo que quiero es imprimir los registros de la tabla que tengo.... pero no quiero que en el reporte se me muestren todos los registros de la tabla sino solamente el registro que el usuario elija. Por ejemplo que cuando el usuario decida que necesita la información de la persona x, en el reporte se muestre toda la información (tel, mail, direcion) pero solo de esa persona, es decir que se pueda imprimir cada registro de forma individual... no se si para esto sea necesario usar un reporte de lo contrario agradecería que me orientaras de como hacerlo. Por cierto estoy usando FastReport 4

    ResponderEliminar
    Respuestas
    1. Lo mejor es realizar tu consulta y usar otro objecto Dataset(AdoQuery,IBQuery) para usarlo con tu reporte.

      Eliminar
  3. Buenas marvin tengo una pregunta, a partir de consulta sql obtengo datos y entre estos datos tengo un campo llamado sexo, el cual segun la consulta puedo obter varios datos, ahora como puedo realizar el calculo de cuantos varones y cuantas mujeres tengo en el reporte

    ResponderEliminar