0% encontró este documento útil (0 votos)
39 vistas27 páginas

Tutorial ReportManager

Este documento describe el editor de informes Report Manager, un editor gratuito para crear informes en Delphi. Explica cómo instalar el editor y los componentes, y muestra un ejemplo de cómo crear un informe simple que lista datos de una tabla y cómo cargar el informe desde un proyecto de Delphi.

Cargado por

Juan Casillas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
39 vistas27 páginas

Tutorial ReportManager

Este documento describe el editor de informes Report Manager, un editor gratuito para crear informes en Delphi. Explica cómo instalar el editor y los componentes, y muestra un ejemplo de cómo crear un informe simple que lista datos de una tabla y cómo cargar el informe desde un proyecto de Delphi.

Cargado por

Juan Casillas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

El editor de informes Report Manager (1)

Pese a que no es un generador de informes muy conocido en el mundo Delphi, este editor de informes 
destaca por su sencillez (está en español) y que sobre todo es gratuito.

Si en algo aventaja a QuickReport es en que permite generar los informes en archivos con extensión REP 
para luego ser cargados desde Delphi e incluso podemos modificarlos en tiempo de ejecución. Tampoco da 
las explosiones que ocasiona el editor Rave cuando te equivocas, aunque hay que reconocer que es un 
poco raro en algunas cosas.

DESCARGANDO EL EDITOR

Puede descargarse de esta página web:

[Link]

Dentro del apartado Descarga nos llevará a otra página de SourceForge donde se encuentra la versión 2.9a

Lo que ocurre es que solo nos bajamos el editor y también necesitamos los componentes. Para ello 
pulsamos en la misma página web el botón View all files y descargamos este archivo 
repporman_delphi_builder_2_9.zip:
INSTALANDO EL EDITOR

La ventana de instalación permite elegir el idioma español y solo hay que ir pulsando el botón Siguiente:

INSTALANDO LOS COMPONENTES

Creamos una carpeta llamada ReportManager dentro de la carpeta:

\CodeGear\RAD Studio\5.0\Componentes\

Y descomprimimos dentro de la misma el archivo que hemos descargado:

Repporman_delphi_builder_2_9.zip

Nos vamos a Delphi y abrimos el archivo [Link]:

Veremos estos paquetes en la parte derecha de Delphi:
Pulsamos el paquete rppack_del2007.bpl con el botón derecho del ratón y seleccionamos Install:

Con solo hacer esto se instalará todo. Si todo ha ido correctamente veremos esto en la paleta de 
componentes:

Pasemos a ver el entorno de trabajo de este editor.
EL ASPECTO DEL EDITOR

Al ejecutar por primera vez el editor de informes vemos que aparece completamente pelado:

Pulsamos el botón Nuevo y mostrará este aspecto:

Lo mejor de todo es que se encuentra en nuestro idioma. Dentro del editor podemos distinguir estas partes:

Barra de herramientas superior

Contiene las típicas opciones de abrir o guardar archivos, mostrar la vista previa, etc. Y abajo tenemos los 
iconos para insertar componentes: etiquetas, campos vinculados a tablas, formas geométricas, dibujos y 
códigos de barras. Ya iremos viendo detenidamente cada uno de ellos según los necesitemos.

Estructura del informe
Aquí vemos las bandas de las que se compone el informe. Si seleccionamos por ejemplo el Detalle 
mostrará abajo el inspector de objetos con sus propiedades. A su lado tenemos la pestaña Datos donde 
veremos las variables globales que podemos utilizar:

La zona de trabajo

Aquí es donde iremos colocando componentes para crear el informe. No os dejéis engañar por la simpleza 
de este editor, ya que como veremos más adelante se pueden crear informes avanzados por programación 
interceptando en tiempo real los componentes al igual que hacemos con QuickReport.

CREANDO UN INFORME

Para probar que todo ha ido bien, vamos a crear un pequeño informe a partir de una base de datos de 
Interbase que contiene una tabla de CONTACTOS. Lo primero que tenemos que hacer es establecer la 
fuente de donde van a venir los datos. La vinculación con el origen de datos es otra característica algo rara 
que confunde por sus múltiples pantallas.

Seleccionamos en el menú superior las opciones Informe ­ Configuración de datos:
Y aparecerá esta ventana:

Seleccionamos Interbase Express que equivale realmente a una conexión DBExpress al pulsar el botón 
Configurar:

Aquí trae como ejemplo la configuración a una base de datos Interbase cuya conexión DBExpress está 
configurada dentro de Delphi 7, pero lo que vamos a hacer es crear una nueva conexión pulsando este 
botón:
En el nombre de la conexión le ponemos AGENDA:

