用户-人员-员工任岗-业务员-业务组-部门-岗位 关系整理原创
金蝶云社区-邱育华
邱育华
15人赞赏了该文章 1,924次浏览 未经作者许可,禁止转载编辑于2022年12月19日 09:50:41
summary-icon摘要由AI智能服务提供

本文档主要整理了用户、人员、员工任岗、业务员、业务组、部门及岗位之间的复杂关系,并提供了多个SQL查询示例和使用案例。通过SQL查询示例,展示了如何根据用户信息关联到业务员、业务组、任岗、部门及岗位的具体信息。同时,也提供了金蝶系统下的业务应用场景,如出库申请单、调拨申请单等单据处理时如何自动带出相关员工及部门信息,以及如何处理员工任岗信息的增删改查操作。

用户-人员-员工任岗-业务员-业务组-部门-岗位 关系整理


【技术答疑.常用SQL.用户-人员-员工任岗关系】

业务组(枚举) 

  • 库存组-KCZ

  • 计划组-JHZ

  • 采购组-CGZ

  • 质检组-ZJZ

  • 销售组-XSZ



业务员类型(枚举)

  •  销售员-XSY

  • 采购员-CGY

  • 仓管员-WHY

  • 计划员-JHY

  • 财务人员-CWRY

  • 质检员-ZJY

  • 服务人员-FWRY

  • 驾驶员-JSY

  • 程序员-CXY


业务对象FormId
查询用户SEC_UserT_SEC_USER
联系对象BD_ContactObjectV_BD_CONTACTOBJECT(对象类型:员工-T_BD_PERSON、客户-T_BD_COMMONCONTACT(FCOMPANYTYPE = 'BD_Customer')、供应商-T_BD_COMMONCONTACT(FCOMPANYTYPE = 'BD_Supplier'))  
员工BD_EmpinfoT_HR_EMPINFO
业务组列表BD_OPERATORGROUPBILL

T_BD_OPERATORGROUP、T_BD_OPERATORGROUP_L 

T_BD_OPERATORGROUPENTRYT_BD_OPERATORGROUPENTRY_L

业务员列表BD_OPERATORT_BD_OPERATOR、T_BD_OPERATORENTRY 、T_BD_OPERATORDETAILS
员工任岗明细BD_NEWSTAFFT_BD_STAFF
仓管员BD_WAREHOUSEWORKERSV_BD_WAREHOUSEWORKERS(T_BD_OPERATOR)
岗位信息HR_ORG_HRPOSTT_ORG_POST
部门BD_DepartmentT_BD_DEPARTMENT



1、仓库负责人是员工任岗信息,仓管员是业务员,如何产生关联 ?

SELECT t0.FENTRYID, t1.FSTAFFID, d.FPRINCIPAL, d.FNUMBER

FROM   T_BD_OPERATORENTRY t0

       JOIN T_BD_STAFF t1

         ON t0.FSTAFFID = t1.FSTAFFID

            AND t1.FFORBIDSTATUS = 'A'

            AND t1.FDOCUMENTSTATUS = 'C'

       JOIN T_SEC_USER t3

         ON t1.FPERSONID = t3.FLINKOBJECT

   INNER JOIN T_BD_STOCK d ON d.FPRINCIPAL = t1.FSTAFFID

WHERE  t0.FOPERATORTYPE = 'WHY'


2、系统操作上业务员、业务组如何和员工任岗关联起来?

先在业务员这列表里面仓管员里面加上这个员工,然后在这个员工下面加上这个岗位,再给这个业务员新增一个业务分组


image.png


image.png



3、根据当前用户获取业务员(仓管员、销售员等)

SELECT t0.FENTRYID 

FROM T_BD_OPERATORENTRY t0

join T_BD_STAFF t1 on t0.FSTAFFID=t1.FSTAFFID and t1.FFORBIDSTATUS = 'A' AND t1.FDOCUMENTSTATUS='C'

JOIN T_SEC_USER t3 on t1.FPERSONID = t3.FLINKOBJECT

WHERE  t0.FOPERATORTYPE = 'WHY'  AND t0.FISUSE='1' AND  t3.FUSERID = 644075 AND t0.FBIZORGID=100003



4、选择员工(BOS绑定基础资料"员工"),加载任岗部门

员工 -- BD_Empinfo  -- T_HR_EMPINFO 通过"人员"字段 FPersonId 和 T_BD_PERSON表关联


SELECT d.FDEPTID FROM T_BD_PERSON b 

INNER JOIN T_HR_EMPINFO a ON a.FPERSONID = b.FPERSONID

INNER JOIN T_BD_STAFF c ON b.FPERSONID = c.FPERSONID 

LEFT JOIN T_BD_DEPARTMENT d ON c.FDEPTID = d.FDEPTID

WHERE c.FFORBIDSTATUS = 'A' AND a.FID = @员工内码

AND c.FUSEORGID = @机构内码


5、根据登录用户名,查询相关员工、任岗、部门、组织等信息

SELECT a.FUSERID   AS 用户内码,

       a.FNAME     用户名,

       b.FPERSONID AS 人员内码,

       bl.FNAME    AS 人员姓名,

       dl.FNAME    AS 任岗部门名称,

       el.FNAME    AS 任岗岗位名称,

   st.FISFIRSTPOST AS 是否主任岗

