30 enero 2009

Creación de informes con QuickReport (y V)

En artículos anteriores vimos que mediante etiquetas podemos llevar al informe cualquier tipo de dato (fecha, hora, totales, etc.) generado por nuestro código fuente, pero hay funciones que lleva QuickReport que evitan tener que hacer muchas de estas cosas a mano.

Esto se hace utilizando campos del tipo TQRExpr y TQRSysData. Veamos los tipos de funciones.

FUNCIONES DE FECHA Y HORA

Las funciones de fecha y hora que tenemos con TQRExpr son TIME y DATE:


Estas funciones hay que introducirlas en la propiedad Expression.

Si utilizamos el campo TQRSysData podemos obtener la fecha y la hora también:


En este tipo de campos seleccionamos los valores predeterminados mediante su propiedad Data.

FUNCIONES MATEMATICAS

Tenemos estas cuatro funciones matemáticas:

INT( x ) -> Devuelve la parte entera de un número real x

FRAC( x ) -> Devuelve la parte fraccionaria de un número real x

SQRT( x ) -> Calcula la raíz cuadrada de x

DIV( x, y ) -> Realiza la división entera de x entre y.

Este sería un ejemplo al ejecutarlas:


FUNCIONES ESTADISTICAS

Las funciones estadísticas van aplicadas a campos del DataSet que estén dentro de una banda tipo detalle o subdetalle (la banda padre):

SUM( campo ) -> Calcula la suma de toda la columna del campo. Hace suma y sigue.

COUNT -> Cuenta el número de registros aparecidos.

MAX( campo ) -> Muestra el valor máximo del campo de entre todos los registros aparecidos.

MIN( campo) -> Muestra el valor mínimo.

AVERAGE( campo ) -> Calcula el valor medio del campo respecto a todos los registros aparecidos.

Este ejemplo lo he realizado en una banda de tipo Summary y debajo de una banda de tipo Detail:


Y este sería el resultado:


FUNCION PARA AVERIGUAR EL TIPO DE CAMPO

La función TYPEOF nos dice el tipo de campo que le pasamos como parámetro, aunque por las pruebas que he realizado no trabaja muy fino que digamos:


El tipo fecha me lo ha dado como STRING. De todas formas no le encuentro mucho sentido a esta función, ya que rara vez se trabaja con tipos Variant en los informes.

FUNCIONES LOGICAS

Podemos condicionar resultados mediante la función:

IF ( condición, valor si es verdadero, valor si es falso )

Por ejemplo:


Esta función evalúa el primer parámetro y si es verdadero entonces devuelve el segundo parámetro y en caso contrario el tercero.

OTRAS FUNCIONES

En el apartado Other del asistente de la propiedad Expression tenemos estas funciones:

STR( x ) -> Convierte un número entero o real a tipo cadena de texto (STRING).

UPPER( s ) -> Pasa el contenido de una cadena de texto a mayúsculas.

LOWER( s ) -> Convierte todo el texto a minúsculas.

PRETTY( s ) -> Pasa a mayúsculas la primera letra del texto (capitalización).

COPY( s, inicio, longitud ) -> Copia un trozo de cadena de texto que comience en la posición inicio y con una longitud predeterminada.

FORMATNUMERIC( formato, numeroreal ) -> Convierte un número entero o real a STRING con el formato que le pasemos como parámetro.

Veamos un ejemplo de todas estas funciones:


OTROS USOS DEL CAMPO TQRSYSDATA

Aparte de mostrar los valores de fecha y hora mediante la propiedad Data, el campo de la clase TQRSysData permite mostrar esta otra información:


Las propiedades qrsDetailCount y qrsDetailNo devuelven el número de registros encontrados (la verdad es que no se donde está la diferencia entre ambas). Luego tenemos qrsPageNumber que devuelve el número de página actual y qrsReportTitle que imprime el título del informe (TQuickRep.ReportTitle).

En el caso de que estas funciones sean insuficientes siempre podemos echar mano a una etiqueta TQRLabel enviando a su propiedad Caption el formato o información que nos interese en tiempo real con los eventos BefotePrint de las bandas.

INFORMES COMPUESTOS

Otra de las ventajas que incorpora QuickReport es la posibilidad de imprimir varios informes juntos (uno detrás de otro) como si fueran el mismo (divide y vencerás).

Para ello añado al formulario principal de la aplicación el componente TQRCompositeReport:


A este componente lo voy a llamar InformeCompuesto y voy a juntar en un solo informe los listados de facturas y de ventas:

Application.CreateForm( TFListadoFacturas, FListadoFacturas );
Application.CreateForm( TFListadoVentas, FListadoVentas );
InformeCompuesto.Preview;

En el evento OnAddReports de este componente añadimos todos los informes que queremos imprimir:

procedure TForm1.InformeCompuestoAddReports(Sender: TObject);
begin
InformeCompuesto.Reports.Add( FListadoFacturas.Informe );
InformeCompuesto.Reports.Add( FListadoVentas.Informe );
end;

De modo que al ejecutarlo mostraría este aspecto:


Esto es algo ideal cuando hay que volcar todos los informes en un archivo PDF.

INFORMES ABSTRACTOS

Un informe abstracto es un componentes de la clase TQuickAbstractRep que viene a ser el equivalente a TQuickRep. Este componente no va vinculado con bases de datos ni con campos. Los informes abstractos sólo son útiles para imprimir rápidamente información fija que podemos cargar de un archivo de texto.

Para poder utilizar este tipo de informes tenemos que añadir una banda de tipo TQRStringBand y dentro de esta última metemos expresiones TQRExpr. También permite añadir etiquetas TQRLabel o campos TQRSysData.

En resumen, los informes abstractos son una versión “light” de TQuickRep cuando necesitamos imprimir textos fijos rápidamente y sin complicaciones de bases de datos.

CONCLUSIONES

Con estos puntos finalizo la iniciación a la creación de Informes con QuickReport. Creo que con esto cubro más o menos las partes más importantes. Podía haber realizado cientos de ejemplos pero eso lleva un tiempo no tengo.

De todas formas, si alguien tiene alguna duda sobre como realizar un cierto tipo informe que lo escriba en el blog o me mande un correo y veré que puedo hacer. O si hay algún usuario avanzado que controle a tope QuickReport y se le ocurra algún ejemplo que me lo mande y lo publicaré encantado.

Pruebas realizadas en RAD Studio 2007.

Publicidad