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

目录:

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
也可以选择列序号确定实际值与显示值,如下图所示:
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进行回滚,回滚具体请查看 报表填报属性