02 enero 2009

Creación de informes con QuickReport (I)

Aunque en los tiempos que estamos disponemos de gran cantidad de generadores de informes para Delphi (Rave Reports, Report Maganer, FastReport, etc.) hay que reconocer que QuickReport es el que tiene mayor predilección por parte de los usuarios debido a que venía incorporado de serie el las primeras versiones de Delphi.

Luego Borland-Inprise-CodeGear se deshizo de él a partir de Delphi 7 (no se porque) e incorporó Rave Reports, donde este último destacaba por tener su propio editor, por tener una documentación cutre e inexistente así como por dar Access Violations si lo mirabas mal.

Pero la empresa QBS Software siguió ampliando estos componentes hasta incluso las últimas versiones de Delphi 2009.

Los componentes QuickReport son comerciales estando actualmente en la versión 5.0 (podemos descargar una versión trial para probarlos). Para la serie de artículos que voy a escribir es suficiente con tener la versión 4.xx que está disponible desde para las versiones de Delphi 5, 6 y 7.

Para escribir este artículo me he basado en la versión 4.07 de QuickReport para Delphi 2007 instalándolo en RAD Studio 2007.

INSTALANDO LOS COMPONENTES QUICKREPORT

Aunque las instalaciones suelen variar en aspecto de una versión a otra, la forma de instalarlas suele ser la misma:

1º Descargamos el archivo de la instalación en un exe o archivo zip y al ejecutarla se instalará en un subdirectorio según la ruta donde tengamos instalado Delphi o RAD Studio:


2º Cuando finalice la instalación abrimos nuestra versión de Delphi habitual y abrimos los archivos con extensión DPK para instalarlos:


3º Una vez instalados los componentes deben aparecer en la paleta de herramientas:


CREANDO UN NUEVO PROYECTO

Al crear un nuevo proyecto debemos configurar en las opciones de nuestro proyecto la ruta donde se encuentran los componentes QuickReport. En Delphi 2007 se haría seleccionando Project -> Options y en el apartado Directories/Conditionals introducimos la ruta donde se han instalado los componentes, por ejemplo:


De este modo ya no dará problemas al compilar.

CREANDO LA BASE DE DATOS PARA IMPRIMIR EL INFORME

A modo de ejemplo vamos a crear una tabla de memoria utilizando los componentes de la clase TClientDataSet para crear una base de datos de clientes para luego imprimir su formulario en QuickReport.

De la pestaña Data Access extraemos el componente ClientDataSet y los insertamos en el formulario con el nombre Clientes:


En la propiedad FieldDefs de este componente vamos a definir los siguientes campos:


Para convertirlo en una tabla de memoria pinchamos el componente con el botón derecho del ratón y seleccionamos Create Dataset:


También voy a añadir un botón cuyo evento sea añadir un registro a la tabla:

procedure TForm1.BIntroducirDatosClick(Sender: TObject);
begin
Clientes.Append;
Clientes['ID'] := 1;
Clientes['NOMBRE'] := 'PABLO AGUILAR RUIZ';
Clientes['CIF'] := '11222333Z';
Clientes['DIRECCION'] := 'PLAZA ESPAÑA, 8';
Clientes['POBLACION'] := 'MADRID';
Clientes['CP'] := '28547';
Clientes['PROVINCIA'] := 'MADRID';
Clientes['SALDOINICIAL'] := 4200.28;
Clientes['FECHAALTA'] := '12/05/2008';
Clientes['ACTIVO'] := False;
Clientes.Post;
end;

Ahora pasemos a imprimir un informe con estos datos.

CREANDO EL INFORME

Un informe creado en QuickReport va vinculado directamente a un formulario de Delphi por lo que obligatoriamente debemos utilizar como mínimo un formulario por cada informe. También tiene sus ventajas y es que aprovecha las nuevas características del editor de formularios de los nuevos Delphi.

Creamos un nuevo formulario que vamos a llamar FCliente y dentro del mismo añadimos el componente TQuickRept:


Hay que ampliar bien el formulario ya que nos inserta el equivalente a un folio A4 donde vamos a diseñar nuestro informe. Encima de este componente es donde debemos añadir sólo componentes de la pestaña QuickReport (no vale meter por ejemplo un componente TLabel, si lo deja pero no imprimirá nada).