Entonces volverá a la pantalla anterior y configuramos donde se encuentra la base de datos:

No hay que olvidar poner la propiedad SQL Dialect a 3. Probamos la conexión pulsando el botón:

A continuación nos pedirá identificarnos:
Y si todo ha ido bien nos dirá esto:

Volvemos a la primera pantalla y seleccionamos la conexión que hemos creado:

Lo añadirá a la lista de conexiones disponibles:

Ahora nos vamos a la pestaña Conjunto de datos del informe para elegir las tablas de la que queremos 
sacar la información:
Pulsamos el botón Nuevo conjunto de datos y lo llamamos CONTACTOS:

La ventana cambiará a esta otra:

Escribimos la sentencia SQL de los datos que nos vamos a traer:

Pulsamos Aceptar y al volver al editor veremos en la pestaña Datos la tabla que hemos vinculado:
Para no perder la configuración guardamos el informe con Archivo – Guardar como – [Link]. 
Como lo que quiero diseñar es un listado, tenemos el problema de que solo tenemos la banda de detalle. 
Para insertar la banda de la cabecera seleccionamos Informe – Añadir – Cabecera de página. Ya tenemos 
las dos bandas:

Vamos a pulsar este icono para añadir una etiqueta al informe:

Una vez tenemos la etiqueta seleccionada nos vamos a la izquierda al inspector de objetos y en la 
propiedad texto escribimos LISTADO DE CONTACTOS:

Una de las cosas raras que hace este editor es que al insertar una etiqueta le da un anchura y altura muy 
pequeña. Tenemos que estirarla siempre. Así creamos el resto de etiquetas:
Para copiar etiquetas no podemos utilizar la combinación de teclas CTRL + C y CTRL + V, hay que hacerlo 
con ALT + C y ALT + V. Esta es también una característica algo rara.

Ahora insertamos los campos arrastrándolos desde la pestaña de datos a la banda del detalle:

Así quedaría después de insertarlos:

Pulsamos el botón de vista previa para ver el informe:

Aquí encontramos el primer inconveniente:

Para que se listen todos los registros tenemos que vincular la tabla CONTACTOS al informe. Para ello nos 
vamos a la pestaña Estructura y en la propiedad Con. D. Principal seleccionamos CONTACTOS:
Ahora si sale bien:

En el próximo artículo veremos como cargar este informe desde nuestro proyecto de Delphi así como 
exportarlo a PDF y otros formatos. También veremos otros formatos más avanzados como una factura.
El editor de informes Report Manager (2)
Continuando con este discreto diseñador de informes, vamos a ver como abrir el informe desde nuestro 
proyecto en Delphi, haciendo que muestre la vista previa o exportándolo a otros formatos como PDF, TXT o 
HTML. También veremos como crear una factura que recoge datos de varias tablas.

ABRIENDO EL INFORME DESDE DELPHI

Continuando con el listado de contactos que creamos en el artículo anterior, vamos a crear un nuevo 
proyecto en Delphi con este formulario:

Para poder realizar las pruebas necesitamos añadir los 
componentes VCLReport y PDFReport que se encuentran en el apartado Reportman de la paleta de 
componentes.

Al pulsar el botón Imprimir podemos realizar una vista previa si está activado el checkbox o bien lanzarlo 
directamente a la impresora:
procedure [Link](Sender: TObject);
begin
[Link] := 'Listado de contactos';
[Link] := ExtractFilePath([Link]) +
'[Link]';
[Link] := [Link];
[Link];
end;

Se asume que la ruta del informe [Link] se encuentra en la misma carpeta que el ejecutable. Si no 
es así, modificar la propiedad Filename como corresponda (lo mejor es configuralo en un archivo INI).

