说明
允许一次超额,只有下面两种情况才会做检查,并且检查的是反写前的值,不管下游单据某分录反写多少次,只要第一次反写前没有超额,就始终不会超额。所谓检查的是反写前的值是指在解析超额条件公式时,会把被反写字段的值先减去反写值,再进行比较。
会做超额检查两种情况
上游单据被反写字段,第一次反写前的值是正数,下游单据当前次反写值也是正数,并且总反写值(总影响)也是正数
上游单据被反写字段,第一次反写前的值是负数,下游单据当前次反写值也是负数,并且总反写值(总影响)也是负数
名词解释
1、总反写值,简称总影响:指的是下游单据最终反写值,比如:
第一次反写为10,则总影响就是10;
第二次把反写字段数量改为15,减去历史反写的10,那么第二次反写就是5,则总影响就是15;
第三次把反写字段数量改成5,减去历史反写的15,那么第三次反写就是-10,则总影响就是5;
第四次把此行删除,需要把反写值给扣减掉,那么第四次反写就是-5,则总影响就是0;
总结:总影响始终等于下游反写字段的值;如果删除了,则总影响永远是0;
2、 检查反写前的值:
在解析超额条件公式时,先把反写后的值减去总影响,再进行条件判断。
3、 当前次反写值:
当前次反写值=总反写值-历史反写值
4、第一次反写前的值
反写后的值减去总影响,如果只有一行反写则始终不变,如果多行交叉反写,则可能变化。
超额检查的影响
1. 如果检查不通过,会抛出超额异常
2. 会走反写插件AfterCheckHighLimit事件,可以干预检查结果
示例说明
反写规则: 操作是保存,设置单据B分录的数量字段反写单据A分录的数量字段,累加模式,允许超额一次,超额检查公式为单据A数量字段值大于5,则超额。
转换规则:单据A分录中的数量字段映射到单据B分录中的数量字段;
示例一
单据A:1条分录,数量字段为5;下推单据B,产生1条分录,数量值为5。
情况1: 单据B数量5不变,点保存操作,是否会超额检查,是否会超额?
1、影响:反写前的值为5,反写值为5,总影响为5,反写后的值为10;
2、是否会超额检查:满足超额检查第1项,反写前,反写值,总影响三个值都为正数,故会超额检查;
3、是否会超额: 超额检查公式,反写后的值减去总影响再跟5比较,结果为:(10-5)>5,条件不成立,故不超额。
情况2:再把单据B数量改成10,点保存操作,是否会超额检查,是否会超额?
1、影响:反写前的值为10,反写值为5,总影响为10,反写后的值为15;
2、是否会超额检查:满足超额检查第1项,第一次反写前,反写值,总影响三个值都为正数,故会超额检查;
3、是否会超额: 超额检查公式,反写后的值减去总影响再跟5比较,结果为:(15-10)>5,条件不成立,故不超额。
情况3:再把单据B数量字段改成4,点保存操作,是否为检查超额,是否为超额?
1、影响:反写前的值为15,反写值为-6,总影响为4,反写后的值为9;
2、是否会超额检查:第一次反写前5,反写值-6,总影响4,不满足三个都为正或都为负,故不会超额检查
情况4:最后把单据B删除,是否为检查超额,是否为超额?
1、影响:反写前的值为9,反写值为-4,总影响为0,反写后的值为5;
2、是否会超额检查:第一次反写前5,反写值-4,总影响0,不满足三个都为正或都为负,故不会超额检查
示例二
单据A,1条分录,数量字段为5;下推两次单据B,
产生单据B1,1条分录,数量为5;
产生单据B2,1条分录,数量为5;
情况1: 先保存单据B1,是否会超额检查,是否会超额?
情况跟示例一中的情况1相同,反写后,单据A的数量字段值变成10.
情况2: 再保存单据B2,是否会超额检查,是否会超额?
1、影响:反写前的值为10,反写值为5,总影响为5,反写后的值为15;
2、是否会超额检查:第一次反写前10,反写值5,总影响5,满足三个都为正数,故会超额检查
3、是否会超额: 超额检查公式,反写后的值减去总影响再跟5比较,结果为:(15-5)>5,条件成立,会超额。
示例三
单据A,1条分录,数量字段为5,两条子分录,转换规则单据体按子分录进行分组;
下推单据B,产生带2条分录,数量字段都为5的数据。
情况1: 直接保存单据B,是否会超额检查,是否会超额?
第一条分录情况:
情况跟示例一中的情况1相同,反写后,单据A的数量字段值变成10.
第二条分录情况:
1、影响:反写前的值为10,反写值为5,总影响为5,反写后的值为15;
2、是否会超额检查:第一次反写前10,反写值5,总影响5,满足三个都为正数,故会超额检查
3、是否会超额: 超额检查公式,反写后的值减去总影响再跟5比较,结果为:(15-5)>5,条件成立,会超额。
示例四
单据A,1条分录,数量字段为5;下推两次单据B,
产生单据B1,1条分录,数量为5;
产生单据B2,1条分录,数量为-5;
情况1: 先保存单据B1,是否会超额检查,是否会超额?
情况跟示例一中的情况1相同,反写后,单据A的数量字段值变成10.
情况2: 再保存单据B2,是否会超额检查,是否会超额?
1、影响:反写前的值为10,反写值为-5,总影响为-5,反写后的值为5;
2、是否会超额检查:第一次反写前10,反写值-5,总影响-5,不满足三个值都为正或未负的情况,故不会超额检查
情况3: 再把单据B2删除,是否会超额检查,是否会超额?
1、影响:反写前的值为5,反写值为5,总影响为0,反写后的值为10;
2、是否会超额检查:第一次反写前10,反写值5,总影响0,不满足三个值都为正或未负的情况,故不会超额检查
情况4: 再把单据B1删除,是否会超额检查,是否会超额?
1、影响:反写前的值为10,反写值为-5,总影响为0,反写后的值为5;
2、是否会超额检查:第一次反写前10,反写值为-5,总影响0,不满足三个值都为正或未负的情况,故不会超额检查
示例五
单据A,1条分录,数量字段为5,两条子分录,转换规则单据体按子分录进行分组;
下推两次,产生:
单据B1,两行分录,数量都为-5;
单据B2,两行分录,数量都为5;
情况1: 先保存单据B1,是否会超额检查,是否会超额?
第一行分录情况:
1、影响:反写前的值为5,反写值为-5,总影响为-5,反写后的值为0;
2、是否会超额检查:第一次反写前5,反写值-5,总影响-5,不满足三个值都为正或未负的情况,故不会超额检查
第二行分录情况:
1、影响:反写前的值为0,反写值为-5,总影响为-5,反写后的值为-5;
2、是否会超额检查:第一次反写前0,反写值-5,总影响-5,不满足三个值都为正或未负的情况,故不会超额检查
情况2: 再保存单据B2,是否会超额检查,是否会超额?
第一行分录情况:
1、影响:反写前的值为-5,反写值为5,总影响为5,反写后的值为0;
2、是否会超额检查:第一次反写前-5,反写值5,总影响5,不满足三个值都为正或未负的情况,故不会超额检查
第二行分录情况:
1、影响:反写前的值为0,反写值为5,总影响为5,反写后的值为5;
2、是否会超额检查:第一次反写前0,反写值5,总影响5,不满足三个值都为正或未负的情况,故不会超额检查
情况3: 把单据B1删除,是否会超额检查,是否会超额?
第一行分录情况:
1、影响:反写前的值为5,反写值为5,总影响为0,反写后的值为10;
2、是否会超额检查:第一次反写前10,反写值5,总影响0,不满足三个值都为正或未负的情况,故不会超额检查
第二行分录情况:
1、影响:反写前的值为10,反写值为5,总影响为0,反写后的值为15;
2、是否会超额检查:第一次反写前15,反写值5,总影响0,不满足三个值都为正或未负的情况,故不会超额检查
情况4: 把单据B2删除,是否会超额检查,是否会超额?
第一行分录情况:
1、影响:反写前的值为15,反写值为-5,总影响为0,反写后的值为10;
2、是否会超额检查:第一次反写前10,反写值-5,总影响0,不满足三个值都为正或未负的情况,故不会超额检查
第二行分录情况:
1、影响:反写前的值为10,反写值为-5,总影响为0,反写后的值为5;
2、是否会超额检查:第一次反写前5,反写值-5,总影响0,不满足三个值都为正或未负的情况,故不会超额检查
总结
允许超额一次,只有反写前,反写值和总影响,都为正数(不包括0)或负数才会做超额检查。
允许超额一次,在删除的情况下,因为总影响为0,所以不管反写前的值是多少,都不会做超额检查。
允许超额一次,只有在保存或审核的情况下,三数为正或为负,并且反写前的值已经超额才会超额。
允许超额一次,同时存在多行分录反写上游相同字段,也是每行都分别检查,但上游被反写字段会被每行影响,故会相互影响。
推荐阅读