主子报表制作方法详解

楼主
欢迎找我唠嗑

报表应用中,常常可以看到,某个报表包含了一片或者多片区域,每一片区域都针对同一个对象,但是各区域又各自展示不同的主题,像这样的报表我们称之为主子报表。其中每一小片区域称为子报表,子报表构成的报表整体称为主报表。

对于主子报表,FineReport主要有两种实现方法,即表单式主子表嵌入式主子表


表单式主子表

单表式主子报表特点是用单个报表实现主子表的业务逻辑。一般包含多个数据集,通常由自由格式部分及列表格式部分,且为一对多,父与子的关系,如下图上方为订单信息,下方这个订单的明细:

这样的主子报表制作比较方便,且可以用于填报,因此称之为表单式主子报表。


表单式主子表制作示例

1、 打开报表

打开报表%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Primary\FreeReport\Free.cpt。在该报表基础上来实现表单式主子表。


2、 新增数据源

新增数据集ds2 ,SQL语句为SELECT * FROM [订单明细]。


3、 表样设计

在原报表基础上,添加子表区域:


4、 绑定数据列

将子表字段拖入对应单元格内,并作相应的设置。


单元格        数据集        数据列        属性
B9        ds2        产品ID        列表,从上到下扩展,居中,左父格为:C2,其余默认
C9        ds2        单价        从上到下扩展,居中,其余默认
D9        ds2        数量        从左到右扩展,居中,其余默认
E9        ds2        折扣        从左到右扩展,居中,其余默认

单元格A9输入公式:=&B9,左父格为B9,给B9单元格扩展出来的数据编号;

单元格F9输入公式:=C9*D9*(1-E9),表示求产品的金额;

给每个订单进行合计,A10单元格设置父格为C2,并在F10中输入公式:=sum(F9)。


5、 建立主子表的关联

主子表有着一个相同的数据列:订单ID,可通过过滤将两个表中的订单ID关联起来,双击B9增加过滤条件:订单ID等于’C2’。


6、 设置分页

此时主子表便制作好了,为了使报表可读性更强,我们设置分页,使得每页显示一个订单信息。右击A10单元格,选择其他属性>行后分页。

保存模板。点击设计器中的分页预览,效果如上。


已完成的模板,可参见%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Advanced\MasterReport\Master.cpt


嵌入式主子表

嵌入式主子报表特点是在单元格中嵌入独立的报表模板,嵌入的模板称为子报表,嵌入子报表后的整体称为主报表。
各子报表间格式可以不对齐,子表与主表的格式也可以不对齐,子报表能够获取主表中的值。如下图员工销售一览表:


嵌入式主子表制作示例

1 制作主报表

如下图设计主表:

添加参数

在主表中定义一个报表参数,参数名为销售员,通过参数查询某一个销售员的个人信息及订单信息。

使用默认的参数界面,销售员参数控件选择下拉框,实际值为雇员表中的雇员ID,显示值为对应的姓名。具体可查看参数定义与参数面板制作章节。


2 添加不同参数的子报表

子报表sub_1.cpt说明

子报表1:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Advanced\MasterReport\sub_1.cpt。
该子表中通过参数“ID”查询出对应销售员的个人信息。SQL语句为:SELECT * FROM 雇员 where 雇员ID = ${ID},表样为:

在主表中插入子表1

右击主表B3单元格,单元格元素>插入子报表,弹出编辑子报表对话框,选择子表1所在路径;

添加参数ID(子表中的参数名称),值使用公式$销售员,将主表的销售员参数值传递给子表1的ID参数。


3 添加相同参数的子报表

子报表sub_2.cpt说明

子报表2:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Advanced\MasterReport\sub_2.cpt。

该子表中通过参数“销售员”查询出对应销售员的订单信息。SQL语句为:SELECT * FROM 订单 where 雇员ID = ${销售员},表样为:

在主表中插入子表2

右击主报表D5单元格,单元格元素>插入子报表,弹出编辑子报表对话框,选择子表2所在路径;

由于子表2的参数名与主表中的参数名相同,这时可以不设置传递参数,直接选择继承报表的参数。

保存模板,点击设计器中的分页预览。

已完成模板,可参考:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Advanced\MasterReport\super.cpt。



分享扩散:

沙发
发表于 2015-1-22 20:27:46
1、表单式主子表如果同一列不同行既有纵向扩展也有横向扩展会乱的;
2、嵌入式主子报表虽然可以解决1的问题,但在嵌入式主子报表中子报表不能填报。
板凳
发表于 2015-1-23 07:42:10
很详细,很全面。
地板
发表于 2016-5-25 08:56:04
这个最好都放到帮助文档里面去比较好。
5楼
发表于 2016-5-25 14:56:09
支持11111111111111111111111111111111111111
6楼
发表于 2016-8-18 11:30:39
太棒了
感謝分享
7楼
发表于 2016-11-22 16:04:05
最近在做这个学习测试的时候发现嵌入式子报表的显示有一个问题,就是嵌入式子报表没办法做到宽度自适应,造成了插入到单元格中的子报表没办法显示完全。这个有人能够解决么?
8楼
发表于 2017-10-26 09:19:44
学习了,感谢分享哦
9楼
发表于 2018-4-18 08:10:39
学习了,感谢分享哦
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

8回帖数 1关注人数 8443浏览人数
最后回复于:2018-4-18 08:10

返回顶部 返回列表