本帖最后由 lsfanxh 于 2019-3-20 10:36 编辑
前几天因为为别人代购了1000斤牛肉,要分成200小份,每份2.5公斤,然后每两份合成一个大份5公斤,因为分肉的师傅水平不行,一刀下去斤两相差很大,又想保证每一小份是一整块(这样比零零碎碎的给人的感觉要好些),于是就让师傅按每份大概5斤这样份,然后人工来配对(两块合计在4.9-5.1公斤之间即可),这样就能保证绝大多数符合条件,于是我就在魔方里用两个表来完成这个事:
表单:牛肉重量表(编号,重量),牛肉配对表(编号1,重量1,编号2,重量2,合计)
操作思路:首先对切下来的每一小块称重并编号,按一定的顺序摆放,同时在牛肉重量表中输入每一份的重量,此时,通过牛肉重量表的两个回写公式自动进行配对,并将已配对的记录删除。
回写公式:
定义三个空间变量:配对参数(作为相关操作的条件设置)、当前记录编号、已配对记录编号(均作为删除操作时选择记录用)
操作时机: 新增记录_操作后
公式一名称:记录配对
执行本回写公式前对变量赋值操作 配对参数=0
选择数据源:牛肉重量表(过滤条件:序号<$MF(序号)$;循环使用)
目标表单:牛肉配对表
编辑执行条件公式:and(($MF(重量)$+$MF(源表单.重量)$)>=4.9,($MF(重量)$+$MF(源表单.重量)$)<=5.1,$MF(空间变量.配对参数)$=0)
创建:编号1=$MF(编号)$,重量1=$MF(重量)$,编号2=$MF(源表单.编号)$,重量2=$MF(源表单.重量)$
操作目标后变量赋值:空间变量.配对参数=1,空间变量.当前记录号=$MF(编号)$,空间变量.已配对记录号=$MF(源表单.编号)$
公式二名称:删除已配对记录
执行条件:$MF(空间变量.配对参数)$=1
选择目标表单:牛肉重量表
过滤条件:牛肉重量表.编号=$MF(空间变量.当前记录号)$ OR 牛肉重量表.编号=$MF(空间变量.已配对记录号)$( 循环使用)
操作方式:删除
下面我就我写这个回写公式的经过仔细陈述一下,希望对不了解魔方回写公式运行机制的朋友有所帮助。
最初是在牛肉重量表中新增后写的配对操作,然后再在牛肉配对表中的新增后用两个编号去牛肉重量表中查找对应的记录然后删除,结果进行简单测试时没有问题,但后来用的时候发现如果新增这个和原有的记录有多个可以配对的情况下,系统就会配多个,直接最后一个才会删除新增这个(也就是说系统只会删除与之配对的记录,而新增这个并不会被删掉,它还要继续到牛肉重量表中继续下一次配对,直到没有与之配对的记录为止),我分析原因,是回写公式执行时是将新增这条记录作为当前上下文一直执行到整个过程中,由于我没有用相应的执行条件对公式的执行进行约束,所以它就一直执行下去,于是经过反复试验,终于找到了执行这个回写公式的开关钥匙,空间变量.配对参数是关键,重点在于给它赋值的时机。
第二个公式也可放在牛肉配对表中的手动回写中,然后在第一个公式的操作目标后定义回写调用.
第一次发这种帖子,与大家共同进步。 |