FastReport几个问题解决.docx
- 文档编号:7141440
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:7
- 大小:17.56KB
FastReport几个问题解决.docx
《FastReport几个问题解决.docx》由会员分享,可在线阅读,更多相关《FastReport几个问题解决.docx(7页珍藏版)》请在冰豆网上搜索。
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
[
5.FastReport如何打印表格式的空行?
var
PageLine:
integer; //在現在頁列印到第幾行
PageMaxRow:
integer=15; //設定每頁列數
procedureMasterData1OnBeforePrint(Sender:
TfrxComponent);
begin
PageLine:
=
if(PageLine=1)and(
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( 8.在FastReport中将两字段连接起来(用脚本实现) [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( 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FastReport 几个问题 解决