Lo siguiente que tenemos que hacer es insertar una banda la cual va a contener los datos que queremos imprimir. Esto se hace añadiendo el componente de la clase TQRBand dentro del informe:


La banda que hemos insertado es de tipo Title, es decir, sólo se va a imprimir una sola vez independientemente del número de registros tenga nuestra tabla. Esto puede verse en el inspector de objetos (cuando tenemos la banda seleccionada) con su propiedad BandType:


Como vamos a imprimir la ficha de un cliente podemos dejarla como esta y empezar a meter componentes. Comenzamos añadiendo etiquetas para los nombres de los campos utilizando el componente TQRLabel:


Para poder añadir los campos de la base de datos de clientes debemos añadir a este formulario la unidad donde se halla la tabla que queremos imprimir (en mi ejemplo Form1):

uses Unit1;

Ahora pinchamos sobre cualquier borde del objeto TQuickRep y en el inspector de objetos le ponemos el su propiedad DataSet la tabla que queremos imprimir:


Una vez hecho esto ya podemos introducir campos de base de datos para traernos la información. Una de las ventajas de las que goza QuickReport es que podemos vincular directamente el informe a una tabla de datos sin tener que utilizar el objeto DataSource de la pestaña DataAccess.

Para introducir los campos vamos a utilizar el componente TQRDBText:


Sólo hay que procurar que cada campo tenga las propiedades DataSet (Form1.Clientes) y DataSource (el nombre del campo) rellenas.

EJECUTANDO LA VISTA PREVIA DEL INFORME

Desde nuestro formulario principal (Form1) voy a crear un botón para abrir la vista previa del informe que hemos hecho. Antes de esto tengo que vincular la unidad UClientes.pas a nuestro formulario para poder llamarlo.

Para programar de una manera más clara voy a llamar al objeto TQuickRep con el nombre Informe. Así se llama a la vista previa:

procedure TForm1.BInformeClientesClick(Sender: TObject);
begin
FCliente.Informe.Preview;
end;

Con algo tan simple como esto ya tenemos el informe en pantalla:


En principio nos aparece la vista previa del informe en una ventana pequeña en el centro de la pantalla. En la parte izquierda de la ventana nos aparecen dos pestañas:

Thumbails: contiene la vista previa cada folio que se imprime (al estilo PowerPoint).

Search Result: permite hacer búsquedas de texto en las hojas impresas.

Si nos interesa que se vea sólo el informe a pantalla completa entonces seleccionamos el objeto TQuickRep llamado Informe y en su propiedad PreviewInitialState seleccionamos wsMaximized.

Para quitar las pestañas Thumbails y Search result hay que deshabilitar las opciones PrevShowThumbs y PrevShowSearch. Y por último vamos a ampliar la visualización del folio (el Zoom) seleccionando en su propiedad PrevInitialZoom el valor qrZoomToWith. Este sería el resultado:


También sería conveniente darle un título al informe sobre todo porque si lo mandamos a imprimir aparecerá sin título en la cola de impresión. Para ello escribimos en su propiedad ReportTitle por ejemplo Datos del cliente. Puede verse al abrir la vista previa:


Esta barra superior contiene los típicos botones para modificar el zoom, avanzar o retroceder por las páginas, modificar las propiedades de la impresión o imprimir directamente. QuickReport también permite guardar el informe generado en un archivo con extensión QRP para poder abrirlo posteriormente y reimprimirlo.

No hay que confundir esto con una plantilla de informe ya que lo que guardamos el todo el informe (incluyendo los datos). Esto puede ser útil para guardar copias de factura, recibos, etc. cuando los datos ya no existen en nuestra base de datos y necesitamos reimprimirlos por pérdida del documento original. También nos evita volver a procesar listados lentos (informe de estadísticas de enero, febrero, etc.). Con procesarlo una vez sobra.

Esta sería la parte básica de generación de informes aunque veremos en artículos posteriores que QuickReport es mucho más potente que esto.

Pruebas realizadas en RAD Studio 2007.

Publicidad