新增凭证时不同用户使用不同的凭证号范围原创
金蝶云社区-小一1
小一1
4人赞赏了该文章 58次浏览 未经作者许可,禁止转载编辑于2024年08月13日 16:08:54
summary-icon摘要由AI智能服务提供

本文介绍了在集团内多财务人员生成凭证时,为便于月底整理,通过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、对于在当前账簿当前期间未新增过凭证的用户,会提示“您本月还没有录入过凭证,请输入凭证号!”,如下图所示

image.png


2、自动识别用户已生成凭证的最大凭证号,新增凭证时以最大凭证号加1作为新增的凭证号,并提示“已自动生成凭证号:××”,如下图所示

image.png

image.png

3、如果某用户的下个可用凭证号被别的用户占用了,会提示“您的下一个凭证号(××)已经被其他人使用,请输入新凭证号!”,如下图所示

image.png

赞 4