`

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一样使用共用的报表组件了

写成函数是

procedure IniReport(var frReport:TfrxReport;var frDbBase: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事件中添加代码:
while FreeSpace > 20 do
ShowBand(Child1)

3.如何打印指定行数后换页?
在master band中OnBeforePrint事件中写代码:
var
vLineCount: integer;
begin
vLineCount := vLineCount + 1;
if vLineCount = 10 then
begin
vLineCount := 0;
NewPage;
end;
end;

4.fastreport中如何把数据显示为百分比
DisplayFormat属性,其中的Kind你设置成fkNumeric,FormatStr
[<frxDBDataset1."sjl">*100 #n%2.2f]%”

5.FastReport如何打印表格式的空行?
var
PageLine: integer; //在現在頁列印到第幾行
PageMaxRow: integer=15; //設定每頁列數
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
PageLine := <Line> mod PageMaxRow;
if (PageLine = 1) and (<line> > 1) then
Engine.newpage;
child1.visible := False;
end;

//Footer1高度設為0
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;
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);

if warehouseno=3 then
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+')');
if IsPreView then
begin
frxReport1.ShowReport;
end
else
begin
frxReport1.PrintOptions.ShowDialog := False;
frxReport1.PrepareReport();
frxReport1.Print;
end;
end;

在FastReport写入代码

procedure ColumnFooter1OnBeforePrint(Sender: TfrxComponent);
var
bVisible: boolean;
begin
bVisible := <Page> = <pageQ>;
Memo12.visible := bVisible;
Memo21.visible := bVisible;
Memo16.visible := bVisible;
Memo14.visible := bVisible;
if not bvisible then
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;

procedure Page1OnBeforePrint(Sender: TfrxComponent);
var
bVisible: boolean;
begin
bVisible := <Page> = <pageQ>;
if not bvisible then
begin
ColumnFooter1.Height:=48;
end
else
begin
ColumnFooter1.Height:=69.35;
end;
end;

begin

end.

7.加入自定义函数

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

frxReport1.AddFunction('function MoneyCn(mmje: Double): String;','Myfunction','小写金额转大写的函数');
frxReport1.OnUserFunction :=frxUserFunction;

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

function TFunComm.frxUserFunction(const MethodName: string;
var Params: Variant): Variant;
begin
if UpperCase(MethodName) = UpperCase('MoneyCn') then
Result := MoneyCn(Params[0]);
end;

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

function MoneyCn(mmje: Double): string;
const
s1: string = '零壹贰叁肆伍陆柒捌玖';
s2: string = '分角元拾佰仟万拾佰仟亿拾佰仟万';

function StrTran(const S, s1, s2: string): string;
begin
Result := StringReplace(S, s1, s2, [rfReplaceAll]);
end;
var
S, dx: string;
i, Len: Integer;
begin
if mmje < 0 then
begin
dx := '负';
mmje := -mmje;
end;
S := Format('%.0f', [mmje * 100]);
Len := Length(S);
for i := 1 to Len do
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, '零零', '零'), '零零',
'零'),
'零亿', '亿'), '零万', '万'), '零元', '元');
if dx = '整' then
Result := '零元整'
else
Result := StrTran(StrTran(dx, '亿万', '亿零'), '零整', '整');
end;

(4) FastReport中引用函数

如:[MoneyCn(<SUM(<frxDBDataset1."M3">,MasterData1,2)>)]

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

[Trim(<frxDBDataset1."C2">)+' '+Trim(<frxDBDataset1."C3">)]

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

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

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

(2) 再右键单击MasterData栏的各个字段,选中Stretch to Max Height

即可

10.在Delphi中定义数据字段

var

frxMemo: TfrxMemoView;

if frxMemo <> nil then
begin
frxMemo.AllowExpressions := True;
frxMemo.Memo.Text := '[SUM(<frxDBDataset1."FDHJ' + IntToStr(i) + 'SL">,MasterData1)]';
end;

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

在FastReport的脚本中写入:

var
GPage,GIndex,FGIndex:integer;
PageList:array of integer;

procedure PageFooter1OnBeforePrint(Sender: TfrxComponent);
begin
GPage := GPage + 1;
FGIndex :=0;
end;

procedure Page1OnBeforePrint(Sender: TfrxComponent);
begin
GPage :=1;
end;

procedure GroupFooter1OnBeforePrint(Sender: TfrxComponent);
begin
if Engine.FinalPass then //二次遍历时增加分组索引
FGIndex := FGIndex + 1
else
begin
setLength(PageList,GIndex + 1);
PageList[GIndex] := GPage; //存放分组的总页数
GIndex := GIndex + 1;
end;
GPage := 0;
end;

procedure Memo6OnBeforePrint(Sender: TfrxComponent);
begin
if not Engine.FinalPass then exit;
Memo6.Lines[0] := '总页号:'+IntToStr(PageList[FGIndex]);//Memo6为总页数
end;

begin

end.

分页号的memo中写入

分页号:[GPage]

12.如果分组头要每页都显示,则在GroupHeader1的右键中选择Start New Page,Keep Together,Reprint on New Page,Reset Page Numbers

分享到:
评论

相关推荐

    Fastreport 常见问题汇总与解答

    FastReport常见的几个问题 1.FastReport中如何共用TFrxreport及TfrxDBDataSet 2.如何打印空白处? 3.如何打印指定行数后换页? 4.fastreport中如何把数据显示为百分比 5.FastReport如何打印表格式的空行? 6.在...

    FastReport .net 中文详细教程及Demo

    这个指南让你熟悉报表设计器和了解报表设计的基本概念(各种区域,数据源,二次表,等等)。...FastReport是一个已经拥有三年历史的非常成熟的报表设计器,成长使它拥有其它Delphi报表设计器所不能相比的诸多先进特性。

    FastReport中文详细教程

    这个指南让你熟悉报表设计器和了解报表设计的基本概念(各种区域,数据源,二次表,等等)。...FastReport是一个已经拥有三年历史的非常成熟的报表设计器,成长使它拥有其它Delphi报表设计器所不能相比的诸多先进特性。

    FastReport问题集

    A: 有几个方法可以实现它. 第一是使用全局对象 frVariables (在 FR_Class 单元中被定义): frVariables[‘My variable‘] := 10; 这段代码创建了一个名称为“My variable”,值为 10 的变量。这是最好的传输固定...

    C#使用FastReport.Net

    如何直接在FastReport.Net中使用C#现有的记录集,而不需报表去查询浪费时间和...我的东东对FastReport.Net进行封装了一下,仅需调用几个函数,打印、预览一切就是那么简单。上面有补充说明,内有例程,请大家下载一下。

    FastReport开发指南

    你可以发现FastReport有一个非常吸引人的用户界面,使用最新的用户界面组件,例如可停靠的工具栏。你的最终用户将会非常愿意使用这个设计器,只需使用鼠标就可以创建大多数报表。 FastReport是名副其实的快速报表:...

    fastreport for xe10(delphi)

    安装过程我只用了里面的几个文件夹,一、运行‘安装包’里的文件安装;二、用FastReport文件夹覆盖安装完的文件夹内容(我的位置是C:\Program Files (x86)\FastReports\FastReport 5);三、按readme.txt中如下说的...

    FastReport 用户使用手册

    它包含有几个工具栏,并且工具栏可以停靠镶嵌在任何你想停靠的地方,并随设计器其他配置属性保存在了一个.Ini文件中,当再次打开时,恢复设计器的配置属性。 为了提供给用户运行期设计报表的功能,应该再添加...

    FastReport中文开发指南

    你可以发现FastReport有一个非常吸引人的用户界面,使用最新的用户界面组件,例如可停靠的工具栏。你的最终用户将会非常愿意使用这个设计器,只需使用鼠标就可以创建大多数报表。 FastReport是名副其实的快速报表:...

    FastReport Professtional 5.6.2 Full Source for 10.2 Tokyo

    仔细阅读install.txt中最后一个安装方法V,和Source\FireDAC文件夹下的readme.txt ... FastReport包括几个包, 分为运行时和设计时部分。设计时包在包名中有“dcl”前缀。每个包都有一个数字,对应于Delphi版本。

    FastReport扩展(二维码,缩进文本框)

    FastRerport扩展二维码,缩进文本框,只需在工程中添加几个UNIT就可以实现,无需改源代码

    FastReport Professtional 5.4.6 full source.rar

    这个版本在实际项目用了好几年了。做报表首选, 是源码版完整版, 有DEMO, 非常好用。 5.4.5 - Fixed export to PDF for FCharSpacing &lt;&gt; 0 and HAlign = haBlock - Fixed exporting of Unicode ...

    FastReport 4.0 for bcb5

    安装使用非常方便,安装顺利的话,会产生frxClass.hpp、frxDBSet.hpp、frxDBSet.hpp几个头文件,而不会产生FR_Class.hpp、FR_DBSet.hpp、FR_DSet.hpp这几个文件

    基于FastReport编写的web打印控件,实现打印模版在线设计.rar

    这些年的工作当中,最早是在8年前接触到FastReport这个报表工具,从名字上来看,直译过来就是快速报表,正所谓天下武功,唯快不破,FastReport报表早些年确实是制作报表的不二之选,8年前的工作中,涉入到了医疗行业...

    Delphi XE2 FastReport 补丁 LibD16.zip

    尝试了好几次都不行。网上查阅了一下,解决办法如下: 1.退出delphi xe2 2.下载http://www.fast-report.com/pbc_download/LibD16.zip,解压,覆盖fastreport安装目录\LibD16\下同名文件,即可。 纯搬运,免费了,...

    Delphi XE5 for Android

    Delphi XE5 出来了,支持Android的开发,试用了一下,有几个问题: 1、只支持ARM7的设备,不支持Inter设备。手上刚好有一个华硕K004,很遗憾用不上,只能用手机试了。 2、要支持联机调试必须安装USB驱动,但一般设备...

    Delphi ShowProgress自定义的进度条和消息提示窗口单元.rar

     该单元提供以下几个过程用于显示动态提示窗体:  ShowProgress - 显示进度条窗体  HideProgress - 隐藏进度条窗体  UpdateProgress - 更新当前进度  UpdateProgressTitle - 更新窗体标题  使用方法:在需要...

    Silverlight企业应用框架(Richwork.framework 1.1.0.1)正式版本

    数据库太大了,在原来的基础上增加了几个字段而已。 1)实现了报表功能,报表设计器。实现采用FastReport.net 2)稍微完整MVVM的代码绑定和例子,完善权限和绑定问题 3) 此代码仅作研究之用,不可以直接用。 4)...

    眼镜行业财务进销存后台管理代码

    该程序是作者和几个同事共同开发,已经在2004年底投入一家大型眼镜连锁机构使用,适用于局域网和internet. 程序是在DELPHI6.0下调试通过.使用MIDAS技术的三层架构,服务器为无状态模式;所使用的第三方控件包括:...

    DspaceSoft 进销存交流版

    BUG很多,功能也不齐全,不过对初学...基本是没有用到第三方控件,有几个报表用到了FastReport,后来实在抽不出时间,所以只做了几个报表,还请见谅!请珍惜作者的劳动果实,仅供学习!超级用户:dspace密码:dspace

Global site tag (gtag.js) - Google Analytics