问题场景
存在BOTP关联下推单的,对已审核单据进行反审核时,一些业务需求提示:"xxx业务单据已存在下游xx单据,请先删除下游单据再做反审核"。此时会引导用户删除下游单据。
BOTP下推单有误,或者不需要了。
等等..
以上场景,删除下游单据后,可能会出现如下业务需求:
1.删除下游单据后,自动对源单据进行状态反写,如:已审核的源单据,在下游单据删除后,自动更改源单据审核状态,已审核自动更改为已提交
针对此类场景官方有做出解释,本文结合实际应用场景做出反写规则案例以及进一步介绍
引用:下游单据删除后源单状态没有恢复为已审核状态,为什么? (kingdee.com)
案例:反写规则,当源单据BOTP产生的下游单据被全部删除时,源单据审核状态由已审核更改为已提交(暂存)
简单来说,如果一张单据下推或者重复下推产生了单条或者多条数据时,业务要求需要把改单的全部下游单据全部删除才能更改状态,这时候反写规则如果直接编写为如下图显示
可能第一反应,在写反写公式时设想,当下游单据编码为null时,证明该单据不存在了,那么我们将覆盖状态值到源单据,从而达到反写规则修改源单据状态的目的
然鹅实际业务场景中,引用的官方文档已经说明了,此方法无法达到想要的效果。理由是,“覆盖”的反写方式是不支持回滚的。且该方法也无法做到删除所有下游单据,源单状态才进行反写的规则
那么如何配置才能达到想要的效果呢?如下图
核心在于使用反写规则的业务规则适用,既然覆盖不可以回滚,那么我们就使用"累加"的反写方式
我们在源业务单据中做一个隐藏字段,该字段类型可以是源单据的金额的复制,以下举例命名为“关联金额”,并无实际业务意义
编写反写规则,已知该业务审核时会触发BOTP生产一张下游单(第一次一定要审核,审核后可以手动下推下游单据),当没有下游单时,一次点击保存,关联单据金额赋值=0,当产生下游单时,关联金额按照反写公式进行金额累加,0+金额。第二次产生下游单,关联金额则变成0+金额+金额
此时我们再配业务规则,关联金额>=金额 时,条件成立,使用“计算定义公式的值并填写到指导列”的操作功能,默认状态不变,状态="已审核",条件不成立则设置状态,状态="暂存"
当某条源单据的下游单据被全部删除时,此时业务规则的前置条件不成立,按照业务规则反写源单据的状态="暂存"
自此功能实现。
推荐阅读