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:

Al pulsar el botón Imprimir podemos realizar una vista previa si está activado el checkbox o bien lanzarlo directamente a la impresora:
procedure TFContactos.BImprimirClick(Sender: TObject);
begin
VCLReport.Title := 'Listado de contactos';
VCLReport.Filename := ExtractFilePath(Application.ExeName) +
'contactos.rep';
VCLReport.Preview := VistaPrevia.Checked;
VCLReport.Execute;
end;
Se asume que la ruta del informe contactos.rep 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 TFContactos.BExportarPDFClick(Sender: TObject);
begin
// Método 1
PDFReport.Title := 'Listado de contactos';
PDFReport.Filename := ExtractFilePath(Application.ExeName) +
'contactos.rep';
PDFReport.PDFFilename := ExtractFilePath(Application.ExeName) +
'contactos.pdf';
PDFReport.Execute;
Application.MessageBox(PChar('Listado exportado correctamente:' +
#13 + #13 + PDFReport.PDFFilename), 'Exportando', MB_ICONINFORMATION);
end;
O bien el componente VCLReport:
procedure TFContactos.BExportarPDFClick(Sender: TObject);
begin
// Método 2
VCLReport.Title := 'Listado de contactos';
VCLReport.Filename := ExtractFilePath(Application.ExeName) +
'contactos.rep';
VCLReport.SaveToPDF(ExtractFilePath(Application.ExeName) +
'contactos.pdf');
Application.MessageBox(PChar('Listado exportado correctamente:' +
#13 + #13 + ExtractFilePath(Application.ExeName) + 'contactos.pdf'),
'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 TFContactos.BExportarHTMLClick(Sender: TObject);
begin
VCLReport.Title := 'Listado de contactos';
VCLReport.Filename := ExtractFilePath(Application.ExeName) +
'contactos.rep';
VCLReport.SaveToHTML(ExtractFilePath(Application.ExeName) +
'contactos.html');
Application.MessageBox(PChar('Listado exportado correctamente.' +
#13 + #13 + ExtractFilePath(Application.ExeName) +
'contactos.html'), 'Exportando', MB_ICONINFORMATION);
end;
La exportación que hace es bastante decente:


Exportar el archivo a texto es algo similar:
procedure TFContactos.BExportarTXTClick(Sender: TObject);
begin
VCLReport.Title := 'Listado de contactos';
VCLReport.Filename := ExtractFilePath(Application.ExeName) +
'contactos.rep';
VCLReport.SaveToText(ExtractFilePath(Application.ExeName) +
'contactos.txt');
Application.MessageBox(PChar('Listado exportado correctamente.' +
#13 + #13 + ExtractFilePath(Application.ExeName) +
'contactos.txt'), 'Exportando', MB_ICONINFORMATION);
end;
Hay que reconocer que aquí no puede hacer maravillas:


CREANDO EL INFORME DE UNA FACTURA
Supongamos que tenemos una base de datos de Interbase llamada facturación.gdb que tiene la tabla de CLIENTES (clic para ampliar):




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:






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:

8. Una vez establecida la conexión, cerramos esta ventana y añadimos la conexión recien creada en la ventana donde estamos:

10. Nombre del alias: FACTURAS.
11. Le ponemos de SQL:
SELECT FACTURAS.*,CLIENTES.NOMBRE AS NOMBRE, CLIENTES.DIRECCION AS DIRECCION,
CLIENTES.POBLACION AS POBLACION, CLIENTES.PROVINCIA AS PROVINCIA,
CLIENTES.CP,CLIENTES.CIF FROM FACTURAS
LEFT JOIN CLIENTES ON FACTURAS.IDCLIENTE=CLIENTES.ID
WHERE ID=1
Si pulsamos el botón Mostrar datos nos mostrará la primera factura (solo para ver que la SQL es correcta):

12. Igualmente vamos a añadir la tabla DETALLE:
SELECT DETALLE.*,ARTICULOS.NUMERO,
ARTICULOS.NOMBRE FROM DETALLE
LEFT JOIN ARTICULOS ON ARTICULOS.ID=DETALLE.IDARTICULO
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:




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

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:



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:
DETALLE.IDFACTURA=FACTURAS.ID
Si mostramos la vista previa de la factura debe salir esto:

Pruebas realizadas en RAD Studio 2007.