员工携带岗位或者部门
【应用场景】
业务单据上有申请人,申请人来源数据为员工,需要在单据上携带申请人对应的部门或者岗位。
以采购订单为列:
场景一:申请人是单任岗,携带采购组织下,在申请人任岗中,携带未禁用且已审核任岗的岗位或部门。
场景二:申请人是多任岗,携带采购组织下,在申请人任岗中,携带未禁用且已审核任岗且是主任岗的岗位或部门。
场景三:申请人是多任岗,携带采购组织下,在申请人任岗中,携带未禁用且已审核任岗且是主任岗且(这里是客户二开的字段逻辑判断)的岗位或部门。
【背景】
产品端在8.0.100.202203版本,增加了函数GetStaffInfo来获取员工对用的岗位或部门,逻辑:有主任岗就默认带主任岗(不区分单据的组织),如果没有主任岗,就带员工在这个组织(单据主业务组织)下的第一个任岗 岗位,在使用中发现有场景不满足,函数使用参考:https://vip.kingdee.com/article/308578805650860800?productLineId=1&lang=zh-CN。
另外,员工信息包含任岗信息,考虑使用表达式去做,但任岗分录里,部分字段名称为空,导致表达式取不到值。
以下解决思路,是对员工单据扩展,增加员工任岗扩展分录,将需要的字段信息放到分录里,用表达式方式取部门或者岗位。以采购订单单据为例。
【案例演示】
场景一:申请人是单任岗,携带采购组织下,在申请人任岗中,携带未禁用且已审核任岗的岗位或部门。
步骤1:增加视图:
create view [view_empinfo_post] as select M.FID, M.FENTRYID, M.FWORKORGID, M.FDEPTID, M.FPOSTID, D.FDOCUMENTSTATUS, D.FFORBIDSTATUS, F.FISFIRSTPOST from t_bd_stafftemp M inner join t_bd_staff D on D.FSTAFFID = M.FSTAFFID left join T_BD_STAFFPOSTINFO F on F.FSTAFFID = D.FSTAFFID
步骤2:扩展员工,并新增员工任岗扩展分录。分录表关联步骤一视图。
分录表名:view_empinfo_post,表类型:视图,分录主键:orm实体名:PostEntityExt。
分录每个字段,字段名,绑定实体属性
工作组织 FWORKORGID WorkOrgId
部门 FDEPTID PostDept
岗位 FPOSTID PostId
单据状态 FDOCUMENTSTATUS DocumentStatus
禁用状态 FFORBIDSTATUS ForbidStatus
主任岗 FISFIRSTPOST isFirstPost
备注:字段名来源视图字段,绑定实体属性用于表达式
步骤3:在采购订单增加字段。基础资料_员工,基础资料_部门,基础资料_岗位。基础资料_员工需要引入以下字段
步骤4:设置基础资料_员工,值更新事件。
部门:
F_UNW_Base_zc5 = 0 if FBase.ActiveObject == null else( map(lambda x:0 if x.PostDept == null else x.PostDept.Id, filter(lambda x:x.WorkOrgId.id == FPurchaseOrgId.Id and x.ForbidStatus=='A' and x.DocumentStatus == 'C', FBase.ActiveObject.PostEntityExt))[0] if len(filter(lambda x:x.WorkOrgId.id == FPurchaseOrgId.Id and x.ForbidStatus=='A' and x.DocumentStatus == 'C', FBase.ActiveObject.PostEntityExt)) > 0 else 0)
岗位
F_UNW_Base_imu =0 if FBase.ActiveObject == null else( map(lambda x:0 if x.PostId == null else x.PostId.Id, filter(lambda x:x.WorkOrgId.id == FPurchaseOrgId.Id and x.ForbidStatus=='A' and x.DocumentStatus == 'C', FBase.ActiveObject.PostEntityExt))[0] if len(filter(lambda x:x.WorkOrgId.id == FPurchaseOrgId.Id and x.ForbidStatus=='A' and x.DocumentStatus == 'C', FBase.ActiveObject.PostEntityExt)) > 0 else 0)
备注:FBase 为单据中的基础资料_员工,F_UNW_Base_zc5为基础资料_部门,F_UNW_Base_imu为基础资料_岗位。
要用实际使用中单据字段标识。
步骤5:实际效果:
场景二:申请人是多任岗,携带采购组织下,在申请人任岗中,携带未禁用且已审核任岗且是主任岗的岗位或部门。
步骤1,2,3 参考场景一
步骤4.基础资料_员工,值更新事件。
部门:
F_UNW_Base_zc5 = 0 if FBase.ActiveObject == null else( map(lambda x:0 if x.PostDept == null else x.PostDept.Id, filter(lambda x:x.WorkOrgId.id == FPurchaseOrgId.Id and x.ForbidStatus=='A' and x.DocumentStatus == 'C' and x.IsFirstPost==True, FBase.ActiveObject.PostEntityExt))[0] if len(filter(lambda x:x.WorkOrgId.id == FPurchaseOrgId.Id and x.ForbidStatus=='A' and x.DocumentStatus == 'C' and x.IsFirstPost==True, FBase.ActiveObject.PostEntityExt)) > 0 else 0)
岗位:
F_UNW_Base_imu =0 if FBase.ActiveObject == null else( map(lambda x:0 if x.PostId == null else x.PostId.Id, filter(lambda x:x.WorkOrgId.id == FPurchaseOrgId.Id and x.ForbidStatus=='A' and x.DocumentStatus == 'C' and x.IsFirstPost==True, FBase.ActiveObject.PostEntityExt))[0] if len(filter(lambda x:x.WorkOrgId.id == FPurchaseOrgId.Id and x.ForbidStatus=='A' and x.DocumentStatus == 'C' and x.IsFirstPost==True, FBase.ActiveObject.PostEntityExt)) > 0 else 0)
步骤5:实际效果
场景三:申请人是多任岗,携带采购组织下,在申请人任岗中,携带未禁用且已审核任岗且是主人干且(这里是客户二开的字段逻辑判断)的岗位或部门。一人在多个组织下,任多个岗位,携带出一个组织下,一个任岗。
步骤1:员工任岗增加字段,字段名“选中此条任岗”
步骤2:增加视图
create view [view_empinfo_post] as select M.FID, M.FENTRYID, M.FWORKORGID, M.FDEPTID, M.FPOSTID, D.FDOCUMENTSTATUS, D.FFORBIDSTATUS, F.FISFIRSTPOST, D.FSELECTED from t_bd_stafftemp M inner join t_bd_staff D on D.FSTAFFID = M.FSTAFFID left join T_BD_STAFFPOSTINFO F on F.FSTAFFID = D.FSTAFFID
备注:D.FSELECTED 二开字段名
步骤3:参考场景一中步骤2,在分录里多加了字段
分录每个字段,字段名,绑定实体属性
选中此条任岗 FSELECTED Selected
步骤4:在采购订单增加字段。基础资料_员工,基础资料_部门,基础资料_岗位。基础资料_员工需要引入以下字段
步骤5:设置基础资料_员工,值更新事件。
部门:
F_UNW_Base_zc5 = 0 if FBase.ActiveObject == null else( map(lambda x:0 if x.PostDept == null else x.PostDept.Id, filter(lambda x:x.WorkOrgId.id == FPurchaseOrgId.Id and x.ForbidStatus=='A' and x.DocumentStatus == 'C' and x.Selected==True, FBase.ActiveObject.PostEntityExt))[0] if len(filter(lambda x:x.WorkOrgId.id == FPurchaseOrgId.Id and x.ForbidStatus=='A' and x.DocumentStatus == 'C' and x.Selected==True, FBase.ActiveObject.PostEntityExt)) > 0 else 0)
岗位:
F_UNW_Base_imu =0 if FBase.ActiveObject == null else( map(lambda x:0 if x.PostId == null else x.PostId.Id, filter(lambda x:x.WorkOrgId.id == FPurchaseOrgId.Id and x.ForbidStatus=='A' and x.DocumentStatus == 'C' and x.Selected==True, FBase.ActiveObject.PostEntityExt))[0] if len(filter(lambda x:x.WorkOrgId.id == FPurchaseOrgId.Id and x.ForbidStatus=='A' and x.DocumentStatus == 'C' and x.Selected==True, FBase.ActiveObject.PostEntityExt)) > 0 else 0)
步骤6:效果
员工携带岗位或者部门
本文2024-09-23 03:39:43发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-160284.html