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:


Ahora si sale como nosotros queremos:

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:

procedure TFImprimirFactura.BImprimirClick(Sender: TObject);
begin
VCLReport.Title := 'Factura';
VCLReport.Filename := ExtractFilePath(Application.ExeName) +
'factura.rep';
VCLReport.Report.Copies := StrToInt(NumCopias.Text);
VCLReport.Preview := VistaPrevia.Checked;
VCLReport.Execute;
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 TFImprimirFactura.VCLReportBeforePrint(Sender: TObject);
var
i: Integer;
begin
with VCLReport.Report do
begin
if FindComponent('TRpExpression9') is TRpExpression then
begin
if (FindComponent('TRpExpression9') as TRpExpression).IdenExpression.Value >
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:


(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:

procedure TFImprimirFactura.BImprimirClick(Sender: TObject);
begin
VCLReport.Title := 'Factura';
VCLReport.Filename := ExtractFilePath(Application.ExeName) +
'factura.rep';
VCLReport.Report.Copies := StrToInt(NumCopias.Text);
VCLReport.Preview := VistaPrevia.Checked;
if not Contado.Checked then
with VCLReport.Report do
if FindComponent('TRpLabel14') is TRpLabel then
(FindComponent('TRpLabel14') as TRpLabel).FontColor := clWhite;
VCLReport.Execute;
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 Contado.Checked then
with VCLReport.Report 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:




procedure TFImprimirFactura.BImprimirClick(Sender: TObject);
begin
VCLReport.Title := 'Factura';
VCLReport.Filename := ExtractFilePath(Application.ExeName) +
'factura.rep';
VCLReport.Report.Copies := StrToInt(NumCopias.Text);
VCLReport.Preview := VistaPrevia.Checked;
VCLReport.Report.Params.ParamByName('CCC').AsString := '1234-5678-44-1234567890';
VCLReport.Report.PrepareParamsBeforeOpen;
VCLReport.Execute;
end;
Debemos llamar al método PrepareParamsBeforeOpen para que el informe se chupe los parámetros que le mandamos:


SELECT DETALLE.*,ARTICULOS.NUMERO,
ARTICULOS.NOMBRE FROM DETALLE
LEFT JOIN ARTICULOS ON ARTICULOS.ID=DETALLE.IDARTICULO
WHERE PRECIO >= :PRECIOMINIMO
Si intentamos hacer la vista previa en el informe nos dirá esto:



VCLReport.Report.Params.ParamByName('CCC').AsString := '1234-5678-44-1234567890';
VCLReport.Report.Params.ParamByName('PRECIOMINIMO').Value := 20;
VCLReport.Report.PrepareParamsBeforeOpen;
VCLReport.Execute;
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.
Pruebas realizadas en RAD Studio 2007.