FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Hola!
Me parece que necesitas un Form, al menos, para poder hacer lo que quieres, si necesitas poder imprimir varios diferentes, lo que yo haría seria, en un Form pon un quickreport básico y lo modificas (añades bandas, datos ....) segun el botón del form que hayan pulsado. Espero que te sirva de algo, salu2 |
#2
|
||||
|
||||
Esa es la forma visual que lo hacemos todos, ponemos un Form y dentro un TQuickReport, pero desde delphi, File-->new --> other, puedes elegir Quickreport y listo, no necesitas ningún Form.
Para el tema que quieres, lo mejor es que uses la función qrCreateList que diseña un quickreport en función de los campos que quieras añadir. Un saludo. |
#3
|
|||
|
|||
Muchas gracias Lepe! lo he hecho con la función qrCreateList y es justo lo que necesitaba.
Para lo que necesito hacer ahora me sirve así, aunque me gustaria ir un poco más lejos y hacer algo más elaborado: poder cambiar el ancho de las columnas, los captions de los titulos, los campos que van a ser visibles,las fuentes de los labels, añadir bandas de grupo,etc... Todo esto lo tengo que investigarlo claro, quizá un poco mas adelante, si a alguien se le ocurre alguna cosa, será bienvenido. A ver si para cuando tenga algo decente lo puedo publicar aquí mismo. Gracias a todos!! |
#4
|
||||
|
||||
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. |
#5
|
|||
|
|||
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; |
|
|
|