FastReport几个问题解决.docx

上传人:b****6 文档编号:7141440 上传时间:2023-01-21 格式:DOCX 页数:7 大小:17.56KB
下载 相关 举报
FastReport几个问题解决.docx_第1页
第1页 / 共7页
FastReport几个问题解决.docx_第2页
第2页 / 共7页
FastReport几个问题解决.docx_第3页
第3页 / 共7页
FastReport几个问题解决.docx_第4页
第4页 / 共7页
FastReport几个问题解决.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

FastReport几个问题解决.docx

《FastReport几个问题解决.docx》由会员分享,可在线阅读,更多相关《FastReport几个问题解决.docx(7页珍藏版)》请在冰豆网上搜索。

FastReport几个问题解决.docx

FastReport几个问题解决

FastReport几个问题

1.FastReport中如何共用TFrxreport及TfrxDBDataSet

一个程序中,不管多么大的程序,只要打印或预览时是模式的,则完全可以共用一个TFrxreport

变量及几个TfrxDBDataSet。

只不过,要注意完成一个报表程序的步骤,主要是下面几步

1)清除报表,得到一个全新的报表内容。

Frxreport1.clear。

2)设置要使用的TfrxDBDataSet的别名,如果不需要可以省略这一步,但一般最好不同的报表用不

同的别名。

注意这一步要在加载报表文件之前,因为一般设计报表文件时已经包含了别名信息。

frxDBDataSet1.UserName:

=别名;

3)加载报表或动态建立一个TfrxReportPage。

Frxreport1.LoadFromFile(报表文件的完整文件名);

4)关联TfrxDBDataSet与TDataset,并设置要使用哪些TfrxDBDataSet。

Frxreport1.DataSets.Clear;//先清除原来的数据集

frxDBDataSet1.DataSet:

=dataset1;//关联Fastreport的组件与TDataset数据集。

Frxreport1.DataSets.Add(frxDBDataSet1);//加载关联好的TfrxDBDataSet到报表中。

经过这几步后,就可以像单独使用一个Tfrxreport一样使用共用的报表组件了

 

写成函数是

procedureIniReport(varfrReport:

TfrxReport;varfrDbBase:

TfrxDBDataset;ReportName:

string;qry:

TADOQuery);

begin

  frReport.clear;

  frReport.LoadFromFile(ReportName);

  frReport.DataSets.Clear;

  frDbBase.DataSet:

=qry;

  frReport.DataSets.Add(frDbBase);

end;

 

2.如何打印空白处?

在打印报表的Band处的OnBeforePrint事件中添加代码:

whileFreeSpace>20do

 ShowBand(Child1)

 

3.如何打印指定行数后换页?

在masterband中OnBeforePrint事件中写代码:

var

  vLineCount:

integer;

begin

  vLineCount:

=vLineCount+1;

  ifvLineCount=10then

  begin

     vLineCount:

=0;

     NewPage;

  end;

end;

 

4.fastreport中如何把数据显示为百分比

DisplayFormat属性,其中的Kind你设置成fkNumeric,FormatStr

