金蝶云星空新增科目,编码自动生成原创
金蝶云社区-小杨小杨
小杨小杨
13人赞赏了该文章 3,185次浏览 未经作者许可,禁止转载编辑于2023年04月25日 10:49:25

通过实施发现,星空的科目编码不会自动获取上级的编码,但是之前的K3及一下的版本都会有这个功能,客户反应不方便,而且用编码规则设置也不起作用。 我是用通过python插件来实现自动获取上级编码规则。

先看效果,当没有勾选上级科目的时候,编码不会自动获取。

image.png

当选中一个科目时,就会获取科目的代码+流水号(流水号也会自动获取新的)

image.png

下面放出代码,需要两个插件,一个列表插件,一个表单插件(表单插件会报错不影响,点确认就好)

列表插件:

 clr.AddReference('System')

from System import StringComparison
from System import String
def BarItemClick(e):
    #新增时传递科目编码到新增科目界面
    if e.BarItemKey.Equals("TBNEW", StringComparison.OrdinalIgnoreCase) or e.BarItemKey.Equals("TBSPLITNEW", StringComparison.OrdinalIgnoreCase):
        data = this.ListView.SelectedRowsInfo
        if len(data)==1:
        
            #取得选中行的编码
            number = data[0].Number
            
            #将编码传递到新增界面
            this.View.OpenParameter.SetCustomParameter("FLISTNUMBER", number)

表单插件:

import clr
#添加对cloud插件开发的常用组件的引用
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Kingdee.BOS.App')

from Kingdee.BOS.App.Data import *
from System import *

def AfterBindData(e):
    #取得列表传递过来的科目编码,同时进行移除
    val = this.View.ParentFormView.OpenParameter.GetCustomParameter("FLISTNUMBER",True)
    if val:
        #取得最大的编码
        sql="select max(FNUMBER) from T_BD_ACCOUNT where FNUMBER like '" + val+".%' "
        number =DBUtils.ExecuteScalar(this.Context, sql, "")
        
        #如果取得的最大编码不为空,则执行编码的处理
        if number:
            #取得最后一个点的位置
            index=number.rindex(".")
            
            #取得后缀
            prefix=number[index+1:len(number)]
            
            #取得转换为整型后的值
            data=int(prefix)
            
            #加1后的效果
            result=data+1;
            if len(str(result))==len(str(prefix)):
                this.View.Model.SetValue("FNumber",val+'.'+str(result))
            else:
                elseResult="";
                for num in range(index+1,len(number)-len(str(result))):
                    elseResult=elseResult+'0'
                elseResult=elseResult+str(result)
                this.View.Model.SetValue("FNumber",val+'.'+elseResult)
        else:
            #如果最大编码为空,设置为01
            this.View.Model.SetValue("FNumber",val+'.'+'01');

赞 13