Ü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!