通过实施发现,星空的科目编码不会自动获取上级的编码,但是之前的K3及一下的版本都会有这个功能,客户反应不方便,而且用编码规则设置也不起作用。 我是用通过python插件来实现自动获取上级编码规则。
先看效果,当没有勾选上级科目的时候,编码不会自动获取。
当选中一个科目时,就会获取科目的代码+流水号(流水号也会自动获取新的)
下面放出代码,需要两个插件,一个列表插件,一个表单插件(表单插件会报错不影响,点确认就好)
列表插件:
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');
推荐阅读