Lazarus 3.0 (2023.12.21.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Válasz:LazReport futásidőben. 2011 szept. 19 20:43 #853

  • szeti
  • szeti profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 39
  • Köszönetek: 1
Sikerült megoldani a futásidőben legenerált több oldalas report problémáját. Igaz talán nem a legszebb, ugyanakkor hibátlanul működik. A megoldás a Composite Report készítése, ehhez azonban a szerkesztési időben több oldalasra készített reportot ami oldalanként különböző TfrDBDataSet-eket használ, szét kellett szedni annyi .lrf file-ra, ahány lapból áll az eredeti report. Ezután Composite Reportként lehet őket összefűzni. Valószínűleg létezik az általam eredetileg keresett egyszerűbb mód is (egy .lrf file segítségével megoldani a kérdést), ezért ha valaki tudja kérem ossza meg velünk.

Pl.
Var //...
      frPtj:TfrCompositeReport;
      frPtjP1:TfrReport;
      frPtjP2:TfrReport;
//...
 frPtjP1.Dataset:=frPtjDs;
 frPtjP2.Dataset:=frPtjFkvDs;
//...
 frPtjP1.LoadFromFile('MyReportp1.lrf');
 frPtjP2.LoadFromFile('MyReportp2.lrf');
 frPtjP1.PrepareReport;
 frPtjP2.PrepareReport;
 frPtj.Reports.add(frPtjP1);
 frPtj.Reports.add(frPtjP2);
 frPtj.ShowReport;
 
//...

LazReport futásidőben. 2011 szept. 14 09:36 #852

  • szeti
  • szeti profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 39
  • Köszönetek: 1
Üdv Mindenkinek!

Volna nekem egy Lazreport kérdésem, amire igyekeztem választ kapni a netről, de sajnos valamivel nagyon nem vagyok tisztában, kérlek segítsetek.

Egy több lapból álló TfrReportot (frPtj) hoztam létre (Page1, Page2), melyek mindegyikén egy MasterData Band található. (frPtjDS->Page1, frPtjFkvDS->Page2). Tervezési időben ezek az értékek beállításra kerültek és a report hibátlanul lefut, létrejönnek az oldalak oly módon, hogy az frPtj.DataSet értéket nem is kellett beállítanom az Objektum felügyelőben.

Futásidőben azonban az alábbi unitban szereplő kódot használom, ami sajnos hibásan működik:
unit tasks;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, Dialogs, Rutin, LR_Class, Reports, LR_DBSet, LR_DSet, lr_e_pdf,
  FileUtil;
 
type
  MyObject=Class(TObject)
  procedure TaskPtjel(Show: Boolean; tmb: array of string);
  procedure frPtjGetValue(const ParName: String; var ParValue: Variant);
  procedure frPtjDSFirst(Sender: TObject);
  procedure frPtjDSNext(Sender: TObject);
  procedure frPtjFkvDSCheckEOF(Sender: TObject; var VEof: Boolean);
  procedure frPtjFkvDSFirst(Sender: TObject);
  procedure frPtjFkvDSNext(Sender: TObject);
 
  private
    { private declarations }
  public
    { public declarations }
  end;
 
 
  var TaskObject: MyObject;
      Comp:TComponent;
      frOwner:TComponent;
      frPtjDS:TfrDBDataSet;
      frPtj:TfrReport;
      frPtjFkvDS: TfrUserDataSet;
...;
 
implementation        
Uses ...;
 
procedure MyObject.frPtjGetValue(const ParName: String; var ParValue: Variant);
var...;
begin  ...;  end;
procedure MyObject.frPtjDSFirst(Sender: TObject);
var...;
begin  ...;  end;
procedure MyObject.frPtjDSNext(Sender: TObject);
var...;
begin  ...;  end;
procedure MyObject.frPtjFkvDSCheckEOF(Sender: TObject; var VEof: Boolean);
var...;
begin  ...;  end;
procedure MyObject.frPtjFkvDSFirst(Sender: TObject);
var...;
begin  ...;  end;
procedure MyObject.frPtjFkvDSNext(Sender: TObject);
 
procedure MyObject.TaskPtjel(Show: Boolean; tmb: array of string);
var ...;
begin
 frOwner:=TComponent.Create(Comp);
 frPtj:=TfrReport.Create(frOwner);
 frPtjDS:=TfrDBDataSet.Create(frOwner);
 frPtjFkvDS:=TfrUserDataSet.Create(frOwner);
 frPtjDS.DataSet:=DataModule1.frZQPtjel;
 //frPtj.Dataset:=frPtjDs;
 
 frPtj.OnGetValue:=@frPtjGetValue;
 
 frPtjDS.OnFirst:=@frPtjDSFirst;
 frPtjDS.OnNext:=@frPtjDSNext;
 
 frPtjFkvDS.OnCheckEOF:=@frPtjFkvDSCheckEOF;
 frPtjFkvDS.OnFirst:=@frPtjFkvDSFirst;
 frPtjFkvDS.OnNext:=@frPtjFkvDSNext;
 
...;
 
frPtj.LoadFromFile('MyReport.lrf');
frPtj.ShowReport;
...
end;
end.

Amennyiben az frPtj.DataSet értékét nem állítom be, akkor az adat sorok hiányoznak mindkét oldalról, ugyanakkor frPtj.DataSet:=frPtjDS; esetén az első oldalt, az frPtj.DataSet:=frPtjFkvDs; esetén pedig a második oldalt generálja le helyesen a program. Hogyan lehet elérni, hogy minden oldal hibátlanul készüljön el.

Köszönöm!

  • Oldal:
  • 1