HR薪酬权限控制

阅读: 评论:0

HR薪酬权限控制

HR薪酬权限控制

需求描述:人员“张三”的人事调动如表所示:

人事范围为A的负责人查看张三的薪资信息时,只能看到张三2010年和2012年的相关记录,不能查看2011年的薪资信息。

PA20、PA30权限控制
首先查看基本工资表PA0008,人员号80000054有3条数据;

执行PA20,查看基本工资


只能显示一条相关数据,有两条数据被过滤掉。

解决方法:

1)启用BADI HRPAD00AUTH_CHECK,并将里面涉及到的所有方法及类的声明等根据标准类CL_HRPAD00AUTH_CHECK_STD(通过SE80查看)重新复写。

找到方法CHECK_AUTHORIZATION,在复制完源代码基础上,添加代码

export zpernr from pernr to MEMORY id 'zpernr'.

2)找到方法CONSIDER_SY_DATUM,在代码的59行会调用方法consider_sy_datum_exit,重写此方法的代码。


METHOD if_ex_hrpad00auth_time~consider_sy_datum_exit.DATA: BEGIN OF lw_date,begda TYPE pa0001-begda,endda TYPE pa0001-endda,END OF lw_date,BEGIN OF lw_werks,pernr TYPE pa0001-pernr,werks TYPE pa0001-werks,begda TYPE pa0001-begda,endda TYPE pa0001-endda,END OF lw_werks.
DATA: l_pernr TYPE rp50g-pernr,l_per   TYPE rp50g-pernr,l_infty TYPE t582a-infty.
DATA: lt_werks LIKE TABLE OF lw_werks,lt_pernr LIKE TABLE OF lw_werks,lw_pernr LIKE lw_werks,lw_period TYPE hrperiods.IF sy-tcode(1) = 'Z'.   "客制化报表不执行此逻辑EXIT.ENDIF.
*-----------------取得需要控制日期的信息类型----------------------*IF infty = '0008' OR infty = '0014' OR infty = '0015'OR infty = '0267' OR infty = '2010'.IMPORT zpernr TO l_pernr FROM MEMORY ID 'zpernr'.IF sy-subrc <> 0.it_flag = 'X'."取得当前用户的人员编号SELECT SINGLE pernrFROM pa0105INTO l_perWHERE usrid = sy-uname."根据人员编号取得其对应的人事范围SELECT pernrwerksbegdaenddaFROM pa0001INTO TABLE lt_werksWHERE pernr = l_perAND begda <= sy-datumAND endda >= sy-datum.IF sy-subrc = 0.DELETE authorization_periods_tab WHERE begda IS NOT INITIAL.ENDIF.SELECT pernrwerksFROM pa0001INTO CORRESPONDING FIELDS OF TABLE lt_pernrWHERE pernr = l_pernr."检查人员号的人事范围LOOP AT lt_pernr INTO lw_pernr.READ TABLE lt_werks INTO lw_werks WITH KEY werks = lw_pernr-werks.IF sy-subrc = 0.lw_period-begda = lw_werks-begda.lw_period-endda = lw_werks-endda.APPEND lw_period TO authorization_periods_tab.ENDIF.it_flag =  ' '.ENDIF.
ENDMETHOD.

3)逻辑:

T-CODE以Z开头的会话不执行此段程序;

信息类型为8、14、15、267、2010时执行此段程序;

取得当前用户对应的人事范围及期间(PA0015、PA0001);

取得被查询人的所有人事范围及期间;

逐条检查,当被查询人的人事范围与当前用户的人事范围不同时,此条信息剔除;当被查询人的人事范围与当前用户的人事范围相同但是日期期间没有交集时,此条信息剔除。

PC_PAYRESULT及自开发报表权限控制
1)PC_PAYRESULT的显示效果:

当执行PC_PAYRESULT时,可以看到人员的所有条目,当双击某一条条目查看明细信息时,进行权限校验,逻辑同PA20。
2) 自开发报表zhrnr_002的显示效果

80000054实际有3条数据,通过控制后只显示1条数据。
解决方法:
找到函数PYXX_READ_PAYROLL_RESULT,在函数的最后创建增强点。

ENHANCEMENT 1  ZPA001.    "active versiondata: BEGIN OF lw_werks,pernr TYPE pa0001-pernr,werks TYPE pa0001-werks,begda TYPE pa0001-begda,endda TYPE pa0001-endda,END OF lw_werks.data: l_per   TYPE rp50g-pernr.data: lt_werks LIKE TABLE OF lw_werks,lt_pernr LIKE TABLE OF lw_werks,lw_pernr LIKE lw_werks.FIELD-SYMBOLS: <versc> TYPE pc202.IF sy-tcode <> 'PC_PAYRESULT' AND sy-tcode(1) <> 'Z'.EXIT.ENDIF."取得当前用户的人员编号SELECT SINGLE pernrFROM pa0105INTO l_perWHERE usrid = sy-uname."根据人员编号取得其对应的人事范围SELECT pernrwerksbegdaenddaFROM pa0001INTO TABLE lt_werksWHERE pernr = l_perAND begda <= sy-datumAND endda >= sy-datum."当前人员对应的人事范围及期间SELECT pernrwerksbegdaenddaFROM pa0001INTO TABLE lt_pernrWHERE pernr = employeenumber.ASSIGN COMPONENT 'INTER-VERSC'OF STRUCTURE payroll_result TO <versc>."检查人员号的人事范围LOOP AT lt_pernr INTO lw_pernr where begda <= <versc>-FPBEGand endda >= <versc>-FPEND."当前条目所属的人事范围READ TABLE lt_werks INTO lw_werks WITH KEY werks = lw_pernr-werks.IF sy-subrc <> 0.IF sy-tcode(1) = 'Z'.MESSAGE '不同的人事范围,没有查看权限' TYPE 'I' RAISING no_record_found.else.MESSAGE '不同的人事范围,没有查看权限' TYPE 'E'.ENDIF.ENDIF."校验当前查看条目是否在允许的人事范围期间内IF <versc>-FPEND < lw_werks-begda or <versc>-FPBEG > lw_werks-endda.IF sy-tcode(1) = 'Z'.MESSAGE '不在可查询的人事范围期间内' TYPE 'I' RAISING no_record_found.ELSE.MESSAGE '不在可查询的人事范围期间内' TYPE 'E'.ENDIF.ENDIF.ENDLOOP.ENDENHANCEMENT.
*$*$-End:   (1)---------------------------------------------------------------------------------$*$*
ENDFUNCTION.

PS:喜欢的同学可以关注微信公众号

本文发布于:2024-01-31 06:45:28,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170665473126361.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:薪酬   权限   HR
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23