API保存凭证偶发凭证号重复的解决办法

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

API保存凭证偶发凭证号重复的解决办法

API保存凭证常用的方式有:

1.   单线程保存单个凭证;

2.   单线程批量保存凭证且BatchCount参数值为1;

3.   单线程批量保存凭证且BatchCount参数值大于1;

4.   多线程保存单个凭证;

5.   多线程批量保存凭证。

这些方法出现凭证号重复的可能性依次增大,究其原因是:系统在处理凭证号的并发请求时,尤其是高并发的请求时,无法有效应对。

要解决这一问题,可以从调用端和系统端两边着手。

  • 调用端解决办法:

根据上面罗列的常用方式发生凭证号重复的机率,可以采取以下三种方式:

1)   改多线程为单线程

2)   减小批量保存中的BatchCount参数值

3)   改批量保存为单个保存

不过,这样调整,会在一定程序上降低API保存凭证的效率,在效率不敏感的场景可以选用。如果API保存凭证数量大,API调用频繁的场景,还可以考虑系统端的解决方法。

  • 系统端解决办法:

系统已考虑到了凭证号请求高并发的场景,并准备了一个针对该场景的插件,如下图所示:

image.webp

系统出厂默认使用第5行的凭证号处理插件,如果在高并发场景下,出现凭证号重复的情况,可以切换到第6行的“高并发场景下凭证号维护插件”,即取消“避免凭证号重复处理插件”,勾选“高并发场景下凭证号维护插件”。保存后生效。

  • Python插件解决办法

此外,还可以通过注删除一个Python插件来加强凭证号处理逻辑,防止凭证号重复,具体脚本如下。

#此脚本需要VchNoTaskLine类为public类型。
#官方组件24年上半年之前的组件默认为private类型,需要重新编译为public才可使用
import clr
clr.AddReference('Kingdee.K3.FIN.GL.App.ServicePlugIn')
from Kingdee.K3.FIN.GL.App.ServicePlugIn.GLVoucher import *
 
def BeginOperationTransaction(e):
    VchNoTaskLine().UpdateMultiVchGroupNo(this.Context, e.DataEntitys)

 

PS:以上三种方法可以同时使用。



第三种方法要求VchNoTaskLine类为public类型,有需要public类型的VchNoTaskLine类的组件的朋友,可以在此贴留言,并提供星空详细版本号。我看到后可提供相应版本的修改后的官方组件,放在本文附件中供下载。

API保存凭证偶发凭证号重复的解决办法

API保存凭证常用的方式有:1. 单线程保存单个凭证;2. 单线程批量保存凭证且BatchCount参数值为1;3. 单线程批量保存凭证且BatchC...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息