示例
在填报补录的功能中,通常会有一种主子表的填报需求。比如如下的报销表单,绿色是填报的部分。其中上半部分是报销主表,填写报销事宜和总金额;下半部分是报销的明细,记录相关的项目和金额。
保存后数据库中,主表数据如下:
子表数据如下:
注意:主子表回写的关键是子表中要包含主表的主键字段。
操作步骤
1.准备回写表。
在对应的数据库中新建一个表,命名为“reimburse_main”,该表为回写数据的主表。其结构如下:
字段名称 字段含义 类型 是否主键 c_name 报销人 varchar(255) Y c_date 报销时间 datetime Y c_matters 报销事宜 varchar(255) N c_total 报销金额 float N
在对应的数据库中新建一个表,命名为“reimburse_sub”,该表为回写数据的子表。其结构如下:
字段名称 字段含义 类型 是否主键 c_name 报销人 varchar(255) Y c_date 报销时间 datetime Y c_project 所属项目 varchar(255) Y c_amount 报销金额 float N
并在数据库管理中把此这两个表添加到对应的数据源下。具体可以参考清单补录的第2步骤。
2.创建数据集。
由于主子表的下半部分项目明细,是需要插入行的。所以需要构造一个数据集,在创建电子表格时,将字段拖拽到单元格中,并设置填报属性“可以插入/删除行”,即可实现行的增删
创建数据集,查询出子表的字段,并且数据为空数据,如下:
数据为空,预览如下:
3.创建电子表格。
在报表设计器中创建一个电子表格,如下设计,不关联任何数据集。注意此示例中报销事宜、项目和金额是需要填写的,因此将填充颜色设置为绿色。
4.设置单元格内容
(1)在C4中输入公式“=ssr_getcurrentusername()”,使报销人自动设置为当前登录用户的用户名
(2)在单元格E4中,输入公式“=now()”,并设置单元格格式为“yyyy-mm-dd hh:mm:ss”。使报销时间自动设置为当前时间。
(3)“报销事宜”是需要填写的,所以C5单元格不需设置内容
(4)在C6单元格中,输入公式“=sum(D10)”,报销总金额由明细计算得到,如下:
3.回写设置。
设置该电子表格回写到步骤1中的testwrite表中。并且c_code绑定一个没有内容的单元格,如A1。其他字段绑定对应的单元格
4.设置自增。
设置c_code为主键,右键,选择“设置主键(自增)”。
注:设置为"主键(自增)”的字段,表示该字段的数据回写时不进行操作,而是由数据库自行处理。
如下:
5.填报属性。
设置C5、C7、F7的填报属性为单行文本,F5单元格的填报属性为数字。A1单元格不需要设置填报属性
6.执行回写。
在浏览器端打开该报表,输入相关内容,点击保存,即会向数据库中插入一条新的数据,并且c_code字段+1.