实现单据创建人的员工属性原创
金蝶云社区-Yufu
Yufu
12人赞赏了该文章 3,184次浏览 未经作者许可,禁止转载编辑于2021年12月24日 11:20:26

 单据流程流转或实体服务规则条件等有时候会根据创建人信息来设置,但是创建人为用户信息,并无员工部门及员工任岗信息,无法直接获取。

可以通过添加基础资料字段和编写PYTHON表单插件实现,如图一。

本篇以销售价目表获取创建人主岗部门为例,其他员工属性请参照数据表字段做SQL语句调整,数据表信息参考使用PDMReader查找数据字典

image.png

图一

具体实现步骤如下:

1、先创建员工信息,再在创建用户时,在联系对象选择该员工。如图二

image.png

图二

2、在相应单据的其他页签设置创建人部门字段。元素类型为基础资料,基础资料类型为部门。如图三

image.png

图三

3、在单据的表单属性表单插件注册PYTHON脚本,如图四、图五。

image.png

图四

image.png

图五

4、PYTHON脚本设置OnLoad事件,见图六(代码详见附件)。保存时会有图错误提示,如与图七提示相同,可确定忽略,若不同,请检查语法。

import clr
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference("Kingdee.BOS.ServiceHelper")
#clr.AddReference("Kingdee.BOS.App")
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.ServiceHelper import *
from Kingdee.BOS.App.Data import *

def OnLoad(e):
#取创建人ID
    userID=(this.View.Model.GetValue("FCreatorId"))["ID"];
#取单据的相应组织字段ID    
    CURRENTORGID=(this.View.Model.GetValue("FCreateOrgId"))["ID"];
#取当前用户相应组织的主岗部门ID,用户表T_SEC_USER通过FLINKOBJECT字段与员工表T_BD_STAFF的FPERSONID关联。表T_BD_STAFFPOSTINFO的FISFIRSTPOST为主岗标志   

    sql=("/*dialect*/ SELECT FDEPTID FROM T_BD_STAFF TBS LEFT JOIN T_BD_STAFFPOSTINFO TBSI ON TBS.FSTAFFID= TBSI.FSTAFFID WHERE TBS.FPERSONID IN (SELECT FLINKOBJECT FROM T_SEC_USER WHERE FUSERID='{0}' AND FTYPE='1') AND TBS.FUSEORGID='{1}' AND TBS.FFORBIDSTATUS='A' AND TBS.FDOCUMENTSTATUS ='C' AND TBSI.FISFIRSTPOST='1'").format(userID,CURRENTORGID);
    UserDept = DBServiceHelper.ExecuteScalar(this.Context,sql,None);
#检测显示带参SQL语句是否正确,部门ID是否正确    
#    this.View.Model.SetValue("F_kd_SQL",sql);
#    this.View.Model.SetValue("F_kd_DeptName",UserDept);
#设置主岗部门ID至创建人部门字段
    this.View.Model.SetValue("F_kd_CreateDep",UserDept);

image.png

图六

image.png

图七


参考


赞 12