![summary-icon](https://cdn-vip.kingdee.com/statics/webfront/summary_icon.png)
本文介绍了在集团内多财务人员生成凭证时,为便于月底整理,通过Python脚本实现凭证号自动分配的功能。财务人员需协商好各自的凭证号范围,脚本通过检查当前账簿、期间及用户已生成的最大凭证号,自动为新增凭证分配唯一编号。若凭证号冲突,会提示用户重新输入。
集团内有多个财务人员需要生成凭证,如果每个人生成凭证能够在一定范围内顺序编号,在月底进行整理归纳负责的凭证及其附件时会更方便快速。
思路是新增凭证时以最大凭证号加1作为新增的凭证号,故实操时,需要财务人员协商并安排好各自的凭证号范围,比如A用1-100号凭证、B用101-200号、C用201-300,那么A新增第一笔凭证时用1,B用101号,C用201号,往后新增凭证时,就会自动获取凭证号A的是2、B是102、C是202。
一、通过注册Python脚本的方法变通实现,操作步骤:通过BOS设计器扩展 “凭证”-- 表单插件 -- 注册Python脚本,脚本如下:
# 新增凭证时分用户生成凭证号
#引入clr运行库
import clr
#添加对cloud插件开发的常用组件的引用
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Kingdee.BOS.App')
#导入cloud基础库中的常用实体对象(分命名空间导入,不会递归导入)
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from System import *
from Kingdee.BOS.App.Data import *
def DataChanged(e):
if(e.Field.Key=="FDate" or e.Field.Key=="FACCOUNTBOOKID" or e.Field.Key=="FVOUCHERGROUPID"):
SetVoucherNo()
def AfterBindData(e):
if this.View.OpenParameter.Status <> OperationStatus.EDIT:
SetVoucherNo()
def SetVoucherNo():
bookid = this.View.Model.GetValue("FACCOUNTBOOKID")["Id"]
pzz = this.View.Model.GetValue("FVOUCHERGROUPID")["Id"]
y0 = this.View.Model.GetValue("FYEAR")
p0 = this.View.Model.GetValue("FPERIOD")
sql = "SELECT max(FVOUCHERGROUPNO) FROM T_GL_VOUCHER WHERE FACCOUNTBOOKID="+str(bookid)
sql += " and FVOUCHERGROUPID="+str(pzz) + " and FYEAR="+str(y0) + " and FPERIOD="+str(p0)
sql += " and FCREATORID="+this.Context.UserId.ToString()
pzh = DBUtils.ExecuteScalar(this.Context,sql,0)
if pzh > 0:
pzh = pzh +1
sql = "SELECT count(1) FROM T_GL_VOUCHER WHERE FACCOUNTBOOKID="+str(bookid)
sql += " and FVOUCHERGROUPID="+str(pzz) + " and FYEAR="+str(y0) + " and FPERIOD="+str(p0)
sql += " and FVOUCHERGROUPNO="+str(pzh)
if DBUtils.ExecuteScalar(this.Context,sql,0) == 0:
this.View.Model.SetValue("FVOUCHERGROUPNO",pzh)
this.View.ShowMessage("已自动生成凭证号:"+str(pzh))
else:
this.View.Model.SetValue("FVOUCHERGROUPNO","")
this.View.ShowMessage("您的下一个凭证号("+str(pzh)+")已经被其他人使用,请输入新凭证号!")
else:
this.View.Model.SetValue("FVOUCHERGROUPNO","")
this.View.ShowMessage("您本月还没有录入过凭证,请输入凭证号!")
二、实现的效果:
1、对于在当前账簿当前期间未新增过凭证的用户,会提示“您本月还没有录入过凭证,请输入凭证号!”,如下图所示
2、自动识别用户已生成凭证的最大凭证号,新增凭证时以最大凭证号加1作为新增的凭证号,并提示“已自动生成凭证号:××”,如下图所示
3、如果某用户的下个可用凭证号被别的用户占用了,会提示“您的下一个凭证号(××)已经被其他人使用,请输入新凭证号!”,如下图所示
推荐阅读