1.目标表循环的触发时机
在填表公式中,除了数据源可能触发循环外,对明细表的更新操作也可能触发循环。当针对整个明细表进行更新,且无法通过事件定位到具体某一行时,系统会依次读取目标表明细中的每一条记录,逐一执行更新操作。

目标表触发循环,需同时满足以下两个条件:
1)操作为“更新明细表”
- 如果更新的是“基本信息”,数据项只有一个值,从一个值更新成另一个值,不会触发循环。
- 如果执行“插入明细”操作,不涉及已有记录的修改,与目标表无关。
- 只有“更新明细”时,系统需要获取目标表中已有的明细数据,才可能触发循环。
2)事件无法定位到具体明细行
- 如果事件绑定在明细的某个数据项上(如“明细.单价”),系统已经明确知道是哪一行数据发生了变动,只需更新该行,不会产生循环。
- 如果事件无法定位具体明细行时(如“工具栏按钮单击时”),系统无法确定具体要更新明细哪一行,便会依次获取整个明细表,依次获取明细的每条记录,从而执行循环。
2.目标表循环验证
为了测试目标表的循环,在【测试循环】工具栏按钮单击事件下,添加赋值操作“更新明细”,将此公式的操作设置为更新明细。

在表单中单击【测试循环】工具栏按钮时,满足目标表循环的条件。
1)循环取目标表的记录。系统会依次读取目标表明细中的每一条记录,逐一执行更新操作,将其内容设置为“鼠标”。如果明细表中原有4条空记录,则这4条将都被更新成“鼠标”;
2)自动扩展:由于明细表默认设置了“自动向下扩展”,当第4行被填充后,系统自动向下扩展第5行空白记录,执行结果如下图所示。

因此,目标表做循环时,会依次读取目标表的每一条记录:从第一条开始,逐条进行更新,直至所有记录读取完毕。

3.目标表循环内嵌操作
在上述案例的基础上,再在“明细.内容”值变化事件下,添加“提示框”操作,将明细的数据弹出来显示。

注意:提示框操作要勾选“执行后续操作”,确保弹出提示框后能继续执行后续操作
此时,每次读取目标表的记录时,都会更新“明细.内容”。当“明细.内容”被赋值后都会触发“明细.内容”的值变化事件,从而导致提示框弹出。从更新明细的内容到弹出提示框作为整体操作完成后,再获取目标表的下一条记录循环执行。

因此,对话框的弹出次数等于明细表的记录数。例如:当明细有2条记录时,单击按钮将弹出2次对话框;有3条记录时,则会弹出3次。

3.案例实践:分摊
在财务结算的分摊场景中,对于总额 X 元,系统会依次按序向下分摊。当剩余金额不足以完成对下一个单位的足额分摊时,分摊完成,且全部剩余余额将分配给当前序列中的最后一个单位。

实现步骤:
1)添加辅助变量:在“数据项管理”中添加数据项,命名为“剩余金额”,用于存储分摊过程中的剩余余额(仅设计使用,无需界面显示,设置时只需填写名称与类型,“表格”和“位置”两项务必留空)。

2)初始化总额:单击【分摊】按钮时,首先将待分摊的总金额赋值给“剩余金额”。

3)计算单笔分摊金额。更新[明细.分摊金额] → 遍历每条记录 → 用IF判断:
( 剩余金额 > 明细.金额 ),明细.金额, 剩余金额 。 
4)更新剩余金额:在每次“明细.分摊金额”变化后,同步更新“剩余金额”,减去刚分配出去的金额,
即:
剩余金额 = 剩余金额 - 明细.分摊金额。 
在此案例中,系统通过循环读取目标表明细实现分摊,其核心联动机制如下:每次循环都会根据
剩余金额判断并为明细分摊金额赋值 → 该赋值动作会触发明细的值变化事件 → 事件中随即执行剩余金额的累减操作 → 从而为下一条记录的判断提供更新后的余额,以此类推。 
优化实现:为避免明细中的空白行参与分摊计算,在对明细执行更新操作时,增加一个判断,仅当目标表有实际记录数据时(编号<> "")才执行分摊金额的赋值。有效避免了无效空行被赋值样式发生变化。
