实现单据创建人的员工属性
单据流程流转或实体服务规则条件等有时候会根据创建人信息来设置,但是创建人为用户信息,并无员工部门及员工任岗信息,无法直接获取。
可以通过添加基础资料字段和编写PYTHON表单插件实现,如图一。
(本篇以销售价目表获取创建人主岗部门为例,其他员工属性请参照数据表字段做SQL语句调整,数据表信息参考使用PDMReader查找数据字典)
图一
具体实现步骤如下:
1、先创建员工信息,再在创建用户时,在联系对象选择该员工。如图二
图二
2、在相应单据的其他页签设置创建人部门字段。元素类型为基础资料,基础资料类型为部门。如图三
图三
3、在单据的表单属性表单插件注册PYTHON脚本,如图四、图五。
图四
图五
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);
图六
图七
参考
老师 您好我想获取员工任岗主岗位信息 相关字段已替换 怎么会报错? 帮忙看看代码
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("F_TYUP_CreateSta"))["ID"];
#取单据的相应组织字段ID
CURRENTORGID=(this.View.Model.GetValue("FSubOrgId"))["ID"];
#取当前用户相应组织的主岗部门ID
sql=("/*dialect*/ SELECT FMasterID 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);
UserMaster = DBServiceHelper.ExecuteScalar(this.Context,sql,None);
#检测显示带参SQL语句是否正确,部门ID是否正确
# this.View.Model.SetValue("F_kd_SQL",sql);
# this.View.Model.SetValue("F_kd_DeptName",UserMaster );
#设置主岗部门ID至创建人部门字段
this.View.Model.SetValue("F_TYUP_CreateSta",UserMaster );
提示这个怎么回事?No module named App
我要实操一下
No module named App 提示错误哦。
采购申请单的申请人,这个是员工任岗信息,这个要如何做
为什么我按照你这个来,错误提示也一样,部门那里就是带不出信息呢
实现单据创建人的员工属性
本文2024-09-16 18:38:30发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-23447.html