s-HR人力编制逻辑,表结构及工具类总结
【适用版本】
s-HR V8.5SP1及以上版本
【注意事项】
s-HR V8.6.1.2之后新增多维编制,多维编制和人力编制关于编制,维度,起初人数等概念含义是一样的,但是多维编制可设置多个维度的控编,表结构和工具类也不同于人力编制,本文只介绍人力编制相关内容。
【功能说明】
1、编制概念
1.1 编制是什么?做什么?
其实大家都懂编制是什么意思,一个职位给多少编制就能入多少人,就这个意思。进而可以引申到组织的编制,以及其它维度的编制设置。
通过设置某一维度的编制,比如职位,可以控制职位的编制人数,方便细微的管控此职位的占编人数变化,达到集团人员管控的目的。
1.2 什么是占编制
目前系统业务对“占编制”的定义是:任职占编制并且用工关系状态占编制。需要注意的是“占编制”和“占人头”是两个概念,不要混淆。
任职占编制:可以通过EAS客户端 —> 员工变动操作配置查看,任职为主任职并且变动类型占编制即为任职占编制。
用工关系状态占编制: 可以通过员工基础资料数据维护 —> 用工关系状态 查看是否占编制。
获取当前的占编人数:可以通过员工信息维护页面的高级过滤
1.3 维度和频度
老编制系统编制的设置固定为三个维度,分别是组织、职位、用工关系
频度有两个,分别为年、月
即老编制系统支持3个维度和2个频度的组合控编
1.4 期初人数
编制期初人数指:上月月底时刻的人数,不是当前时间的占编人数,是以变动记录表为主体
比如当前是2020年12月份,则12的期初人数是取的2020-11-30 23:59:59 的占编人数
1.5 流入流出
流入流入指:当前组织或职位的人数流入或者流出,以流入流出表为主体
单据未生效则为预计流入流出,有在途数据;单据生效则变为实际流入流出,删除在途数据
1.6 汇总编制、直属编制
以组织来说,组织是有层级的。
A组织的汇总编制就是A组织包含下级的编制数,也就是A组织直属编制 + A组织下级组织编制之和。
A组织的直属编制就是字面的意思,就是A组织自身的编制数,不包含下级的编制,其实也就是组织下职位的编制之和的最大数量。
需要注意的是,编制表页面上展示的是汇总编制,如果只导入直属编制,那么在编制表页面是没有数据显示的。
1.7 定编明细
处理提单时,很多人问定编明细是什么意思?甚至有些人把编制数据写到定编明细字段中,然后问为什么编制没有生效…
据我理解及咨询德马,定编明细这个字段没有用处,没有实际的业务意义;
它可以被理解为或者用做 “备注”。比如原来打算给A组织设置10个编制,于是可以给定编明细设置为10,具体编制也为10,后来由于各种各样的理由,A组织的编制更改了很多次,变成了16,这时候可以不忘初心看到定编明细,明白了自己的初衷是10.
由此看到,定编明细确实没什么用,不用过多关注。
2、页面及对应功能
人力编制模块主要包括四个页面,分别是人力编制表、人力编制控制线、人员需求申请、人力编制动态预览。其中核心和最常用的是人力编制表、人力编制动态预览。
2.1 人力编制表
人力编制表可录入基于行政组织、职位、用工关系维度的人力编制,同时也支持年度、月度的人力编制维护,是编制系统最核心的部分,用于建立编制表并录入编制数据。
(PS: 用工关系维度的编制在实际业务中很少有人使用,主要还是组织维度、职位维度,或者组织+职位)
2.2 人力编制动态预览
人力编制动态预览可以查询各行政组织、职位、用工关系状态下的编制数、实际人数、流入流出及可用编制人数情况,各维度的编制情况一览无遗,是业务人员最常用的功能。
2.3 人力编制控制线
人力编制控制线支持自上而下人力编制,上级可以控制下级行政组织的编制总数不能超过控制线。
说白了就是可以给组织设置一条线,设置的编制数不能超过这条线,不选控制线的话,编制数就不限制填写。
(PS:控制线在实际业务上基本没人使用)
2.4 人员需求申请
用人部门提交人员需求申请,可支持增补人员申请及扩编申请流程。
人员需求申请的初衷是正规的增编流程,比如一个编制表已经填好了编制并启用了,A职位的占编人数已满,但是现在A职位需要再入职一个人,那么就可以走人员需求申请,通过工作流审批增加编制。当然了,编制表提供了变更的功能,可以直接改编制。
人员需求申请功能存在一定的缺陷,详见后文。
3、主要实现类
3.1 人力编制表
com.kingdee.shr.costbudget.web.handler.StaffingListHandler
com.kingdee.shr.costbudget.web.handler.StaffingHandler (编制表的最重要handler)
com.kingdee.shr.costbudget.util.StaffingExcelUtil(Excel工具类,主要是全量导入的逻辑)
com.kingdee.shr.costbudget.util.StaffingHelper(编制工具类)
3.2 人力编制动态预览
com.kingdee.shr.costbudget.web.handler.StaffingStatHandler(动态预览页面的数据)
com.kingdee.shr.costbudget.util.StaffingStatHelper(期初人数、流入流出等重要的SQL)
3.3 人员需求申请
com.kingdee.shr.costbudget.web.handler.StaffingAddBillEditHandler(表单)
com.kingdee.shr.costbudget.web.handler.StaffingAddBillListHandler(列表)
3.4 人力编制控制线
目前业务来看并不重要:
com.kingdee.shr.costbudget.web.handler.StaffingControlEditHandler(表单)
com.kingdee.shr.costbudget.web.handler.StaffingControlListHandler(列表)
3.5 编制历史表处理
“变更中”状态的编制走的是历史表,不过尽量不要在变更中去处理提单,麻烦!等它生效
com.kingdee.shr.costbudget.web.handler.StaffingHisListHandler
com.kingdee.shr.costbudget.web.handler.StaffingHisViewHandler
4、主要数据表
4.1 编制重要表
T_HR_staffing 人力编制表
T_HR_staffingOrg 组织编制数据表
T_HR_staffingPost 职位编制数据表
T_HR_staffingLaborRelation 用工关系编制数据表(基本不用)
文章不会提供数据字典,如有需要可通过s-HR系统下载数据字典查看。
4.1.1 T_HR_Staffing
记录人力编制列表的信息,通过此表关联组织、职位编制表的具体数据
4.1.2 T_HR_StaffingOrg
记录组织的具体编制数据,通过字段FStaffing和人力编制表关联
查询数据:SELECT * FROM t_hr_staffingorg where FStaffing = '' and FAdminOrgUnit = '' and FMonth = 0 ; 再加一个FState就可以唯一确定一条数据。
FMonth = 0即查询年度编制,为1-12 即查询月份具体编制,查询根据频度来定。
表里面是设计了年度编制两个字段的,后面应该是弃用了,不要产生误解。
4.1.3 T_HR_StaffingPost
记录职位的具体编制数据,和组织编制表差不多,多了个职位字段,相当于编制具体到组织下面的职位了。组织、职位,组织+职位是最常用的控编组合。
4.2 相关重要表
T_BD_PersonHis 员工历史表
T_HR_EmpOrgRelation 员工变动记录表
这两张表是编制获取期初人数的关键表。
T_HR_EmpFlowInOut 流入流出表
计算编制流入流出的关键表。
T_HR_EmpPosChangeData 任职经历变化过程表(在途数据)
单据还没有正式生效时的在途数据,生效后事务删除,编制的计算要算入在途表的数据。
5、重要OSF和方法
5.1 GetStaffingStateService
编制最重要的OSF,各控编入口调用,返回控编结果。
参数说明:
adminOrg.id: 需要获取编制状态的 行政组织 id值 ,非必填
position.id: 需要获取编制状态的 职位id值,非必填
employeeModle.id: 需要获取编制状态的 用工关系的id值,非必填
hassub:是否包含下级
bizDate:取数参考时间,时间格式yyyy-MM-dd 或者:yyyy-MM-dd HHss。
返回值:
orgId: 缺编组织id
orgName: 缺编组织名称
positionId: 缺编职位id
positionName: 缺编职位名称
labelRelationId: 用工关系类型id
labelRelationName: 用工关系类型名称
isStaffingShort: 是否缺编
shortNumber: 缺编数量
5.2 SHRPersonCountOfPersonPlanService
获取当前编制人数及在途人数,GetStaffingStateService中有调用此OSF计算可用编制。
参数说明:
adminOrg.id: 需要获取编制状态的 行政组织 id值 ,非必填
position.id: 需要获取编制状态的 职位id值,非必填
employeeModle.id: 需要获取编制状态的 用工关系的id值,非必填
hassub:是否包含下级
bizDate:取数参考时间,时间格式yyyy-MM-dd 或者:yyyy-MM-dd HHss。
返回值:
subPersonCount : 在途需减少编制人数
addPersonCount: 在途需添加编制人数
personCount: 当前实际在编人数
5.3 SHRActionVerifyByPersonPlanCustomerTool工具类
编制校验拓展工具类:
此工具类封装了入编制和去编制的一些校验方法,以及单据提交审批、撤销、删除时需要处理编制数据的相关方法,如果入转调离使用编制逻辑和系统原有业务不匹配时,需要二开独立业务功能时,使用该工具类是具有很好的参考性 ,这是人力编制模块最重要的工具类,基本封装了需要使用的功能,异常处理也非常智能。
工具类常用方法说明:
5.3.1 canAddSHRPerson方法
逻辑: 判断组织、职位、用工关系是否可以添加占编人数。
5.3.2 deleteEmpPosChangeData方法
逻辑: 删除任职经历变化过程表数据,经常撤销或反审批单据时调用。
5.3.3 refreshEmpPosChangeDataState方法
逻辑: 刷新任职经历变化过程表数据状态
5.4 人力编制表的保存方法
人力编制表是编制的核心。保存这一块从前端到后端都有很多有趣的东西,特别是前端的组织树,还有翻页控件等。后端很多的校验逻辑,值得把保存的链路都看一遍。
5.5 动态预览获取数据方法
动态预览页面三个维度获取页面数据的方法,里面包含了期初人数,流入流出,可用编制的SQL和计算逻辑,看完基本就知道编制的大部分逻辑了。
6、常见问题及解决思路
6.1填写了编制数据却没有控编
思路:主要是看EAS客户端有没有开启多维控编参数
6.2 页面上编制数量足够,但是入职被控住了编
思路:页面上填写的是汇总编制,入职是需要校验职位的编制的,如果组织也填写了编制,那么还需要校验组织的直属编制。页面上看起来此组织填写了编制,实际上数据库存的直属编制不足,就会校验住。所以需要去组织表看一下直属编制够不够。
6.3 职位编制同步汇总到组织编制问题
6.3.1 职位编制没有同步到组织编制
思路:1、首先需要去看EAS客户端的同步汇总参数是否打开。
2、同步汇总的触发条件是职位的编制发生改变,而不是有些人以为的定时任务一样。功能是写在职位编制的保存里面,而前端传入的编制保存参数只会拿更改的数据,可以去看看保存的逻辑。
6.3.2 同步之后的数据不对
思路:因为把封存组织、职位的编制也算了进去。这个问题85SP1我已经修改了。
6.4 是否可以支持组织编制汇总
目前不能支持,组织编制汇总存在两个问题:
1、 组织之间存在层级关系,会重复汇总。
2、 组织同步汇总和职位同步汇总相冲突。
6.5 (提单很多、重点)编制动态预览数据不对
6.5.1 期初人数问题
概念部分提到了对期初人数的定义,并且现在已经在85SP1版本修复了正确的期初人数SQL。
未打最新补丁的期初人数可能存在几个问题:
1、 三个维度原先取得是月初的00:00:00 ,不符合单据的生效时间,并且会和流入流出的时间重复产生重复的计数,造成错误的可用编制。
2、 用工关系维度的期初人数计算不正确。因为离职时用工关系为空的情况会匹配不到,最新已更改为从用工关系历史表去匹配。
6.5.2 流入流出人数问题
流入流出分为实际流入流出和预计流入流出,这一块的数据问题很多,本身程序上就有很多问题。
以离职为例,发起离职单,如果这个人占编(任职、用工关系都占编制),那么会立即算入在途数据,预计流出+1,可用编制+1,离职单据生效(最后工作日后一天),实际流出+1。
流入流出原来存在的主要问题是:离职时用工关系为空,SQL用的是inner join匹配不上,应该改为left join,此问题85SP1已修复。
但是预计流入流出现在的玩法其实也是存在问题的,比如一个1月的调动单,现在已经到2月了,那个单还是没有审批,所以也不在预计流入流出里面,动态预览里面显示不到这条数据,在途表里面有这条数据,编制会校验住,提单自然来了。这种情况目前看程序来讲,应该改成校验在途表的所有数据,而不是当前月份的单据生效数据。但还需要考虑会不会有其它影响。
6.5.3 临时更改是否占编问题
场景:举例系统预置的一个用工关系状态“劳务派遣”默认为占编;
比如系统中11月有10个用工关系为劳务派遣的占编的人,那12月这10个人统计在期初人数里面;现在在12的某一天将“劳务派遣”更改为不占编,这种操作在流入流入表不会产生数据,那么在编制里面也不会体现出来,“劳务派遣”的人还是会继续占着编制。
目前确实是这样的,但有些客户觉得不合适,还在需求分析中。
6.5.4 历史补录问题
场景:如当前月份是12月份,11月份补录入职,校验的编制均为12月份(当前月份)数据。
经分析应该改为:单据生效月份编制数 - 单据生效月份下月期初人数
概要不在我手里,估计下个补丁会修复历史补录的问题。
6.6 汇总编制和直属编制问题
前面已经解释过汇总和直属的概念,这种问题就是因为客户或实施没有理解这种关系。
1、导入时只填了直属,然后页面显示的是汇总,就觉得数据没有导入进去。
2、控编时被控住了,只看页面编制表的数据,不去看动态预览。
这些情况都是因为没有区分出汇总和直属。
6.7 导入问题
编制这边的导入分为82开始的全量导入和85SP1新增的空模板导入,目前来说,全量导入用得比较多一点。
需要注意的是,编制全量导入不是用的平台的导入逻辑,是领域自己写的Excel读取导入,目前来说存在一些问题。
1、目前的导入时逐行读取,没有解决并发导入的问题,所以大并发导入可能会导入重复数据,造成脏数据编制校验的问题。这个问题目前程序并没有很好的解决方案,不过用户存在此问题的也比较少,现在一般是清理重复数据。
3、 导入大数据量时,会存在进度条报302的问题。以前测试环境复现了,但现在又不能复现,目前没有分析出原因。
4、 导入的编制数据必须是数值格式,文本格式可能会读取不到导不进去。这类问题还挺多的,别去看提单上说确认是数值格式什么的,明明是文本格式的数值,在那里确认确认。碰到说导入导不进去的,先去看看是不是数值。
5、 第四种导不进去就是前面所说的,只填了直属编制或者定编明细,而页面显示的是汇总编制。
6.8 人员需求申请的缺陷
当某个维度需要增编走审批流程时,那么会用到人员需求申请。
人员需求申请页面必须填写组织和职位,也就是说这个增编你是具体到职位的。但是有些客户只用组织控编,并不用职位维度,那么一走人员需求申请的话就会填上职位的编制,造成整个编制数据错误。
目前来说的话设计如此,只能说人员需求申请目前不满足只控组织维度的情况增编,这是一个设计上的缺陷。这种情况就需要走编制表变更。
6.9 员工初始化导入影响流入流出的问题
目前编制占编的定义中有一个是任职占编制,任职占编制就包括了任职为主任职+变动类型占编制。
而员工初始化导入几个版本来都存在一个问题,导入的员工在流入流出表初始化任职状态写死为0,即为兼职,但实际在变动记录表中是为主任职。这样的话员工做操作时,流入流出不会在编制动态预览上体现,因为判定这个员工初始就是不占编的。最近这类问题挺多的,需要将流入流出表的任职状态改为正确的。
6.10 如何实现部分控编
有些大型集团,并不是整颗组织树都想使用编制,而是部分组织想要控编,目前人力编制是可以支持这种需求的。
做法:只填写需要控编的组织即可,不需要控编的组织不填写编制数据,即可实现部分控编。
大概总结这10个比较常见的问题,供大家参考。
s-HR人力编制逻辑,表结构及工具类总结
本文2024-09-22 21:07:08发表“s-hr cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-shr-118014.html