10.4 对目标表明细操作(已更)

1.数据的存储原理

带有明细表的模板的数据,在数据库是如何存储的呢?我们以《采购单》为例,它有基本信息和1个明细表组成,
如下图,存储时有2个表,表1存储“基本信息”,表2存储“商品明细”(当一个模板有2个明细表时,则就会有3个表-基本信息表、明细表1、明细表2)。每个表中的latoID和fromID由系统自动生成,latoID是数据库表的唯一标识,fromID是表关联的ID,这2个表的关联关系是什么样的呢?
表2
表2
表1中latoID为“2”的采购单,在表2中有2个关联的记录(红色方框),它们的fromID都是2,因此该采购单有2条商品明细。
表1中latoID为“3”的采购单,在表2中有2个关联的记录(无方框),它们的fromID都是3,因此该采购单有2条商品明细。
表1中atoID为“6”的采购单,在表2中有3个关联的记录(灰色方框),它们的fromID都是6,因此该采购单有3条商品明细。

2.执行规则

如果我们需要找到采购单单号为“CGD-2-210609002”的商品“云表净水机”,应该如何操作呢?是否可以只从表2中找到这条记录呢?
在表2中,可以找到2条商品名称为“云表净水机”的记录,但是从表2中不能直接判断该明细属于哪个采购单,一定要配合表格1一起查找!
表2
正确的查找方法为:在表1中先找到采购单单号=CGD-2-210609002的采购单,它的latoID=3,这时候表2中fromID=3的记录有2条,它们的latoID分别为7和8的,然后再从这2条记录中找到“云表净水机”即可。
表2
因此我们可以看出,针对明细表操作时,必须先针对基本信息操作,然后再针对明细信息操作。
换言之,在对明细表进行操作之前,首先要找到明细表的对应的基本信息表,即便不需要对基本信息表进行任何操作。因为明细表是一个表单的一部分,要找到操作一张表单的明细,首先需要知道是哪一张表单,然后才能操作这张表单的明细。

3.示例

3.1 本表基本信息更新目标明细

我们以更新“客户管理”的明细记录为例,当“客户信息”的记录更新的时候,自动更新“客户管理”中的对应的明细记录,模板数据如下:
客户信息
①由于每次更新客户信息时,自动更新“客户管理”中的信息,因此事件使用“保存表单后事件”下的“更新时”子事件。
在“客户信息”模板的设计窗口,单击工具栏的【业务公式】按钮,选中“保存表单后事件”,单击【添加公式】按钮,目标模板选择《客户管理》。
②先针对基本信息操作,左侧目标对象选择“客户管理”,用本表单作为数据源,打开“更新时”子事件选项卡,没有执行条件,没有子数据源,先在“目标模板”的总表中找到哪张表单,利用 客户管理.负责人=本表单.负责人  匹配。
③再针对明细信息操作。左侧的目标对象选择“明细”,用本表单作为数据源,打开“更新时”子事件选项卡,没有执行条件,没有子数据源,更新该客户的信息,匹配条件为 客户管理.明细.姓名=本表单.姓名,将本表单.联系电话,赋值给 客户管理.明细表.联系电话。
④填写公式名称,保存公式和模板。
更多示例 批量导入明细 

3.2 本表明细更新目标明细

我们以《入库单》入库时将入库数量回写到《采购单》为例子来实操看一下应该如何操作。
“入库单”入库时,需要增加“采购单”商品的“入库数量”,取消入库时,扣减“采购单”商品的“入库数量”。“入库数量”在采购单的商品明细中,针对商品明细操作时,必须先针对基本信息操作,先匹配找到该“入库单”对应的“采购单”,然后再针对该表单商品明细的“入库数量”进行更新。模板样式如下:
①“入库”是一个状态按钮,先添加状态按钮
②在“入库”状态改变事件下添加针对“采购单”的公式。单击【业务公式】,打开“业务公式管理”对话框,选中“入库”状态改变事件,单击【添加公式】,选择目标模板“采购单”,进入业务数据处理界面。
③“入库单”入库时,需要增加“采购单”商品的“入库数量”,取消入库时,扣减“采购单”商品的“入库数量”,先完成“确认入库”的情况。
《采购单》有基本信息和明细信息,因此在左侧可看到有2个目标对象,采购单和商品明细表,针对明细表操作时必须先针对基本信息操作,再针对明细信息操作。
先针对基本信息操作,左侧对象选择“采购单”,数据源默认为本表单,将情况1重命名为“确认入库”,执行条件为  本表单.入库 = 常量.是,先从目标模板的总表中,找到“入库单”对应的哪张“采购单”,匹配条件为  采购单.采购单号=本表单.来源单号;
④再针对明细表操作。左侧目标对象选择“商品明细表”,每个商品明细的入库数量都需要更新,数据源选择“本表单.明细”,将情况1重命名为“入库”,已找到这张采购单,直接更新“采购单”与“入库单”中商品明细的记录,增加入库数量,填写匹配条件,并给 采购单.商品明细表.入库数量赋值。
⑤在完成取消入库时,扣减“采购单”商品的“入库数量”。为了更便捷操作,在“确认入库”情况下,右键,选择“复制”,在新的情况下再粘贴。
⑥先针对基本信息操作,复制已有的“确认入库”情况,粘贴后重命名为“取消入库”,此时的执行条件为 本表单.入库=常量.否,先从目标模板的总表中,找到“入库单”对应的哪张“采购单”,匹配条件为 采购单.采购单号=本表单.来源单号;
⑦再针对明细信息操作,复制已有的“入库”情况,粘贴后重命名为“取消”,此时的执行条件为 本表单.入库=常量.否,已找到这张采购单,直接更新“采购单”与“入库单”中商品明细的记录,减少入库数量,填写匹配条件,并给 采购单.商品明细表.入库数量赋值。
⑧应用效果。“入库单”入库时,需要增加“采购单”商品的“入库数量”,取消入库时,扣减“采购单”商品的“入库数量”。

3.2.1 多情况运行顺序

同一个业务公式中有多个情况时,按照从左向右的顺序运行,当执行情况满足时才执行情况下的操作(参见 概述-执行规则-④
在这个案例中,一个业务公式有4个情况,针对基本信息有2个情况,针对明细表有2个情况,它们的运行顺序是怎么样的呢?
入库单“入库”时,有多个情况,按照从左到右顺序逐个运行的原则先运行针对采购单的公式“确认入库”①,条件满足,向下运行,此时才运行针对明细表的公式,针对明细表有2个情况,按照从左向右的顺序逐个执行的原则,会先先运行情况“入库”②,条件满足,向下运行,增加采购单明细的入库数量,再运行“取消”③,条件不满足,不运行;
当明细所有的情况运行完后,再回到针对基本信息的公式,运行针对采购单的公式“取消入库”④,条件不满足不运行,结束,不再运行针对明细表的公式;
入库单“取消入库”时,有多个情况,按照从左到右顺序逐个运行的原则先运行针对采购单的公式“确认入库”①,条件不满足不运行,不再运行针对明细表的公式;
接在再运行针对采购单的公式“取消入库”②,条件满足向下运行,此时才运行针对明细表的公式,针对明细表的多个情况,按照从左向右的顺序逐个执行的原则,先运行情况“入库”③,不满足不运行,再运行“取消”④,条件满足,向下运行,结束公式。
2023-12-25
45 41