凭证API接口GL_VOUCHERAPI不支持编码规则的解决办法原创
金蝶云社区-战斗的凯文
战斗的凯文
69人赞赏了该文章 302次浏览 未经作者许可,禁止转载编辑于2024年10月18日 13:56:19
summary-icon摘要由AI智能服务提供

文本介绍了因第三方调用凭证API接口得到的凭证编码始终为默认值,导致无法设置编码规则的问题。文中提出通过BOS设计器临时发布到操作台指定编码规则的方法,但存在编码不一致的风险。解决方案是扩展凭证API接口对象,添加Python插件自动获取普通凭证的编码规则生成编码,确保API接口与普通凭证采用同一套编码规则,避免编码重复或不同。

第三方调用凭证API接口(GL_VOUCHERAPI),得到的凭证编码值始终为默认值“-1”,这是由于未正式对外发布,因此不支持用户在前端为其设置编码规则。可以通过BOS设计器,先临时发布到操作台,然后在编码规则中为其指定一个编码规则,然后再取消发布。不过,这样做有一个弊端,那就是为它指定的编码规则和凭证(GL_VOUCHER)上的编码规则不是同一个,两者无法协调生成编码。因此,可能造成通过凭证API接口生成的凭证和普通凭证上的编码重复或者是不同的两套规则。

本文重点解决这个问题。基本思路就是两者采用同一套编码规则,即采用普通凭证(GL_VOUCHER)现成的编码规则,无需为凭证API接口专门指定。

具体做法是:在BOS设计器中,扩展官方凭证API接口对象,为扩展后的凭证API接口(GL_VOUCHERAPI)对象的【保存】操作添加一个Python插件,该插件在凭证API接口保存凭证时自动获取凭证的编码规则生成的编码。如下图所示:

image.png 

image.png


image.png

Python插件的脚本如下

#引入clr运行库
#添加对cloud插件开发的常用组件的引用
clr.AddReference("mscorlib")
clr.AddReference("System")
clr.AddReference("System.Data")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.Contracts")
clr.AddReference("Kingdee.BOS.Core")
clr.AddReference("Kingdee.BOS.App")
clr.AddReference("Kingdee.BOS.ServiceHelper")
from Kingdee.BOS import *
from Kingdee.BOS.Contracts import *
from Kingdee.BOS.Core import *
from System import *
from System.Data import *
from Kingdee.BOS.App import *
from Kingdee.BOS.ServiceHelper import *
from System.Collections.Generic import List
from Kingdee.BOS.App.Data import *

 
def BeginOperationTransaction(e):
    vch1 = e.DataEntitys[0]
    if (vch1.DataEntityState.FromDatabase == False):
        #需要先循环清空
        for vch in e.DataEntitys:
            vch['BillNO']=' '
            vch['BUSDATE']=vch['Date']
 
        #再调用参数去获取
        businessInfo = MetaDataServiceHelper.Load(this.Context, "GL_VOUCHER").BusinessInfo;
        option = {'CodeTime' : '1' , 'UpdateMaxNum' : '1' };
        BusinessDataServiceHelper.GetBillNo(this.Context, businessInfo, e.DataEntitys, option);

image.png

注意:保存时系统会提示错误,无需理会,点“确定”继续保存即可。这个报错是因为我们本地缺少必要的组件引起的,但实现上脚本保存到服务器上后,不会缺少相关组件,因此,不会影响代码功能。

image.png

Python插件注册好后,点工具栏上的保存,即可生效。

image.png

实现的效果:

第三方调用凭证API接口(GL_VOUCHERAPI)可以共享普通凭证的编码规则,生成一致的凭证编码。











图标赞 69
69人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!