电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

员工携带岗位或者部门

来源:金蝶云社区作者:金蝶2024-09-232

员工携带岗位或者部门

【应用场景】

业务单据上有申请人,申请人来源数据为员工,需要在单据上携带申请人对应的部门或者岗位。

以采购订单为列:

场景一:申请人是单任岗,携带采购组织下,在申请人任岗中,携带未禁用且已审核任岗的岗位或部门。

场景二:申请人是多任岗,携带采购组织下,在申请人任岗中,携带未禁用且已审核任岗且是主任岗的岗位或部门。

场景三:申请人是多任岗,携带采购组织下,在申请人任岗中,携带未禁用且已审核任岗且是主任岗且(这里是客户二开的字段逻辑判断)的岗位或部门。


【背景】

产品端在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

员工携带岗位或者部门

【应用场景】业务单据上有申请人,申请人来源数据为员工,需要在单据上携带申请人对应的部门或者岗位。以采购订单为列:场景一:申请人是单...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信