FastReport批量打印

https://www.cnblogs.com/m0488/p/3774797.html 麦麦提敏

实战例子 D:\WorkResource\测试用例\主子从报表

9.建立复合报表(批量打印)

 

在某些情况下,需要立刻组织几个报表打印,或者在一个打印预览窗体中封装并呈现几个报表。

 

要执行这些,在FastReport中有些工具能够允许建立一个新的报表附加在一个已经存在的报表上。

 

“TfrxReport.PrepareReport”方法中有一个选项“ClearLasReport”布尔类型参数,默认情况下他等于True,这个参数定义了是否有必要在建立报表时清除

 

前一个报表。下面的方法展示了如何从两个报表中建立一个批量报表:

 

Pascal:

 

frxReport1.LoadFromFile('1.fr3');

 

frxReport1.PrepareReport;

 

frxReport1.LoadFromFile('2.fr3');

 

frxReport1.PrepareReport(False);

 

frxReport1.ShowPreparedReport;

 

 

 

C++:

 

frxReport1->LoadFromFile("1.fr3");

 

frxReport1->PrepareReport(true);

 

frxReport1->LoadFromFile("2.fr3");

 

frxReport1->PrepareReport(false);

 

frxReport1->ShowPreparedReport();

 

我们加载并建立第一个报表,但并没有显示他。然后我们加载第二个报表到同一个TfrxReport对象,并使用“ClearLastReport”参数,让他等于False。这就允许第二个报表

 

附加在先前建立的报表之后。接下来,我们在预览窗口中显示一个完成的报表。

 

9.1 复合报表中的页数

 

你可以使用“Page”,“Page#”,“TotalPages”和“TotalPages#”系统变量显示页数或总页数,在复合报表中,这些变量以下面的方式工作:

 

Page - 当前报表页数

Page# - 批量报表页数

TotalPages - 当前报表总页数(报表必须两遍)

Totalpages# - 批量报表总页数

9.2 合并符合报表页数

 

正如上面所说的,报表设计页中的“PrintOnPrevousPage”方法让你在打印报表的时候使用前一页的剩余空间接合报表。在复合报表中,允许你在前一个报表的最后一页的剩

 

余空间创建一个新的报表。要执行这个,要使能每一个连续报表的第一个设计页“PrintOnPreviousePage”属性[SPAN]

 

》》》》》》》》》》》》》》》》》》》实战

procedure TForm1.Button9Click(Sender: TObject); //批量打印

var

vVou_no :string;

vStr ,vStr1 ,vStr2,vSql : string;

begin

// ADODataSet1.RecNo := StrToInt(LabeledEdit1.Text);

ADODataSet1.Locate('vou_no',LabeledEdit1.Text,[]);

vVou_no := adodataset1.FieldByName('vou_no').AsString;

with adodataset2 do

begin

close;

Parameters.ParamByName('vou_no').Value := vVou_no ;

open;

end;

cxg_mx.ClearItems;

cxg_mx.DataController.CreateAllItems();

cxg_mx.Columns[0].Width := 100;

frxReport1.PrepareReport(True);

 

ADODataSet1.Locate('vou_no',LabeledEdit2.Text,[]);

vVou_no := adodataset1.FieldByName('vou_no').AsString;

with adodataset2 do

begin

close;

Parameters.ParamByName('vou_no').Value := vVou_no ;

open;

end;

cxg_mx.ClearItems;

cxg_mx.DataController.CreateAllItems();

cxg_mx.Columns[0].Width := 100;

//ClearLasReport这个参数定义了是否有必要在建立报表时清除前一个报表

frxReport1.PrepareReport(False);

frxReport1.ShowPreparedReport; //批量打印

end;

 

//选择单据号

{根据选择Y,循环获取选取的单据号,用于批量打印,不能用dataset.first,会清除选择Y}

procedure TForm1.Button6Click(Sender: TObject);

var

Row,RowCurrent,i : Integer;

vDJH:string;

begin

RowCurrent :=cxGridDBTableView1.DataController.FocusedRecordIndex;

with DataModule2.RFDataSet1 do

begin

while not Eof do

begin

Row := cxGridDBTableView1.DataController.FocusedRecordIndex;

if cxGridDBTableView1.ViewData.DataController.Values[Row,0] = 'Y' then

vDJH :=cxGridDBTableView1.ViewData.DataController.Values[Row,6]+'|'+vDJH;

DataModule2.RFDataSet1.Next;

Next;

end;

end;

 

for i:=RowCurrent-1 downto 0 do //RecNo的最小值等于0

begin

if cxGridDBTableView1.ViewData.DataController.Values[i,0] = 'Y' then

vDJH :=cxGridDBTableView1.ViewData.DataController.Values[i,6]+'|'+vDJH;

DataModule2.RFDataSet1.Prior;

end;

ShowMessage(vDJH);

