关于某一特定日期的在职人员统计方法
金蝶云社区-Jimmy_G
Jimmy_G
1人赞赏了该文章 874次浏览 未经作者许可,禁止转载编辑于2020年02月13日 08:41:06

在项目实施中,客户往往需要我们能够针对某一特定日期去统计在职人员的各个维度的情况,此时就要使用到员工企业内任职经历进行查询。但任职经历对应的后台表 T_HR_EmpOrgRelation 中,存有任职组织,任职职位,是否主要任职等信息,却没有用工关系状态信息。
用工关系状态的历史数据是存储在 T_HR_EmpLaborRelationhis 表中的,当员工的用工关系状态发生变化,便会自动记录在该表中,当员工发生任职经历变化,却没有发生用工关系状态变化时,T_HR_EmpLaborRelationhis 表是不会新增历史记录的。
因此如果我们需要自行设计数据源制作报表或者提供给客户IT部使用,就需要涉及到对上述两个表的开始结束日期的关联连接,才能即获取到员工的任职职位任职组织信息,又同时获取到用工关系状态信息(用来判断是否是在职状态)。

以82版本为例,以下SQL语句供参考,通过传入一个统计日期参数,与以下数据源的任职开始日期,任职结束日期比较,便可获取到当日的在职员工明细数据,在此基础上,可以再根据客户实际需要,进行扩展,加工。

select
(select Fnumber from t_bd_person where fid=a.fpersonid) 员工编码,
(select Fname_l2 from t_bd_person where fid=a.fpersonid) 员工姓名,
a.FEFFDT 任职开始日期 ,a.FLEFFDT 任职结束日期,
(select Fname_l2 from T_ORG_ADMIN where fid=d.FCompanyID) 任职公司,
(select Fname_l2 from T_ORG_ADMIN where fid=d.FDepartmentID) 任职部门,
(select Fname_l2 from T_ORG_ADMIN where fid=d.Fid) 任职组织,
(select Fname_l2 from T_org_position where fid=a.Fpositionid) 任职职位,
c.FName_L2 用工关系状态
from T_HR_EmpOrgRelation a left join T_HR_EmpLaborRelationhis b
on a.fpersonid=b.fpersonid and a.feffdt>=b.feffdt and a.feffdt<=b.FLEFFDT
and a.FLEFFDT >= b.feffdt and a.FLEFFDT <= b.FLEFFDT
left join T_HR_BDEmployeeType c on b.FLaborRelationStateID=c.FID
left join T_ORG_Admin d on a.FAdminOrgID=d.FID
where c.FIsIncount=1 and c.FIsOnTheStrength=1 and a.FAssignType=1

注意,是否占人头和占编制,是由用工关系状态决定的,因此 通过限定 T_HR_BDEmployeeType 表 的 FIsIncount 及 FIsOnTheStrength 字段,可以筛选到在职人员。
而是否主要任职字段是存储在任职经历里的,所以通过限定 T_HR_EmpOrgRelation 的 FAssignType 字段,既可以筛选到主要任职。