另類D6+fastreport3分組報表

作者:DengGuo
通常在用fastreport作分組報表時,我們想到的是用groupheader+masterdata+groupfooter,但是在實現分組頁次時總是不能得到各分組頁次與總頁,類似
-----------------------------------------------------------
按公司名分組後,A公司的報表有3頁,B公司的報表有5 頁,然後顯示頁次時A公司那給就顯示為 
1 OF 3
2 OF 3
....
B公司顯示為
1 OF 5
2 OF 5
.......
-----------------------------------------------------------

  在FR2.54以前的版本,為這個頁次問題想了不少辦法,都未能成功,現在在FR3下終於實現了!
  首先,我們設定好D6中的相應控件,這裡就不多說,如下圖:
  
在打印預預覽的按鈕事件中編寫如下代碼:

procedure TForm1.suiButton3Click(Sender: TObject);
Var i:integer;
begin
  i:=0;
  Query3.SQL.Clear;
  Query3.SQL.Text:='select ref_no from slshph where ref_no between '''+suiEdit1.Text+'''  and '''+suiEdit2.Text+''' order by ref_no desc';
  Query3.Open;
  while not Query3.Eof do
  begin
  i:=i+1;
  query1.close;
  query1.SQL.Clear;
  query1.SQL.Text:='............................' ;
  query1.open;
    if i=1 then
    frxReport1.PrepareReport //產生第一個報表
    else
    frxReport1.PrepareReport(False); //產生第二至n個報表
    Query3.Next;
  end ;
  frxReport1.ShowPreparedReport; //顯示已產生的報表
  Query3.Close;
end;


在報表設計器中,主要要解決2 次報表引起OUTLINE顯示兩次分組目錄的問題,所以要在ONREPORTSTOP中寫代碼,如下:

注意:頁次要用[Page] of [TotalPages] 而不是 [Page#] of [TotalPages#]

procedure frxReport1OnStopReport(Sender: TfrxComponent);
begin
  outline.additem(<frxDBDataset1."ref_no">);
  outline.levelup;
end;


說明:這時主要用了一個循環開啟數據庫和FR3的報表預讀來實現的,這樣在顯示報表的時候,速度會有所降低,另外一個問題就是點擊OUTLINE中的目錄時,會跳至本組報表的最尾處....以下為效果圖:


 


网友回复
 
网友: DengGuo  于:2005-4-26  回复道:
  現在解決了OUTLNE中目錄點擊後的問題
將報表設計器中的事件代碼修改即可:

procedure frxReport1OnStopReport(Sender: TfrxComponent);
begin
  outline.additem(<frxDBDataset1."ref_no">);
  outline.levelup;
end;

改成:

procedure GroupHeader1OnBeforePrint(Sender: TfrxComponent);
begin
 if (<page>=1) and (Engine.Finalpass=true) then //當分組的第一頁和2次報表完成
  outline.additem(<frxDBDataset1."ref_no">);
  outline.levelup;
end;


网友: DengGuo  于:2005-4-26  回复道:
  提供實例下載:
uploadimg/fr3demo.rar

Test_FastReportPrint4万能fr3报表查看器 自设计中支持按文本格式查看fr3报表, 前提是报表中最好不要有图片,否则打开会无响应或反应很慢 测试fr3文件2M左右反应很慢 procedure TFrm_BarCode.FallBitBtn6Click(Sender: TObject); begin //默认设计 MyTmsPrintDropBtn1.FrxReport.DesignPreviewPage end; procedure TFrm_BarCode.FallBitBtn3Click(Sender: TObject); begin //自写设计 MyTmsPrintDropBtn1.PrintRpt_DesignerW(FrptPrintIDX,Frpttitle,FrptFile); end; procedure TFrm_BarCode.FallBitBtn5Click(Sender: TObject); begin //预览 MyTmsPrintDropBtn1.PrintRpt_PreviewNoDialog(FrptPrintIDX,Frpttitle,FrptFile); end; procedure TFrm_BarCode.FallBitBtn4Click(Sender: TObject); begin //无对话框打印 MyTmsPrintDropBtn1.PrintRpt_PrintNow(FrptPrintIDX,Frpttitle,FrptFile); end; procedure TFrm_BarCode.MyTmsPrintDropBtn1BeforeDropMenuClick( Sender: TMenuItem; ItemsTag: Integer; var CanClick: Boolean; var Memo: String); begin MyTmsPrintDropBtn1.RptFileName:=''; end; procedure TFrm_BarCode.AdvStringGrid1GetEditorType(Sender: TObject; ACol, ARow: Integer; var AEditor: TEditorType); begin if (ACol=0 ) and (ARow=0) then begin AEditor:=edComboList; end; end; procedure TFrm_BarCode.MyTmsPrintDropBtn2BeforeDropMenuClick( Sender: TMenuItem; ItemsTag: Integer; var CanClick: Boolean; var Memo: String); begin with MyTmsPrintDropBtn1 do begin RptPrintIDX:=0; RptPrtTitle:='xxxxxx'; RptFileName:=gsPath+'data\test.fr3' end; end; procedure TFrm_BarCode.FallBitBtn1Click(Sender: TObject); begin MyTmsPrintDropBtn1.FrxReport.PreviewPages.Export(frxXLSExport1) ; end; procedure TFrm_BarCode.FallBitBtn8Click(Sender: TObject); begin //初始化数据 with MyTmsPrintDropBtn1 do begin RptPrintIDX:=StrToInt(Trim(lbe_idx.Text)); //打印机 RptPrtTitle:=Trim(lbe_title.Text); //打印时显示的文件名 RptFileName:=Trim(lbe_file.Text) //打印模板 end; end; end.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值