[*100#n%2.2f]%”

 

5.FastReport如何打印表格式的空行?

var

  PageLine:

integer;      //在現在頁列印到第幾行

  PageMaxRow:

integer=15; //設定每頁列數

  procedureMasterData1OnBeforePrint(Sender:

TfrxComponent);

  begin

      PageLine:

=modPageMaxRow;

      if(PageLine=1)and(>1)then

         Engine.newpage;

      child1.visible:

=False;

  end;

 

 //Footer1高度設為0

  procedureFooter1OnBeforePrint(Sender:

TfrxComponent);

 var

     i:

integer;

 begin

     i:

=iif(PageLine=0,PageMaxRow,PageLine);

     child1.visible:

=True;

      whilei

     begin

         i:

=i+1;

         Engine.ShowBand(Child1); //印空白表格

     end;

      child1.visible:

=False;

   end;

begin

end.

 

6.在首页打印本页小计,最后一页打印本页小计和合计(如果只有一页,则打印本页小计和合计)

 frxReport1.PrepareReport();

 frxReport1.Variables['pageQ']:

=pageQ;

 frxReport1.Variables['hander']:

=QuotedStr(hander);

 frxReport1.Variables['doubleline']:

=QuotedStr(StringOfChar('=',Length(hander)+12));

 whName:

='设备资产';

 frxReport1.Variables['p1']:

=QuotedStr('仓库:

'+whName);

 frxReport1.Variables['p9']:

=QuotedStr('领用科室:

'+DepName);

 frxReport1.Variables['p2']:

=QuotedStr('日期:

'+ywDate);

 frxReport1.Variables['p3']:

=QuotedStr('单据号:

'+VoucherNo);

 ifwarehouseno=3then

 begin

   frxReport1.Variables['p8']:

=QuotedStr('经手:

');

   frxReport1.Variables['p4']:

=QuotedStr('保管:

');

   frxReport1.Variables['p5']:

=QuotedStr('负责人:

');

 end

 else

 begin

   frxReport1.Variables['p8']:

=QuotedStr('采购:

');

   frxReport1.Variables['p4']:

=QuotedStr('验收:

');

   frxReport1.Variables['p5']:

=QuotedStr('科室签字:

');

 end;

 frxReport1.Variables['p6']:

=QuotedStr('操作员:

'+Operator);

 frxReport1.Variables['p7']:

=QuotedStr('打印日期:

'+prDate);

 frxReport1.Variables['p10']:

=QuotedStr('('+ShareGlobalVar.GlobalVar.GetUnitID+')');

 ifIsPreViewthen

 begin

   frxReport1.ShowReport;

 end

 else

 begin

   frxReport1.PrintOptions.ShowDialog:

=False;

   frxReport1.PrepareReport();

   frxReport1.Print;

 end;

end;

 

在FastReport写入代码

procedureColumnFooter1OnBeforePrint(Sender:

TfrxComponent);

var

 bVisible:

boolean;                                                        

begin

 bVisible:

==;

 Memo12.visible:

=bVisible;

 Memo21.visible:

=bVisible;

 Memo16.visible:

=bVisible;

 Memo14.visible:

=bVisible;     

 ifnotbvisiblethen

 begin             

   p8.Top:

=27;

   p7.Top:

=27;       

   p4.Top:

= 27;

   p5.Top:

= 27;

   p6.Top:

= 27;       

 end

 else

 begin

   p8.Top:

=49.46;

   p7.Top:

=49.46;       

   p4.Top:

= 49.46;

   p5.Top:

= 49.46;

   p6.Top:

= 49.46;     

 end;                     

end;

procedurePage1OnBeforePrint(Sender:

TfrxComponent);

var

 bVisible:

boolean;                                                        

begin

 bVisible:

==;

 ifnotbvisiblethen

 begin             

   ColumnFooter1.Height:

=48;

 end

 else

 begin

   ColumnFooter1.Height:

=69.35;

  end;

end;

begin

end.

 

7.加入自定义函数

(1)在delphi程序中定义函数

 frxReport1.AddFunction('functionMoneyCn(mmje:

Double):

String;','Myfunction','小写金额转大写的函数');

 frxReport1.OnUserFunction:

=frxUserFunction;

(2)在frxUserFunction事件中加载函数

functionTFunComm.frxUserFunction(constMethodName:

string;

 varParams:

Variant):

Variant;

begin

 ifUpperCase(MethodName)=UpperCase('MoneyCn')then

   Result:

=MoneyCn(Params[0]);

end;

(3)实现函数(数字转大写)

functionMoneyCn(mmje:

Double):

string;

const

 s1:

string='零壹贰叁肆伍陆柒捌玖';

 s2:

string='分角元拾佰仟万拾佰仟亿拾佰仟万';

 functionStrTran(constS,s1,s2:

string):

string;

 begin

   Result:

=StringReplace(S,s1,s2,[rfReplaceAll]);

 end;

var

 S,dx:

string;

 i,Len:

Integer;

begin

 ifmmje<0then

 begin

   dx:

='负';

   mmje:

=-mmje;

 end;

 S:

=Format('%.0f',[mmje*100]);

 Len:

=Length(S);

 fori:

=1toLendo

   dx:

=dx+Copy(s1,(Ord(S[i])-Ord('0'))*2+1,2)+Copy(s2,(Len-i)

     *2+1,2);

 dx:

=StrTran(StrTran(StrTran(StrTran(StrTran(dx,'零仟','零'),'零佰',

   '零'),

   '零拾','零'),'零角','零'),'零分','整');

 dx:

=StrTran(StrTran(StrTran(StrTran(StrTran(dx,'零零','零'),'零零',

   '零'),

   '零亿','亿'),'零万','万'),'零元','元');

 ifdx='整'then

   Result:

='零元整'

 else

   Result:

=StrTran(StrTran(dx,'亿万','亿零'),'零整','整');

end;

(4)FastReport中引用函数

如:

[MoneyCn(,MasterData1,2)>)]

 

8.在FastReport中将两字段连接起来(用脚本实现)

 [Trim()+''+Trim()]

 

9.数据栏的动态调试设置

MasterData根据数据自动设置其高度

(1)首先设置MasterData栏的Stretch为True

 

(2) 再右键单击MasterData栏的各个字段,选中StretchtoMaxHeight

即可

 

10.在Delphi中定义数据字段

 var

    frxMemo:

TfrxMemoView;

 iffrxMemo<>nilthen

 begin

    frxMemo.AllowExpressions:

=True;

     frxMemo.Memo.Text:

='[SUM(,MasterData1)]';

  end;

 

11.分组时打印页号,如1/1,2/1,1/2,2/2,3/2,4/2

在FastReport的脚本中写入:

var

 GPage,GIndex,FGIndex:

integer;

 PageList:

arrayofinteger;                                                             

 

procedurePageFooter1OnBeforePrint(Sender:

TfrxComponent);

begin

 GPage:

=GPage+1;

 FGIndex:

=0;                                

end;

 

procedurePage1OnBeforePrint(Sender:

TfrxComponent);

begin

 GPage:

=1;                                       

end;

 

procedureGroupFooter1OnBeforePrint(Sender:

TfrxComponent);

begin

 ifEngine.FinalPassthen //二次遍历时增加分组索引

   FGIndex:

=FGIndex+1

 else

 begin

   setLength(PageList,GIndex+1);                                                                   

   PageList[GIndex]:

=GPage;//存放分组的总页数         

   GIndex:

=GIndex+1;

 end;

 GPage:

=0;     

end;

 

procedureMemo6OnBeforePrint(Sender:

TfrxComponent);

begin

 ifnotEngine.FinalPassthenexit;

 Memo6.Lines[0]:

='总页号:

'+IntToStr(PageList[FGIndex]);   //Memo6为总页数   

end;

begin

end.

 

分页号的memo中写入

分页号:

[GPage]

 

12.如果分组头要每页都显示,则在GroupHeader1的右键中选择StartNewPage,KeepTogether,ReprintonNewPage,ResetPageNumbers

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1