1. 概述
嵌入式主子报表特点是在单元格中嵌入独立的报表模板,嵌入的模板称为「子报表」,嵌入子报表后的整体称为「主报表」。
各子报表格式可以不对齐,子表与主表的格式也可以不对齐,子报表能够获取主表中的值。如下图员工销售一览表:
2. 示例
2.1 制作主报表
2.1.1 设计表格
新建普通报表,设计主表如下图所示:
注:根据实际情况将行 3 和行 5 的行高增高,否则只能显示部分数据。
2.1.2 添加参数
点击「模板>模板参数」,在主表中添加一个参数,双击参数名修改为「销售员」,通过参数查询某一个销售员的个人信息及订单信息。
2.1.3 添加下拉框控件
点击编辑参数界面,点击「全部添加」,在参数面板上生成控件,参数控件选择「下拉框控件」,最后调整组件位置,步骤如下图所示:
2.1.4 设置控件默认值
1)选中「下拉框控件」,控件名称修改为「销售员」,控件值默认为字符串「张颖」,即默认查询张颖的个人信息及订单信息。
2)点击数据字典设置,选择数据库 FRDemo 中的雇员表,实际值为「雇员 ID」 列,显示值为「姓名」列,此处使用列序号分别为 1 列和 2 列。
步骤如下图所示:
2.2 制作子报表 1
2.2.1 准备数据
新建普通报表,新建数据库查询 ds1,SQL 查询语句为:SELECT * FROM 雇员 where 雇员ID ='${ID}'。通过参数 ID 查询出对应销售员的个人信息。
2.2.2 设计表格
设计表格如下图所示:
完成后保存报表。
2.3 制作子报表 2
2.3.1 准备数据
新建普通报表,新建数据库查询 ds1,SQL 查询语句为:SELECT * FROM 订单 where 雇员ID = ${销售员} and strftime('%Y',订购日期)='2011'。通过参数「销售员」查询出对应销售员订购日期在 2011 年的订单信息。
2.3.2 设计表格
设计表格如下图所示:
完成后保存报表。
2.4 嵌入子报表
1)打开主报表,右击主报表 B3 单元格,选择「单元格元素>插入子报表」,如下图所示:
2)在弹出的编辑子报表对话框中,选择子报表 1 所在路径。添加参数 ID (子表中的参数名称),值为公式 $销售员,将主表的销售员参数值传递给子表 1 的 ID 参数,如下图所示:
3)右击主报表 B5 单元格,选择「单元格元素>插入子报表」,在弹出的编辑子报表对话框中,选择子报表 2 所在路径。
由于子报表 2 的参数名与主报表中的参数名相同,此时可以不设置传递参数,直接选择继承报表的参数,如下图所示:
2.5 效果预览
保存报表,点击「分页预览」,效果如下图所示:
注:移动端不支持。
3. 模板下载
已完成模板可参见:
主报表:%FR_HOME%\webroot\WEB-INF\reportlets\doc\Advanced\MasterReport\嵌入式主子表主报表.cpt
子报表1:%FR_HOME%\webroot\WEB-INF\reportlets\doc\Advanced\MasterReport\嵌入式主子表子报表1.cpt
子报表2:%FR_HOME%\webroot\WEB-INF\reportlets\doc\Advanced\MasterReport\嵌入式主子表子报表2.cpt
点击下载模板:
4. 注意事项
4.1 嵌入的子报表与主报表单元格边界问题
4.1.1 问题描述
当在主报表中嵌入子报表的单元格设置边框时,预览效果中子报表与单元格的左边界无法对齐,如下图所示:
4.1.2 原因分析
因为单元格的「单元格属性>样式>对齐」默认左右会自动缩进,所以预览时,嵌入的子报表与主报表单元格的左边界无法对齐。如下图所示:
4.1.3 解决方案
将「单元格属性>样式>对齐」左右缩进改为 0 即可。效果如下图所示:
注:不支持子报表自动填充整个单元格。