Bueno, la cosa viene así.
Estoy haciendo un software para un campo de cria de vacas. Hay dos reportes diferentes Pesajes y Enfermedades.
Me están pidiendo que muestre un "informe completo" (pesajes + enfermedades) para toda la colección de animales.
Para que se entienda mejor, por cada animal debo mostrar el informe combinado. Por supuesto, para el propietario esto es un solo informe que ve en la vista previa e imprime.
Lo que hice fue poner un CompositeReport y a través de un for ir cambiando los valores de cada animal al momento del Add.
Un poco mas gráfico sería...
Código Delphi
[-]
procedure TFrmBuscarPesajes.qrcrInformeMasivoAddReports(Sender: TObject);
begin
With qrcrInformeMasivo.Reports, datamodule1, grillaBovinos1 do
begin
try
for i:= 1 to rowCount - 2 do
begin
globCodCaravana:=strToInt(cells[0, i]);
Globcaravana:=cells[1, i];
globMarca:=cells[2, i];
globtatuaje:=cells[3, i];
globcabana:=cells[4, i];
globFcha_Nac:=cells[5, i];
globtipo_bovino:=cells[6, i];
globRaza:=cells[8, i];
globFoto:=cells[7, i];
Add(FrmInfGral.ReporteGral);
Add(FrmInPesajes.ReportePesajes);
Add(FrmInfEnfermededes.ReporteEnfermedades);
end; except
raise;
end;
end; end;
Las variables "glob..." son las que ponen los diversos datos en los reportes.
Por ejemplo, en el caso de tener 10 vacas, me salen 10 hojas, pero los datos que pone en las 10 hojas corresponden a la última vaca de la lista.
La llamada al composite es de la siguiente manera:
Código Delphi
[-]
procedure TFrmBuscarPesajes.btnInformeMasivoClick(Sender: TObject);
begin
with GrillaBovinos1 do
begin
if RowCount > 2 then
begin
try
qrcrInformeMasivo.Preview;
except
on e:EMDOError do
begin
mErrores(e, 'Informe general no pudo completarse.', 'Informes');
end;
end;
end
else
begin
MessageBox(handle,'La grilla está vacía', 'Informe general masivo.',
MB_OK + MB_ICONERROR);
end;
end;
end;