Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-08-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
No he comentado una cosa importante, Tampoco necesitas un TQuickREport , al menos en diseño:
Código Delphi [-]
var q:TQuickReport;
begin
 q := TquickReport.Create(nil);
 ....

  Freeandnil(q);
Igual que creamos un TStringList, podemos crear cualquier componente de delphi.

Para personalizar, yo lo haría desde el Grid que tengas, ocultando o mostrando las columnas, y despues guardar las columnas visibles en la BBDD.

Para guardar el ancho de los listados, bien podrías usar una tabla especial, yo la llamo "frases":
Código:
 codigo (varchar(50))           Valor (varchar(300))
--------------------------------------------------
ListA-Listado Uno                 idCliente_150;Nombrecliente_200;NAlbaran_80;
ListA-Listado Dos                 idCliente_150;Fecha_90;NAlbaran_80;
ListF-Listado Dos                 idCliente_150;Fecha_90;NAlbaran_80;
ListFontA-Listado Dos           Times New Roman,0,16711680,16,7
"ListA-" es un prefijo que se usa, en este caso para Listados de Albaranes.
"ListF-" para listados predefinidos de Facturas.
"ListFontA-" para saber la fuente que se usará en ese listado.

El resto del campo Código (39 caracteres) es el título del listado predefinido, así de paso limitamos la longitud del título para que quepa siempre en el folio.

Con una consulta del tipo
Código SQL [-]
select * from frases where codigo like 'ListA%'
Obtendrías todos los listados predefinidos de Albaranes. En ejecución, recorres esta query y añades cada listado a un TPopupMenu (por ejemplo).

Al cargar un listado predefinido, haces visibles las columnas del grid que estan guardadas en el campo "Valor" de ese listado

El campo Valor, lo cargas en la propiedad DelimitedText de un Stringlist con Delimiterchar := ';', y despues por cada item del Stringlist, buscas la posición del caracter guión bajo "_", a la izquierda tienes el nombre del campo, y a la derecha el ancho que tendrá en Grid.

Sin duda te hará falta FontTostr
para guardar la fuente del Grid y despues recuperarla.

No dudo que otra gente lo haga de una manera mejor. Estaremos a la expectativa .

Un saludo

Última edición por Lepe fecha: 30-08-2005 a las 17:32:36.
Responder Con Cita
  #2  
Antiguo 15-11-2005
lunatiko lunatiko is offline
Miembro
 
Registrado: oct 2004
Posts: 17
Poder: 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
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:23:14.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi