reportmachine5.2能实现页码重置吗? ( 积分: 100 )

  • 主题发起人 主题发起人 hzqinmb
  • 开始时间 开始时间
H

hzqinmb

Unregistered / Unconfirmed
GUEST, unregistred user!
请各大侠帮忙
如果是王海丰先生,请不要再简单地回答我用Scrip,我可是您的注册用户,岂码您得给出个解决的办法或实例代码或修改我下面的代码吧,不要再逃避这个问题。我的注册邮箱:hzqinmb@21cn.com
报表要求按主项数据分出页码和总页数,有一主/细项数据
主项数据
ID 职业
1 学生
2 工人
细项数据
ID 姓名
1 张三
1 李四
1 江某
2 王五
2 赵六
3 海丰
  3 志钦
主项数据已设为强制换页,reportmachine只能打印出如下效果:
第1页/共7页 字段ID等于1
第2页/共7页 字段ID等于1
第3页/共7页 字段ID等于1
第4页/共7页 字段ID等于2
第5页/共7页 字段ID等于2
第6页/共7页 字段ID等于3
第7页/共7页 字段ID等于3
想实现下面效果:
{字段ID等于1}
第1页/共3页
第2页/共3页
第3页/共3页
{字段ID等于2}
第1页/共2页
第2页/共2页
{字段ID等于3}
第1页/共2页
第2页/共2页
下面的代码已实现了页页重置,但总页号,不知如何设
procedure PageFooter1_OnBeforPrint(Sender: TObject);
begin
if not FinalPass then
begin
if hId<>GetFieldValue('rmcheck1.&quot;CD&quot;') then
begin
hId:=GetFieldValue('rmcheck1.&quot;CD&quot;');
k:=k+1;
end else
begin
i:=0;
j:=0;
end;
PageArray[k]:=PageArray[k]+1;
end else
begin
if hId<>GetFieldValue('rmcheck1.&quot;CD&quot;') then
begin
hId:=GetFieldValue('rmcheck1.&quot;CD&quot;');
i:=hPageNo;
hPageNo:=i+1;
j:=1;
end else
begin
if i=0 then
begin
j:=j+1;
hPageNo:=j;
end else
begin
hPageNo:=j;
i:=0;
end;
end;
end;
hPage.AsString := '第 '+IntToStr(hPageNo)+' 页 共 '+IntToStr(hPageTotal)+' 页'+'l'+IntToStr(l);//+'i'+IntToStr(i)+'j'+IntToStr(j);
end;
 
请各大侠帮忙
如果是王海丰先生,请不要再简单地回答我用Scrip,我可是您的注册用户,岂码您得给出个解决的办法或实例代码或修改我下面的代码吧,不要再逃避这个问题。我的注册邮箱:hzqinmb@21cn.com
报表要求按主项数据分出页码和总页数,有一主/细项数据
主项数据
ID 职业
1 学生
2 工人
细项数据
ID 姓名
1 张三
1 李四
1 江某
2 王五
2 赵六
3 海丰
  3 志钦
主项数据已设为强制换页,reportmachine只能打印出如下效果:
第1页/共7页 字段ID等于1
第2页/共7页 字段ID等于1
第3页/共7页 字段ID等于1
第4页/共7页 字段ID等于2
第5页/共7页 字段ID等于2
第6页/共7页 字段ID等于3
第7页/共7页 字段ID等于3
想实现下面效果:
{字段ID等于1}
第1页/共3页
第2页/共3页
第3页/共3页
{字段ID等于2}
第1页/共2页
第2页/共2页
{字段ID等于3}
第1页/共2页
第2页/共2页
下面的代码已实现了页页重置,但总页号,不知如何设
procedure PageFooter1_OnBeforPrint(Sender: TObject);
begin
if not FinalPass then
begin
if hId<>GetFieldValue('rmcheck1.&quot;CD&quot;') then
begin
hId:=GetFieldValue('rmcheck1.&quot;CD&quot;');
k:=k+1;
end else
begin
i:=0;
j:=0;
end;
PageArray[k]:=PageArray[k]+1;
end else
begin
if hId<>GetFieldValue('rmcheck1.&quot;CD&quot;') then
begin
hId:=GetFieldValue('rmcheck1.&quot;CD&quot;');
i:=hPageNo;
hPageNo:=i+1;
j:=1;
end else
begin
if i=0 then
begin
j:=j+1;
hPageNo:=j;
end else
begin
hPageNo:=j;
i:=0;
end;
end;
end;
hPage.AsString := '第 '+IntToStr(hPageNo)+' 页 共 '+IntToStr(hPageTotal)+' 页'+'l'+IntToStr(l);//+'i'+IntToStr(i)+'j'+IntToStr(j);
end;
 