FROM   T_SEC_USER a -- 用户表

       INNER JOIN T_BD_PERSON b

               ON a.FLINKOBJECT = b.FPERSONID -- 人员表

       LEFT JOIN T_BD_PERSON_L bl

              ON b.FPERSONID = bl.FPERSONID

                 AND bl.FLOCALEID = 2052

       INNER JOIN T_BD_STAFF c

               ON b.FPERSONID = c.FPERSONID -- 员工任岗表

       LEFT JOIN T_BD_DEPARTMENT d

              ON c.FDEPTID = d.FDEPTID -- 部门表

       LEFT JOIN T_BD_DEPARTMENT_L dl

              ON d.FDEPTID = dl.FDEPTID

                 AND dl.FLOCALEID = 2052

       LEFT JOIN T_ORG_POST e

              ON c.FPOSTID = e.FPOSTID -- 岗位表

       LEFT JOIN T_ORG_POST_L el

              ON e.FPOSTID = el.FPOSTID

                 AND el.FLOCALEID = 2052

       LEFT JOIN T_BD_STAFFTEMP st on st.FPOSTID = el.FPOSTID and st.FSTAFFID = c.FSTAFFID

WHERE  a.FNAME = '0918'


【使用案例】

1、出库申请单扩展销售员(基础资料)能默认当前用户,并携带出销售员对应的领用部门

image.png


新增审核员工任岗信息,指定了业务员类型,会写入业务员明细表(T_BD_OPERATORENTRY),删除员工任岗,需写删除相关业务员

image.png


image.png

image.png


image.png


image.png



2、在调拨申请单中新增了采购员字段,想将金蝶系统上的单据的采购员名称回传至第三方系统,但是只能取到id,取不到姓名,想知道应该取哪个字段才能取到采购员的名字

image.png


SELECT t.FBASE2,
       t0.FENTRYID,
       t1.FSTAFFID,
       l.FNAME
FROM   T_STK_STKTRANSFERAPP t
       JOIN T_BD_OPERATORENTRY t0
         ON t.FBASE2 = t0.FENTRYID
       JOIN T_BD_STAFF t1
         ON t0.FSTAFFID = t1.FSTAFFID
       JOIN T_BD_STAFF_L l
         ON t1.FSTAFFID = l.FSTAFFID
            AND l.FLOCALEID = 2052
WHERE  t.FID = 110227

image.png


3、新增单据自动根据当前用户带出员工和部门

import clr
clr.AddReference('Kingdee.BOS.ServiceHelper')
from Kingdee.BOS.ServiceHelper import * 
from System import StringComparison

def AfterBindData(e):
    userId = this.Context.UserId
    FDOCUMENTSTATUS = this.View.Model.GetValue("FDocumentStatus")
    sqlText = '''SELECT a.FUSERID,a.FNAME,b.FPERSONID,c.FSTAFFID,d.FDEPTID
FROM  T_SEC_USER a INNER JOIN T_BD_PERSON b ON a.FLINKOBJECT = b.FPERSONID   
    LEFT JOIN T_BD_PERSON_L bl ON b.FPERSONID = bl.FPERSONID AND bl.FLOCALEID = 2052
    INNER JOIN T_BD_STAFF c ON b.FPERSONID = c.FPERSONID 
    LEFT JOIN T_BD_DEPARTMENT d ON c.FDEPTID = d.FDEPTID
    LEFT JOIN T_BD_DEPARTMENT_L dl ON d.FDEPTID = dl.FDEPTID AND dl.FLOCALEID = 2052
    WHERE a.FUSERID = {0}'''.format(str(userId))
    dyObjs = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlText)
    if dyObjs.Count > 0 and FDOCUMENTSTATUS == 'Z':
        for item in dyObjs:
            this.View.Model.SetValue("FApplicationDeptId", item["FDEPTID"])
            this.View.Model.SetValue("FApplicantId", item["FSTAFFID"])


4、其他出库单"领料人",根据"领料部门"和"库存组织"做过滤

FUseOrgId = CASE WHEN GetValue(FStockOrgId) IS NULL OR GetValue(FStockOrgId)=0 THEN t0.FUseOrgId ELSE GetValue(FStockOrgId) END AND FDeptId=CASE WHEN GetValue(FDeptId) IS NULL OR GetValue(FDeptId)=0 THEN t0.FDeptId ELSE GetValue(FDeptId) END

image.png


5、其他出库单新增自动携带当前用户对应的任岗部门到单据中的部门和领料人


import clr
clr.AddReference('Kingdee.BOS.ServiceHelper')
from Kingdee.BOS.ServiceHelper import * 
from System import StringComparison

def AfterBindData(e):
    userId = this.Context.UserId
    FDOCUMENTSTATUS = this.View.Model.GetValue("FDocumentStatus")
    sqlText = '''SELECT a.FUSERID,a.FNAME,b.FPERSONID,c.FSTAFFID,d.FDEPTID
FROM  T_SEC_USER a INNER JOIN T_BD_PERSON b ON a.FLINKOBJECT = b.FPERSONID   
    LEFT JOIN T_BD_PERSON_L bl ON b.FPERSONID = bl.FPERSONID AND bl.FLOCALEID = 2052
    INNER JOIN T_BD_STAFF c ON b.FPERSONID = c.FPERSONID 
    LEFT JOIN T_BD_DEPARTMENT d ON c.FDEPTID = d.FDEPTID
    LEFT JOIN T_BD_DEPARTMENT_L dl ON d.FDEPTID = dl.FDEPTID AND dl.FLOCALEID = 2052
    WHERE c.FDOCUMENTSTATUS = 'C' AND a.FUSERID = {0}'''.format(str(userId))
    dyObjs = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlText)
    if dyObjs.Count > 0 and FDOCUMENTSTATUS == 'Z':
        for item in dyObjs:
            this.View.Model.SetValue("FDeptId", item["FDEPTID"])
            this.View.Model.SetValue("FPickerId", item["FSTAFFID"])





以上基于个人理解整理所得,如有错误,还请指正。

图标赞 15
15人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!