end;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
没有分的请发邮件给我:jacdfb@163.com,qq:505689211 一直也没接触到什么复杂的报表,都是一些简单的报表,在DelphI下使用QuickReport一般也就能满足需要了,由于公司现在需求的变化,对条码扫描提出了新的要求,主要是扫码要包含更多地内容,以前的一维码显然不能完全满足,再说二维码也是一种趋势,故而需要解决二维码的问题,网上搜了一下,方式有多种多样,我花了3天时间找了很多,也尝试了很多。也经历了很多失败!总结一下在Delphi下实现二维码主要有三种方法: 1、使用PtImageRW.dll和PtQREncode.dll动态连接库,使用uQRCode生成二维码图像,如此就可以在报表中予以打印了,具体如何用uQRCode实现绘制二维码,本人水平太低,无法参透;结合QuikReport就可以实现打印二维码了,但此种有一个问题就是不支持中文,如source1(整合到FastReport中也无法实现对中文的支持); 2、还有一种就是生成控件,利用ZINT制作的控件,如source2;此种有个问题就是无法在报表中使用(也许是我不会用),只可在窗体上显示,当然理论上说能在窗体上使用就完全可以用于打印报表了,可问题时我不会,哎,还是技术水平太低。还有一种叫Han-sof 2D Barcodes的控件,我可以安装,但却无法使用,无法生成二维码到图片。可上网搜索一下下载这个控件安装一下,有搞定的与我共享一下。 3、用ZINT整合到FastReport中,也是下面我要叙述的形式:source3。完全可以满足我的需求。 例子实现了对采购入库数据的分组批量打印,加入了二维码的使用,当然实际工作当中制作入库单基本上用不到批量打印的,一般都是一单一打,但在我这里没办法,必须设计这样的功能,历史遗留问题吧,这里也牢骚一下吧! 如做一些延伸,很多的打印都和这个有很多的类似之处,我说的是并不太复杂的应用,至于什么更复杂得我想FS也能搞的定,这里做一个总结是希望对和我一样水平的人提供一些帮助吧,也许现在很多人根本不用Delphi了,权且当作自己的一个笔记吧! *********压缩文件内容如下********************************* 1、fastreport for 2010是我用的,可以正常使用也是例子里用到的4.9版本 2、fastreport5 for delphi7,已经好久不用7了,故也没测试,这是下载到的!测试成功的告诉我一下! 3、fastreport5 for xe8,我朋友测试通过的,也是他发给我的,但在我的xe8下就是不行,可以看到控件,但一运行,就报错,还没时间研究,我记得在装XE8的时候是自带了fastreport5的,但并没有二维码的选项,我是卸载了自带的,然后再安装的,然后出现了一系列的问题,实在没时间,因为大部分程序是在2010下的,还没时间向XE8切换,不知道是不在安装的时候不能安装自带的FS5,我朋友在第一次安装的时候就没有选择,然后手动安装的,效果很好! 有知道fastreport5如何在2010下用的,麻烦指教一下! 4、source1-3,前面有说过了,主要是一些例子,我所总结的三种方法,也不知道对不对! 5、zinBarcode文件里也是一个例子,也是用fastreport,可以比较完美的显示中文fastreport,但二维码不能显示中文,设置成中文即报错。
要在vbenadmin页面和.NET中使用FastReport实现自主设计打印,您需要进行以下步骤: 1. 在.NET中创建一个FastReport模板,可以使用FastReport设计器来创建或者直接编写代码。您可以参考FastReport官方文档来学习如何创建模板。 2. 在vbenadmin页面中引用FastReport.Web组件库,并在需要打印的页面中添加`fr-report-viewer`组件。您可以在`fr-report-viewer`组件中设置报表模板、数据源和参数等信息。 3. 在需要触发打印的事件中,调用`fr-report-viewer`组件的`print`方法来触发打印操作。 下面是一个示例代码: .NET代码: ```csharp using FastReport; using FastReport.Export.Pdf; using System.IO; public void PrintReport() { Report report = new Report(); report.Load("MyReport.frx"); // 加载FastReport模板文件 report.RegisterData(myData, "MyData"); // 注册数据源 report.SetParameterValue("Param1", "value1"); // 设置参数值 PDFExport export = new PDFExport(); using (MemoryStream ms = new MemoryStream()) { report.Prepare(); export.Export(report, ms); ms.Seek(0, SeekOrigin.Begin); byte[] bytes = ms.ToArray(); // 将字节数组返回给前端 } } ``` vbenadmin页面代码: ```html <template> <div> <fr-report-viewer :report="report" :options="options" ref="reportViewer"></fr-report-viewer> <button @click="print">打印</button> </div> </template> <script> import FastReport from "fastreport-web"; import "fastreport-web/dist/fastreport.css"; export default { data() { return { report: new FastReport.Report(), options: { reportUrl: "/api/MyReport", reportTitle: "My Report", reportParams: { param1: "value1", param2: "value2" } } }; }, methods: { print() { this.$refs.reportViewer.print(); } } }; </script> ``` 在上面的示例代码中,我们创建了一个名为`MyReport.frx`的FastReport模板,并且在.NET代码中加载了该模板,并注册了数据源和参数。在vbenadmin页面中,我们使用`fr-report-viewer`组件来展示报表,并在其中设置了报表模板、数据源和参数等信息。当用户点击打印按钮时,我们调用了`fr-report-viewer`组件的`print`方法来触发打印操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值