delphi2010+fastreport4.在实现分组打印时候,要求每页打印9行,每组数据不足9行的自动补空到9行,超过9行的,新建页(不是接着打第二页,是新建一个凭证页),怎么实现。补空已经写好了,现在是出现有一组数据超过9行的,并没有当前页汇总再第二页打印,而是直接连打了第二页。



report code:
function MoneyToCharacter(Money:real):string; //数字转换为中文大写
var
temp:string;
resu:string;
i,j:integer;
len:integer;
Num:array[0..9] of string;
A:array[0..13] of string;
begin
Num[0]:='零';
num[1]:='壹';
Num[2]:='贰';
num[3]:='叁';
Num[4]:='肆';
num[5]:='伍';
Num[6]:='陆';
num[7]:='柒';
Num[8]:='捌';
num[9]:='玖';
a[0]:='分';
a[1]:='角';
a[2]:='元';
a[3]:='拾';
a[4]:='佰';
a[5]:='仟';
a[6]:='万';
a[7]:='拾';
a[8]:='佰';
a[9]:='仟';
a[10]:='亿';
a[11]:='拾';
a[12]:='佰';
a[13]:='仟';
temp:=trim(inttostr(round(money*100)));
len:=length(temp);
resu:='';
if (len>13) or (len=0) then
begin
exit;
end;
for i:=1 to len do
begin
j:=strtoint(copy(temp,i,1));
resu:=resu+num[j]+a[len-i];
end;
result:=resu;
end;
var
GPage,GIndex,FGIndex:integer;
PageList:array of integer;
PageLine: integer;
PageMaxRow: integer=9;
jf,df:real;
procedure PageFooter1OnBeforePrint(Sender: TfrxComponent);
begin
GPage := GPage + 1;
end;
procedure Page1OnBeforePrint(Sender: TfrxComponent);
begin
GPage :=1;
end;
procedure GroupFooter1OnBeforePrint(Sender: TfrxComponent);
var
i: integer;
begin
if Engine.FinalPass then //二次遍历时增加分组索引
FGIndex := FGIndex + 1
else
begin
setLength(PageList,GIndex + 1);
PageList[GIndex] := GPage; //存放分组的总页数
GIndex := GIndex + 1;
end;
GPage := 0;
i := iif(PageLine=0, PageMaxRow, PageLine);
child1.visible := True;
while i < PageMaxRow do
begin
i := i + 1;
Engine.ShowBand(Child1); //印空白表格
end;
child1.visible := False;
end;
procedure Memo1OnBeforePrint(Sender: TfrxComponent);
begin
if not Engine.FinalPass then exit;
Memo1.Lines[0] := IntToStr(FGIndex);
end;
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
PageLine := <Line> mod PageMaxRow;
if (PageLine = 1) and (<line> > 1) then
Engine.newpage;
child1.visible := False;
end;
//如果仅在最后一页补空行可用
{procedure Footer1OnBeforePrint(Sender: TfrxComponent);
var
i: integer;
begin
i := iif(PageLine=0, PageMaxRow, PageLine);
child1.visible := True;
while i < PageMaxRow do
begin
i := i + 1;
Engine.ShowBand(Child1); //印空白表格
end;
child1.visible := False;
end;}
procedure MasterData1OnAfterPrint(Sender: TfrxComponent);
begin
jf:=jf+<frxDBDataset1."借方金额"> ;
// Memo15.Text :=FloatToStr(jf);
MEMO15.Text := FORMATFLOAT('###,##0.00', jf);
df:=df+<frxDBDataset1."贷方金额"> ;
Memo16.Text :=FORMATFLOAT('###,##0.00', df);
memo13.text:=MoneyToCharacter(df)
end;
procedure GroupFooter1OnAfterPrint(Sender: TfrxComponent);
begin
jf:=0;
df:=0;
end;
begin
FGIndex :=0;
end.