Para exportar el documento a PDF podemos hacerlo de dos formas. O bien utilizamos el componente 
PDFReport (recomendado):
procedure [Link](Sender: TObject);
begin
// Método 1
[Link] := 'Listado de contactos';
[Link] := ExtractFilePath([Link]) +
'[Link]';
[Link] := ExtractFilePath([Link]) +
'[Link]';
[Link];
[Link](PChar('Listado exportado correctamente:' +
#13 + #13 + [Link]), 'Exportando', MB_ICONINFORMATION);
end;
O bien el componente VCLReport:
procedure [Link](Sender: TObject);
begin
// Método 2
[Link] := 'Listado de contactos';
[Link] := ExtractFilePath([Link]) +
'[Link]';
[Link](ExtractFilePath([Link]) +
'[Link]');
[Link](PChar('Listado exportado correctamente:' +
#13 + #13 + ExtractFilePath([Link]) + '[Link]'),
'Exportando', MB_ICONINFORMATION);
end;

Si el autor ha creado el componente PDFReport sus razones tendrá. También podemos exportarlo a una 
página web HTML de este modo:
procedure [Link](Sender: TObject);
begin
[Link] := 'Listado de contactos';
[Link] := ExtractFilePath([Link]) +
'[Link]';
[Link](ExtractFilePath([Link]) +
'[Link]');
[Link](PChar('Listado exportado correctamente.' +
#13 + #13 + ExtractFilePath([Link]) +
'[Link]'), 'Exportando', MB_ICONINFORMATION);
end;

La exportación que hace es bastante decente:

Aunque EurekaLog me ha detectado un 
fallo en un procedimiento de Report Manager que no libera memoria:
Por lo visto no libera el objeto pdfdriver. 
¿Habrá que hacer algo más?

Exportar el archivo a texto es algo similar:
procedure [Link](Sender: TObject);
begin
[Link] := 'Listado de contactos';
[Link] := ExtractFilePath([Link]) +
'[Link]';
[Link](ExtractFilePath([Link]) +
'[Link]');
[Link](PChar('Listado exportado correctamente.' +
#13 + #13 + ExtractFilePath([Link]) +
'[Link]'), 'Exportando', MB_ICONINFORMATION);
end;

Hay que reconocer que aquí no puede hacer maravillas:

También le ocurre que no libera este 
objeto:

Aun así, ambas exportaciones funcionan 
bastante bien. Vamos con algo más difícil.
CREANDO EL INFORME DE UNA FACTURA

Supongamos que tenemos una base de datos de Interbase llamada facturació[Link] que tiene la tabla de 
CLIENTES (clic para ampliar):

También tenemos la tabla de 
ARTICULOS:

Y para la cabecera de la factura esta la 
tabla FACTURAS:

Y luego esta la tabla DETALLE para su 
contenido:

Nos vamos al editor Report Manager, 
creamos un nuevo informe y lo guardamos con el nombre [Link]. Como solo tenemos la banda de 
detalle, tenemos que seleccionar Informe – Añadir – Cabecera de página e Informe – Añadir – Pie de 
página.

Vamos a comenzar por la cabecera. En la parte izquierda de la misma vamos metiendo etiquetas (Insertar 
texto estático) para poner los datos de nuestra empresa:

Para poder escribir el texto en una etiqueta tenemos que rellenar la propiedad Texto del inspector de 
objetos:

Y para seleccionar el tamaño de la fuente y el estilo (negrita, cursiva, 
subrayado) utilizamos las propiedades que se encuentran en la pestaña Texto:
Al final te acostumbras, pero no hubiese venido mal una barra de estilos de 
fuente al estilo Microsoft. Ahora vamos a insertar el logotipo de la empresa utilizando el botón:

Es conveniente que el logotipo se encuentre la misma carpeta que el archivo [Link]. Para insertar 
el logotipo le damos a ese botón y abrimos un rectángulo en el informe:

Teniendo la imagen seleccionada, nos vamos al inspector 
de objetos y hacemos clic sobre la propiedad Imagen:

Elegimos la imagen y luego la ajustamos un poco:
CONFIGURANDO EL ORIGEN DE DATOS

Ahora vamos a comenzar a enlazar datos de tablas. Lo que necesitamos es seleccionar la base de datos y 
crear las consultas de cabecera y detalle de la factura.

Los pasos para traernos la información son los siguientes:

1. Seleccionamos Informe – Configuración de datos.
2. Seleccionamos Interbase Express.
3. Pulsamos el botón Configurar.
4. Ahora pulsamos el botón Añade una conexión…
5. Nombre de la conexión: FACTURACION.
6. Configuramos la base de datos como hicimos en el artículo anterior:

7. Pulsamos el botón Activar la conexión 
seleccionada y comprobamos si conecta correctamente.
8. Una vez establecida la conexión, cerramos esta ventana y añadimos la conexión recien creada en la 
ventana donde estamos:
9. Nos vamos a la pestaña Configuración de 
datos del informe y pulsamos el botón Nuevo conjunto de datos.
10. Nombre del alias: FACTURAS.
11. Le ponemos de SQL:
SELECT FACTURAS.*,[Link] AS NOMBRE, [Link] AS DIRECCION,
[Link] AS POBLACION, [Link] AS PROVINCIA,
[Link],[Link] FROM FACTURAS
LEFT JOIN CLIENTES ON [Link]=[Link]
WHERE ID=1

Si pulsamos el botón Mostrar datos nos mostrará la primera factura (solo para ver que la SQL es correcta):

Después de terminar las pruebas hay 
que quitarle la condición WHERE.

12. Igualmente vamos a añadir la tabla DETALLE:
SELECT DETALLE.*,[Link],
[Link] FROM DETALLE
LEFT JOIN ARTICULOS ON [Link]=[Link]

Las tablas de clientes y de artículos no necesitamos traerlas ya que las hemos vinculado con LEFT JOIN a 
las consultas de FACTURAS y DETALLE.

13. Pulsamos el botón Aceptar y ya podemos volver al informe para añadir campos.
MOSTRANDO LOS DATOS DEL CLIENTE

Para enmarcar los datos del cliente añadimos un dibujo simple con el botón:

Lo colocamos más o menos así:

Ahora vamos a traernos el nombre del 
cliente arrastrando el campo NOMBRE desde la pestaña Datos:

Así nos traemos el resto de datos:

Si en cualquier momento os equivocáis de campo 
o componente y queréis eliminarlo, hay que seleccionar el campo y pulsar CTRL + SUPR.

Utilizando una etiqueta y un campo, vamos a poner debajo del logo el nº de factura y las cabeceras del 
detalle:

Os recuerdo que para copiar campos 
hay que utilizar la combinación de teclas ALT + C y ALT + V.

CREANDO EL DETALLE Y EL PIE DE LA FACTURA

El detalle de la factura ya tiene todos sus campos en la tabla DETALLE porque hemos vinculado con LEFT 
JOIN el número y nombre del artículo que nos hacía falta:

Para que aparezcan todas las líneas de 
detalle debemos vincular todo el informe a la tabla de detalle. Esto se hacía seleccionando la tabla 
DETALLE al informe:
El pie es todavía más sencillo. Solo hay que traerse la base imponible, el 
importe del IVA y el total de la factura:

Antes de terminar, necesitamos filtrar el detalle para que no salga el detalle de todas las facturas, sólo debe 
salir el detalle de la factura que estamos imprimiendo. Para ello seleccionamos la banda del detalle y en su 
propiedad Condic. Impresión escribimos:

[Link]=[Link]

Si mostramos la vista previa de la factura debe salir esto:

Pero como todos sabemos, siempre nos 
obligan a añadir cosas raras en la factura como imágenes en tiempo real, mostrar datos de campos que no 
existen o colorear la fuente según ciertas condiciones. Eso lo veremos en el siguiente artículo.
Pruebas realizadas en RAD Studio 2007.
18 junio 2010
El editor de informes Report Manager (3)
Continuando con la factura del artículo anterior, vamos a darle formato a los números reales y a modificar su 
comportamiento en tiempo real desde Delphi. También veremos como enviar parámetros SQL desde Delphi 
al informe.

AJUSTAR LOS DECIMALES

Antes de cargar el informe en nuestro proyecto de Delphi vamos a tratar de adecentarlo un poco 
comenzando por el detalle del documento. Lo primero que apreciamos es que el número de decimales sale 
como le da la gana:

Para dar formato a dos decimales seleccionamos los 
campos PRECIO, PORIVA, IVA y TOTALLINEA y en su propiedad Formato le ponemos ###,##0.00:

Ahora si sale como nosotros queremos:

Lo mismo tenemos que hacer con los totales del 
documento.

MODIFICAR EL INFORME EN TIEMPO REAL

Una de las cosas que siempre me ha gustado de QuickReport es tener la posibilidad de modificar en tiempo 
real los componentes del informe justo antes de enviarlo a la impresora.

Vamos a verlo con un nuevo proyecto en Delphi con el formulario que va a imprimir la factura:
Al igual que el ejemplo de los contactos tenemos el 
componente VCLReport que configuramos al pulsar el botón Imprimir:
procedure [Link](Sender: TObject);
begin
[Link] := 'Factura';
[Link] := ExtractFilePath([Link]) +
'[Link]';
[Link] := StrToInt([Link]);
[Link] := [Link];
[Link];
end;

También controlamos el número de copias de que se imprimen según lo que tenemos puesto en el campo 
NumCopias. Una modificación que le vamos a hacer es que imprima en rojo y en negrita aquellos precios 
superiores a 1.000. Esto lo hacemos en el evento BeforePrint (antes de imprimir) del componente 
VCLReport:
procedure [Link](Sender: TObject);
var
i: Integer;
begin
with [Link] do
begin
if FindComponent('TRpExpression9') is TRpExpression then
begin
if (FindComponent('TRpExpression9') as TRpExpression).[Link]
>
1000 then
begin
(FindComponent('TRpExpression9') as TRpExpression).FontColor := clRed;
(FindComponent('TRpExpression9') as TRpExpression).FontStyle := 1;
end;
end;
end;
end;

Para poder acceder a la clase TRpExpression debemos añadir la unidad rplabelitem al formulario donde 
vamos a imprimir. El nombre que busco (TRpExpression9) nos lo dice el mismo editor:

Lo que hacemos es interceptarlo justo 
antes de imprimirlo y según el valor que va a imprimir tomamos la acción que queramos:
Los componentes de Report Manager tienen la 
propiedad Visible pero aunque la activemos no hacen ni caso. Así que si quieres hacer desaparecer un 
componente elige el color blanco:
(FindComponent('TRpExpression9') as TRpExpression).FontColor := clWhite;

Esto puede ser muy interesante para mostrar u ocultar ciertas etiquetas según las propiedades de la factura. 
Por ejemplo, según la forma de pago a lo mejor me interesa mostrar la etiqueta de que se ha pagado al 
contado:

Como antes de imprimir la factura ya sabemos si debemos imprimir 
esta etiqueta o no, podemos hacerla invisible sin utilizar el evento BeforePrint:
procedure [Link](Sender: TObject);
begin
[Link] := 'Factura';
[Link] := ExtractFilePath([Link]) +
'[Link]';
[Link] := StrToInt([Link]);
[Link] := [Link];
if not [Link] then
with [Link] do
if FindComponent('TRpLabel14') is TRpLabel then
(FindComponent('TRpLabel14') as TRpLabel).FontColor := clWhite;
[Link];
end;

Si no está activado en la factura el CheckBox de Contado entonces lo hacemos invisible. Para hacerla 
invisible también le podemos quitarle el texto:
if not [Link] then
with [Link] do
if FindComponent('TRpLabel14') is TRpLabel then
(FindComponent('TRpLabel14') as TRpLabel).Text := '';

De este modo podemos controlar si se imprimen o no las cuentas bancarias, los distintos tipos de IVA, los 
recargos de equivalencia o las retenciones. Aunque Report Manager tiene buenas funciones para evaluar 
expresiones, no hay nada como Delphi para meterle mano a los documentos.

ENVIAR PARÁMETROS AL INFORME
También podemos enviar parámetros formalmente al informe creando parámetros en el mismo. Esto se hace 
seleccionando las opciones Informe – Configuración de datos y en el formulario que aparece pulsamos el 
botón Parámetros:

Se abrirá esta ventana:

Pulsamos el botón Añadir un nuevo 
parámetro y como queremos enviarle la cuenta bancaria le ponemos de nombre CCC:

Pulsamos Aceptar y otra vez Aceptar 
en la ventana anterior. Ahora vamos a crear una expresión al pie de la factura que recoja el valor de este 
parámetro:

Para mandarle el parámetro al imprimir 
desde Delphi hacemos esto:
procedure [Link](Sender: TObject);
begin
[Link] := 'Factura';
[Link] := ExtractFilePath([Link]) +
'[Link]';
[Link] := StrToInt([Link]);
[Link] := [Link];
[Link]('CCC').AsString := '1234-5678-44-
1234567890';
[Link];
[Link];
end;

Debemos llamar al método PrepareParamsBeforeOpen para que el informe se chupe los parámetros que 
le mandamos:

Pero es que además podemos utilizar 
los parámetros para cambiar las condiciones de la SQL de la tabla. Vamos a crear un parámetro para el 
detalle de la factura llamado PRECIOMINIMO para que muestre sólo aquellas líneas de detalle cuyo precio 
rebase el que le pasamos como parámetro:

Ahora modificamos la SQL del detalle de este 
modo:
SELECT DETALLE.*,[Link],
[Link] FROM DETALLE
LEFT JOIN ARTICULOS ON [Link]=[Link]
WHERE PRECIO >= :PRECIOMINIMO
Si intentamos hacer la vista previa en el informe nos dirá esto:

Para probar que vaya bien, entramos de 
nuevo al parámetro, lo ponemos de tipo moneda y con el valor 20:

Al hacer la vista previa solo mostrará las líneas de 
detalle cuyo precio es mayor de 20:

En Delphi le pasamos el parámetro como hemos 
visto antes:
[Link]('CCC').AsString := '1234-5678-44-
1234567890';
[Link]('PRECIOMINIMO').Value := 20;
[Link];
[Link];

Aunque Report Manager pueda parecer un editor de informes algo simple al principio, conforme vamos 
profundizando en sus detalles vemos que podemos hacer cosas bastante potentes. El próximo artículo 
veremos como realizar informes a varias bandas y como sumar el contenido de varias de ellas.

También podría gustarte