历史版本5 :主从表填报 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 问题描述编辑

如下图通过单个报表实现主子表的业务逻辑,上面为订单信息,数据来自订单表;下面是该订单的明细,数据来自于订单明细表,通过订单id进行关联。
修改上方订单信息及明细数据时,数据将分别回填至对应的数据表中。
像这样数据来自于多个数据源,填报时数据回填到多个表中的报表,我们称之为多源填报表。

2. 实现思路编辑

首先通过设置过滤条件,将子表与主表关联起来,然后通过定义多个内置sql将数据回填到不同的数据表中。

3. 示例编辑

3.1 增加数据集
新建工作簿,增加数据集ds1,SQL语句为:SELECT * FROM [订单]
再增加一个数据集ds2,SQL语句为:SELECT * FROM [订单明细]
3.2 表样设计
按照下图所示设置表样,并将对应的数据列拖入到对应的单元格中:
在D8单元格中填入公式:=round(sum(H12) + B6,2)
注:公式的意义在于应付金额为数量*进价*(1-折扣),为什么要使用round函数可查看Round函数章节。
在H12单元格中填入公式:=C12 * D12 * (1 - E12)
给B4,D4,F4以及A12单元格增加数据字典设置。
3.3 参数设置
点击模板>报表参数,增加一个参数名为ID的报表参数,默认值为10001。
3.4 过滤条件设置
给A3设置过滤条件,过滤为订单ID等于参数$ID。
3.5 行高列宽设置
将A3的行高与H12的列宽隐藏
3.6 单元格编辑属性设置
  • 下拉框
设置B4,D4,F4,A12为下拉框,其数据字典都选择数据库表,选择对应的实际值与显示值。
  • 数字
设置B6,B12,C12,D12,E12的控件类型为数字型。
  • 文本型
设置D6和F6的控件类型为文本型。
  • 按钮
设置F12和G12的控件类型分别为插入行以及删除行按钮,其指定单元格都为A12。
3.7 报表填报属性设置
按照下图所示给报表增加两个内置SQL。
内置SQL1:
内置SQL2
3.8 效果查看
点击填报预览,查询订单号为10001的数据,效果如下:
修改子表,修改数量与进价,点击提交,提示成功。刷新浏览器,再选择10001,可以看到数据已经改变,如下图:
在线查看模板效果请点击master-sub.cpt
已完成的模板,可参见:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Form\MultiFormReport\master-sub.cpt

4. 多个内置SQL的执行顺序编辑

若一个填报模板中定义了多个内置SQL,其执行顺序会按照定义的顺序执行,若在执行其中一个内置SQL时出错,会停止下面内置SQL的执行并对已执行的内置SQL进行回滚,回滚具体请查看报表填报属性