FastReport中要打印页数和总页数(25分)

  • 主题发起人 主题发起人 jtaiger
  • 开始时间 开始时间
J

jtaiger

Unregistered / Unconfirmed
GUEST, unregistred user!
我在FastReport中要打印页数和总页数,主从表数据打印,主表和从表都有多条记录,如果一条主表纪录和主表对应的从表纪录打印了多页(如3页),则报表上显示(当前页/总页数)为:1/3 ,2/3,3/3 。当打印第2条主纪录时,如果该主纪录对应的从表有4页,则报表上打印1/4,2/4,3/4,4/4。即每打印一条主纪录,报表的当前页和总页数要重新开始计数。
我试了FastReport提供的变量,Page,TotalPages 和 Page#,TotalPages# 都不行,请问大虾们,有没有办法处理。如何处理。谢谢。
 
procedure TfrmInvoicePrt.frReport2ManualBuild(Page: TfrPage);
var
i,j,k,iSum: Integer;
begin
while not frdbdataset1.Eofdo
begin
iSum := aqry_erpDataInHis.RecordCount ;
i := 0 ;

Page.FindObject('Memo43').Memo.Text := '共 '+IntToStr(Round(isum/(26+0.5)+0.5))+' 页';
Page.FindObject('Memo6').Memo.Text := '第 1 页' ;

Page.ShowBandByName('主项数据2');
Page.ShowBandByName('细项头1');
k:=1;
while not frDBDataSet2.Eofdo
begin
i := i + 1 ;
if i > 26 then
begin
Page.ShowBandByName('细项脚1');
//Page.ShowBandByName('主项脚1');
Page.NewPage ;
k:=k+1;
Page.FindObject('Memo6').Memo.Text := '第 '+IntToStr(k)+' 页' ;
Page.ShowBandByName('主项数据2');
Page.ShowBandByName('细项头1');
i := 1 ;
end ;
Page.FindObject('Memo24').Memo.Text := IntToStr(aqry_erpDataInHis.RecNo) ;
Page.ShowBandByName('细项数据1');
frDBDataSet2.Next;
end ;
for j := i to 26do
begin
Page.ShowBandByName('子1');
end;

Page.ShowBandByName('细项脚1');
Page.ShowBandByName('主项脚1');
frdbdataset1.Next;
if not frdbdataset1.Eof then
Page.NewPage ;
end ;
end;
 
如果要这样,就要手工打印报表,要通过从表的记录数来计算总页数。
我做发票套打时用过这个。

procedure TfrmInvoicePrt.frReport2ManualBuild(Page: TfrPage);
var
i,j,k,iSum: Integer;
begin
while not frdbdataset1.Eofdo
begin
iSum := aqry_erpDataInHis.RecordCount ;
i := 0 ;

Page.FindObject('Memo43').Memo.Text := '共 '+IntToStr(Round(isum/(26+0.5)+0.5))+' 页';
Page.FindObject('Memo6').Memo.Text := '第 1 页' ;

Page.ShowBandByName('主项数据2');
Page.ShowBandByName('细项头1');
k:=1;
while not frDBDataSet2.Eofdo
begin
i := i + 1 ;
if i > 26 then
begin
Page.ShowBandByName('细项脚1');
//Page.ShowBandByName('主项脚1');
Page.NewPage ;
k:=k+1;
Page.FindObject('Memo6').Memo.Text := '第 '+IntToStr(k)+' 页' ;
Page.ShowBandByName('主项数据2');
Page.ShowBandByName('细项头1');
i := 1 ;
end ;
Page.FindObject('Memo24').Memo.Text := IntToStr(aqry_erpDataInHis.RecNo) ;
Page.ShowBandByName('细项数据1');
frDBDataSet2.Next;
end ;
for j := i to 26do
begin
Page.ShowBandByName('子1');
end;

Page.ShowBandByName('细项脚1');
Page.ShowBandByName('主项脚1');
frdbdataset1.Next;
if not frdbdataset1.Eof then
Page.NewPage ;
end ;
end;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部