反饋已提交
網絡繁忙
在实际填报表设计中,主从表是常见的一种填报场景,主表中的一条记录对应从表中的多条记录,例如「订单表」和「订单明细表」,「订单表」的一个订单可能对应「订单明细表」中的多条产品数据,通过「订单 ID」字段进行关联。
修改上方订单信息及明细数据时,数据将分别回填至对应的数据表中。
像这样数据来自于多个数据源,填报时数据回填到多个表中的报表,也可以称之为多源填报表。
首先通过设置过滤条件,将表与表关联起来,然后通过定义多个内置 SQL 提交将数据回填到不同的数据表中。
新建普通报表,新建两个数据库查询,SQL 查询语句分别为:
ds1:SELECT * FROM 订单
ds2:SELECT * FROM 订单明细
按照下图所示设置表样,并将对应的数据列拖入到对应的单元格中:
将 B4、B6、B8 单元格的「左父格」均设置为 A3 单元格,其余单元格为默认,即数据均是根据「订单 ID」扩展得来。
1)各单元格添加控件类型如下表所示:
2)设置 B4、D4、F4、B8、A12 单元格「下拉框控件」的「数据字典」,并且设置 B4、D4、F4、A12 单元格的「单元格属性>形态」也为「数据字典」,具体设置均如下表所示:
控件「数据字典」设置如下图:
单元格形态「数据字典」设置如下图:
3)设置 F12 和 G12 的「按钮控件」分别为「插入行」和「删除行」按钮,其指定单元格都为 A12 单元格。如下图所示:
在 H12 单元格中插入公式:C12 * D12 * (1 - E12),即:数量*进价*(1-折扣)。
在 D8 单元格中插入公式:round(sum(H12) + B6,2)。表示「应付金额」为数量*进价*(1-折扣)+运货费。
注:round() 表示应付金额保留两位小数,函数详细解释可参考Round函数。
选中 H12 单元格,点击右侧面板「单元格属性>其他」,将插入行策略设置为「原值」,确保单元格公式在插入行时被保留。
1)点击菜单栏「模板>模板参数」,添加一个参数名为 ID 的模板参数,默认值为 10001。如下图所示:
2)在参数界面添加参数生成相应控件,控件类型选择为「下拉框控件」,并设置下拉框控件的数据字典:数据库表为「订单」,实际值和显示值均为第 1 列:订单 ID。如下图所示:
双击 A3 单元格,设置过滤条件,条件为普通条件:「订单 ID 」列等于参数 $ID。如下图所示:
双击 A12 单元格,设置过滤条件,条件为普通条件:「订单 ID」 列等于单元格 A3。
1)A3 单元格只是作为过滤数据使用,不需要展示在页面上,所以需要隐藏。可以直接选中第 3 行的行序号,单击鼠标右键选择隐藏,如下图所示:
也可以通过给 A3 单元格添加一个行高为 0 的条件属性,如下图所示:
2)同样点击 H 列,单击鼠标右键选择隐藏,将 H12 单元格隐藏。
点击菜单栏「模板>报表填报属性」,按照下图所示给报表增加两个内置 SQL 提交。
内置 SQL1:
内置 SQL2:
保存报表,点击「填报预览」,查询订单号为 10001 的数据,效果如下图所示:
修改子表,修改数量与进价,点击提交,提示成功。刷新浏览器,再选择10001,可以看到数据已经改变,如下图:
App 端和 HTML5 端均支持,效果如下图所示:
已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Form\MultiFormReport\主从表填报.cpt
点击下载模板:主从表填报.cpt
若一个填报模板中定义了多个内置 SQL,其执行顺序会按照定义的顺序执行,若在执行其中一个内置 SQL 时出错,会停止下面内置 SQL 的执行并对已执行的内置 SQL 进行回滚,回滚具体请查看 报表填报属性。
文 檔回 饋
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