我要的测试例子你并没有发给我啊
 
whf先生:
您的邮箱多次拒收带测试例子附件的信。您的论坛我也登录不上,测试例子也不知如何才能给您 ,以前是可以登录的,注册rm后发了几个问题就登录不到了,不知是什么回事。
测试例子再发给您。
 
whf先生:
我rm注册用户,使用中遇到问题,页码总页数到现在为止,还弄不出来。
下面脚本是以前您在论坛上发的,它能实现页码总页数按主项数据的ID重新计数吗?有些也方我弄不明白,MyPageNo,MyPageTotal,Footer1是什么来的?我把注释写在下面,请指点,
//数据标头无论有几行,都只能选同一个数据标头
//分组后设置数据标头的RepeatOnNewPage和主项数据的LinesPerPage只对第一组有效,必须使用主-从表配合Master-Detail报表
//为了给各校设置页码,只能使用Header1.OnBeforePrint事件而不能使用MasterData1.OnBeforePrint事件
unit Report;
var
lPageIndex: Integer;
lList: TStringList;
procedure Self_OnScriptbegin
Report(Sender: TObject);
begin
if not Self.FinalPass then
begin
lList := TStringList.Create;
lList.Add('0');
end;
end;

procedure Self_OnScriptEndReport(Sender: TObject);
begin
if Self.FinalPass then
begin
lList.Free;
lList := nil;
end;
end;

procedure Footer1_OnBeforePrint(Sender: TObject);
begin
lPageIndex := lPageIndex + 1;
MyPageNo := 0;
//hzqinmb:MyPageNo须在var下声明吗?这是重置后的页码吧?我也试过把它加在var下。
if not Self.FinalPass then
lList.Add('0');
end;

procedure Page1_Onbegin
Page(aPageNo: Integer);
begin
if Self.FinalPass then
begin
MyPageTotal := lList[lPageIndex];
//hzqinmb:MyPageTotal须在var下声明吗?这是重置后的总页数吧?我也试过把它加在var下。
end
else
begin
lList[lPageIndex] := IntToStr(StrToInt(lList[lPageIndex]) + 1);
end;

MyPageNo := MyPageNo + 1;
end;

procedure Page1_OnActivate(Sender: TObject);
var
i: Integer;
begin
lPageIndex := 0;
MyPageNo := 0;
end;

procedure Main;
begin
MasterData1.spHeight:=0;
//将主项数据高度设为0,从而使其只控制数据而不显示
Self.OnScriptbegin
Report := Self_OnScriptbegin
Report;
Self.OnScriptEndReport := Self_OnScriptEndReport;
Page1.OnActivate := Page1_OnActivate;
Page1.Onbegin
Page := Page1_Onbegin
Page;
Footer1.OnBeforePrint := Footer1_OnBeforePrint;
//hzqinmb:Footer1是页脚吗?假设已放入一个Memo在页脚上,请问如何才能把重置后的页码和总页数打印在memo上?memo.Asstring:='第'+IntToStr(myPageNo)+'页 共'+IntToStr(myPageTotal)+'页'?
end;

end.
 
1.页面设置中选中“两遍报表”
2.第一遍报表计算出页数放到lList中
3.第二遍报表从lList中屈辱页数显示即可
4.根据Self.FinalPass=false时,第一遍报表,true,第二遍报表
5.你的只需要在PageFooter的事件中处理即可
 
whf:
经过多次测试,终于成功了,谢谢!
 
后退
顶部