【反写】--允许一次超额原创
金蝶云社区-eris
eris
3人赞赏了该文章 814次浏览 未经作者许可,禁止转载编辑于2022年06月17日 11:12:35

说明

允许一次超额,只有下面两种情况才会做检查,并且检查的是反写前的值,不管下游单据某分录反写多少次,只要第一次反写前没有超额,就始终不会超额。所谓检查的是反写前的值是指在解析超额条件公式时,会把被反写字段的值先减去反写值,再进行比较。

会做超额检查两种情况

  1. 上游单据被反写字段,第一次反写前的值是正数,下游单据当前次反写值也是正数,并且总反写值(总影响)也是正数

  2. 上游单据被反写字段,第一次反写前的值是负数,下游单据当前次反写值也是负数,并且总反写值(总影响也是负数

名词解释

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,不满足三个值都为正或未负的情况,故不会超额检查

总结

  1. 允许超额一次,只有反写前,反写值和总影响,都为正数(不包括0)或负数才会做超额检查。

  2. 允许超额一次,在删除的情况下,因为总影响为0,所以不管反写前的值是多少,都不会做超额检查。

  3. 允许超额一次,只有在保存或审核的情况下,三数为正或为负,并且反写前的值已经超额才会超额。

  4. 允许超额一次,同时存在多行分录反写上游相同字段,也是每行都分别检查,但上游被反写字段会被每行影响,故会相互影响。










赞 3