![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
No he comentado una cosa importante, Tampoco necesitas un TQuickREport
, al menos en diseño: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 "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 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. |
|
#2
|
|||
|
|||
|
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;
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|