员工携带岗位或者部门

【应用场景】
业务单据上有申请人,申请人来源数据为员工,需要在单据上携带申请人对应的部门或者岗位。
以采购订单为列:
场景一:申请人是单任岗,携带采购组织下,在申请人任岗中,携带未禁用且已审核任岗的岗位或部门。
场景二:申请人是多任岗,携带采购组织下,在申请人任岗中,携带未禁用且已审核任岗且是主任岗的岗位或部门。
场景三:申请人是多任岗,携带采购组织下,在申请人任岗中,携带未禁用且已审核任岗且是主任岗且(这里是客户二开的字段逻辑判断)的岗位或部门。
【背景】
产品端在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
员工携带岗位或者部门
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



