Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   FastReport: imprimir listados de campos variables (https://www.clubdelphi.com/foros/showthread.php?t=52893)

Lepe 03-02-2008 14:54:37

FastReport: imprimir listados de campos variables
 
Tengo un dbgrid con los resultados de búsqueda según el criterio del usuario, obviamente el sql es variable, tanto de campos, tablas, order by, etc.

¿FastReport tiene alguna forma de hacer ese Report en tiempo de ejecución de forma automática?

¿y FreeReport?

QuickReports tiene el qrCreateList (ya se ha hablado mucho en el foro), pasando los nombres de los campos y el query/tabla, hace el listado automático.

Actualmente estoy probando FreeReport 2.2 y no he encontrado nada, pero igual existe :confused:.

El hecho de preguntar por FastReport, es que de tener esa característica, compraría los componentes.

Agradezco vuestro tiempo y sobre todo, vuestros comentarios ;)

Edito: He visto los "hilos relacionados" pero no están relacionados con mi pregunta.

Saludos

PepeLolo 03-02-2008 17:13:38

Hola,

Puedo confirmate que la versión 4 de fastreport tienes esa opción.
Pongo un ejemplo que viene con las demos.

Código Delphi [-]
procedure TForm1.frxReport1BeforePrint(c: TfrxReportComponent);
var
  Cross: TfrxCrossView;
  i, j: Integer;
begin
  if c is TfrxCrossView then
  begin
    Cross := TfrxCrossView(c);
    Table1.First;
    i := 0;
    while not Table1.Eof do
    begin
      for j := 0 to Table1.Fields.Count - 1 do
        Cross.AddValue([i], [Table1.Fields[j].DisplayLabel], [Table1.Fields[j].AsString]);
      Table1.Next;
      Inc(i);
    end;
  end;
end;

Un saludo.

Lepe 03-02-2008 20:50:26

Muchas gracias, ni se me hubiese ocurrido mirar por esa vía.

Lepe 03-02-2008 23:56:58

¿Por qué siempre empezamos por lo más difícil?

En la carpeta Demos de FreeReport 2.34 viene una subcarpeta "runtime" y el código es este:
Código Delphi [-]
//  FastReport 2.3 demo.
//
//  Demonstrates how to create reports with no designer.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  DB, DBTables, FR_DSet, FR_DBSet, FR_Class, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    frReport1: TfrReport;
    frDBDataSet1: TfrDBDataSet;
    Table1: TTable;
    DataSource1: TDataSource;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  v: TfrView;
  b: TfrBandView;
  Page: TfrPage;
begin
  frReport1.Pages.Clear;
  frReport1.Pages.Add;              // create page
  Page := frReport1.Pages[0];

  b := TfrBandView(frCreateObject(gtBand, ''));  // create MasterData band
  b.SetBounds(0, 20, 0, 20);
  b.BandType := btMasterData;
  b.Dataset := 'frDBDataSet1';
  Page.Objects.Add(b);

  v := frCreateObject(gtMemo, '');  // create data field
  v.SetBounds(20, 20, 200, 16);
  v.Memo.Add('[Table1."Company"]');
  Page.Objects.Add(v);

  frReport1.ShowReport;
end;

Saludos

FerCastro 04-02-2008 06:11:07

Hola, gracias por la respuesta.

Tratando de hacer algo que indicas obtengo un error. Te adjunto la imágen y te pongo el código de cómo lo realizo.

Código Delphi [-]
  DM.Letras1.Numero:=DM.QEditaMovs.Fields[5].AsInteger;
  DM.reporte.Variables['cCadenaLetra'] := DM.Letras1.AsString;




Agradezco cualquier comentario.

FCG

Lepe 04-02-2008 17:12:58

Yo todavía no he llegado a las variables, espero que alguien responda.

Un detalle: en este hilo no se ha hablado de "variables" propiamente dichas. Mi idea es algo así:
Código Delphi [-]
  CreaInforme(table1, 'idcliente, cliente, dirección'); 
  MuestraPresentacionPreliminar;
Aunque la tabla tenga más campos, el informe solo mostraría los campos especificados.

Saludos

Delphius 04-02-2008 18:18:32

Hola Lepe, no manejo FastReport... y apenas conozco los QReport.
¿Por casualidad lo que buscas es más o menos hacer lo que pretende david_uh en este hilo?

Yo he visto esa demo que envió y parece ser interesante y prometedora. Como para ampliarla...
Si es algo parecido a eso lo que buscas, tal vez se podría "migrar" lo que propone David a FasReport.

Saludos,

fjcg02 05-02-2008 07:53:20

Hola amigos,
hace tiempo colgé el código de una utilidad para generar reportes cuyo origen es una query ( cualquier query ). A pesar de estar hecho para ADO, es fácil cambiarlo para otros componentes.
Os paso la referencia por si alguien lo considra interesante. Es para QuickReport estandard.

http://www.clubdelphi.com/foros/show...jcg02+informes

Este mismo código está incluido ( seguramente mejorado ) en el hilo que abrió Caral del programa de facturación paso a paso, como parte de una apliacción que colgué para que la pudieran destripar los foristas.

Espero haber aportado algo útil.

Saludos

Lepe 08-02-2008 13:00:15

Perdonad por no responder antes, he perdido el hilo de vista, aunque he progresado bastante. Anoche a las 2 de la madrugada hice funcionar mi "TfrAutoReport".

Exacto Delphius, es eso lo que quiero conseguir, pero con FreeReport (versión con código fuente de los FastReports, aunque algo antiguos).

fjcg02: Estoy migrando una aplicación desde QuickReports a FreeReports. Existe un fallo conocido por QuSoft y sin solución: Cuando le da la gana, no imprime la foto de un QRDBImage. Es un fallo aleatorio y sin excepciones.

Este código es provisional y tendré que añadir más cosas:
Código Delphi [-]
with AutoReport1 do
begin 
  PageOrientation := pgPortrait;
  PageHeader := 'Listado de Facturas del cliente ' + DescCliente;

  Dataset := query1;
  FieldNames.Add('cliente');
  FieldNmaes.Add('direccion');
  ...

  SummaryFields.Add('"Base Imponible"');
  SummaryFields.Add('Importe');

  ShowReport;
end;

Tengo creada una presentación preliminar para FastReport. Mi idea es colocar ese componente en dicha ventana, asignar las propiedades de página y márgenes en el inspector de objetos, y ya en tiempo de ejecución usarlo para generar cualquier informe. De momento funciona.

Reconozco que FreeReports tiene los eventos OnGetValue, algo así como el OnNeedData del QuickReports, pero no quiero usar ese método, implica muchos cambios.

PepeLolo 11-02-2008 00:47:36

Cita:

Empezado por FerCastro (Mensaje 263196)
Código Delphi [-]
DM.Letras1.Numero:=DM.QEditaMovs.Fields[5].AsInteger;
DM.reporte.Variables['cCadenaLetra'] := DM.Letras1.AsString;


FCG

Hola, el código correcto es


Código Delphi [-]
DM.reporte.Variables['cCadenaLetra'] := QuotedStr(DM.Letras1.AsString);





Los valores se tienen que pasar en formato cadena, no como string.

un saludo.


La franja horaria es GMT +2. Ahora son las 18:46:16.

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