Ver Mensaje Individual
  #6  
Antiguo 15-11-2005
lunatiko lunatiko is offline
Miembro
 
Registrado: oct 2004
Posts: 17
Reputación: 0
lunatiko Va por buen camino
Report en tiempo de ejecución

Tal y como prometí he hecho una función que genera un quickreport simple
en tiempo de ejecución a partir de una tabla (mejor dicho un dbGrid).
Funciona de un modo parecido a QRCreateList pero permite mayor control
sobre las columnas que se imprimen.Ya se que es francamente mejorable,
pero para lo que yo necesitaba hacer es suficiente. Entre las posibles
mejoras tenemos: añadir bandas de grupos, totales, fecha y hora de impresión opcional,...

En fin que espero que a alguién le sea útil. Salu2!

Código:
 

procedure ImprimirTabla(Tabla: TDBGrid;sTitulo:string);
var
  qr:TQuickRep;

  bandaCabecera:TQRCustomBand;
  bandaPie:TQRCustomBand;
  bandaTitulos:TQRCustomBand;
  bandaDetalle:TQRCustomBand;

  i:integer;
  iDistancia:integer;

begin

  qr := TQuickRep.Create(nil);
  try
	//Definicion de las propiedades del listado
	qr.ReportTitle := sTitulo;
	qr.PreviewInitialState :=wsMaximized;
	qr.Page.Orientation  := poLandscape;
	qr.Page.LeftMargin   := 10;
	qr.Page.RightMargin  := 10;
	qr.Page.TopMargin	:= 10;
	qr.Page.BottomMargin := 10;
	qr.Page.PaperSize	:= A4;
	qr.DataSet := Tabla.DataSource.DataSet;
	qr.DataSet.Active := true;

 

	//Creacion de bandas 
	qr.Bands.HasColumnHeader := true;
	qr.bands.HasPageHeader   := true;
	qr.bands.HasPageFooter   := true;
	qr.Bands.HasDetail	   := true;

	bandaCabecera := qr.bands.PageHeaderBand;
	bandaPie	  := qr.Bands.PageFooterBand;
	bandaTitulos  := qr.Bands.ColumnHeaderBand;
	bandaDEtalle  := qr.Bands.DetailBand;

	bandaTitulos.Height := 25;
	bandaDetalle.Height := 20;


	//TITULO 
	with TQrSysData.create(nil) do
	begin
	  Data	   := qrsReportTitle;
	  Autosize   := false;
	  Alignment  := taCenter;
	  Font.Color := clBlack;
	  Font.Size  := 12;
	  Font.Style := [fsBold];
	  Width	  := bandaCabecera.width;
	  Parent	 := bandaCabecera;
	end;


	//TITULOS COLUMNAS 
	iDistancia := 0;
	for i:=0 to Tabla.Columns.Count-1 do
	begin
	  if Tabla.Columns[i].Visible then
	  begin
		with TQRLabel.Create(nil) do
		begin
		  AutoSize   := false;
		  caption	:= Tabla.Columns[i].Title.Caption;
		  Font.Style := [fsBold,fsUnderline];
		  Font.Size  := 10;
		  Alignment  := taCenter;
		  Width	  := Tabla.Columns[i].width + 10 ;
		  Top		:= 2;
		  left	   := iDistancia;
		  iDistancia := Left+ Width + 5;
		  Parent	 := bandaTitulos;
		end;
	  end;
	end;


	//DETALLE DEL LISTADO 
	iDistancia := 0;
	for i:=0 to Tabla.Columns.Count-1 do
	begin
	  if Tabla.Columns[i].Visible then
	  begin
		with TQRDBText.Create(nil) do
		begin
		  AutoSize   := false;
		  DataSet	:= Tabla.DataSource.DataSet;
		  DataField  := Tabla.Fields[i].FieldName;
		  Font.Size  := 10;
		  alignment  := Tabla.Columns[i].Alignment;
		  width	  := Tabla.Columns[i].width +10;
		  Top		:= 2;
		  left	   := iDistancia;
		  case Tabla.Fields[i].DataType of
			ftFloat:	mask := '#,##0.00';
			ftDateTime: mask := 'dd/mm/yyyy';
		  end;
		  iDistancia := Left+ Width + 5;
		  Parent	 := bandaDetalle;
		end;
	  end;
	end;


	//PIE 
	with TQRExpr.create(nil) do
	begin
	  expression := QuotedStr('Pág. ') + ' +PAGENUMBER';
	  Autosize   := false;
	  Alignment  := taRightJustify;
	  Font.Color := clBlack;
	  Font.Size  := 10;
	  Font.Style := [];
	  Width	  := bandaPie.width;
	  Parent	 := BandaPie;
	end;

	qr.Preview;
  finally
	qr.Free;
  end;
end;
Responder Con Cita