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

目录:

1. 问题描述编辑

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

2. 实现思路编辑

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

3. 示例编辑

3.1 增加数据集
新建工作簿,增加数据集ds1,SQL语句为:SELECT * FROM 订单
再增加一个数据集ds2,SQL语句为:SELECT * FROM 订单明细
3.2 表样设计
按照下图所示设置表样,并将对应的数据列拖入到对应的单元格中:
在H12单元格中填入公式:=C12 * D12 * (1 - E12)
在D8单元格中填入公式:=round(sum(H12) + B6,2)
注:sum(H12) + B6 表示应付金额为数量*进价*(1-折扣),round(sum(H12) + B6,2)表示应付金额保留两位小数,round函数详细解释请参考Round函数文档。
将B4,D4,F4以及A12等单元格的单元格属性增数据字典设置
单元格  数据库表  实际值    显示值
  B4  客户  客户ID  公司名称
  D4  雇员  雇员ID  姓名
  F4  运货商  运货商ID  公司名称
  A12  产品  产品  产品名称
以B4为例:

222
3.3 参数设置
点击模板>模板参数,增加一个参数名为ID的报表参数,默认值为10001。
222

在参数布局界面生成相应控件,设置控件类型为下拉框。
然后属性面板控件设置>数据字典设置下拉框的数据表为订单,实际值和显示值均为:订单ID。
3.4 过滤条件设置
给A3设置过滤条件,过滤为订单ID等于参数$ID。
222


同时给A12设置过滤条件,过滤为订单ID等于单元格A3。
222

3.5 单元格父格设置
将B4,B6,B8的左父格均设置为A3。
222

3.6 行高列宽设置
将A3的行高与H12的列宽隐藏
3.7 单元格编辑属性设置
下拉框
设置B4,D4,F4,A12等控件为下拉框控件,其数据字典都选择数据库表,选择对应的实际值与显示值。
复选框
设置F8的控件类型为复选框。
数字
设置B6,B12,C12,D8,D12,E12的控件类型为数字型。
文本型
设置B14,D6和F6的控件类型为文本型。
按钮
设置F12和G12的控件类型分别为插入行以及删除行按钮,其指定单元格都为A12
3.8 报表填报属性设置
按照下图所示给报表增加两个内置SQL
内置SQL1:
222

内置SQL2:
222

3.9 效果查看
点击填报预览,查询订单号为10001的数据,效果如下:
222

修改子表,修改数量与进价,点击提交,提示成功。刷新浏览器,再选择10001,可以看到数据已经改变,如下图:
222

在线查看模板效果请点击master-sub.cpt
已完成的模板,可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Form\MultiFormReport\主从填报表.cpt

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

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