SAP HCM insufficient authorization, no.skipped personnel 总结归纳
导读
权限:HCM模块中有普通权限和结构化权限。普通权限就是PFCG的权限,结构化权限就是按照部门ID授权,颗粒度更细,对分工明细化的单位尤其重要,今天遇到的问题就是结构化权限的问题。
作者:vivi,来源:osinnovation
一、 故事背景
客户的一个报表,执行完以后,出现如下的错误提示,其实看到这个错误就是权限的问题,但是苦难点事如何找到这98人,这就是问题所在。可能很多人会说为什么不在初始化加上pnp_sw_skip_pernr,不就不检查权限拉吗?其实我们要明白这个参数Y和N的含义,如果设置是N,逻辑数据库不会走对应的权限检查,GET PERNR就能获取到员工的数据,需要你二次判断权限控制,如果设置成Y,就是逻辑数据去判断权限,默认就是Y,这个Y其实就会去校验你报表申明时候下面的信息类型,其中一个缺少权限,系统就会提示nsufficient authorization, no.skipped personnel,如我0015缺少其中一条数据的权限。get pernr这个地方就无法抓取到员工的数据。
二、 解决方案
其实SAP提供一个宏是可以把错误的人员抓取过来的,pnp_get_auth_skipped_pernrs,这个必须发到END-OF-SELECTION后面,通过这个宏可以把错误员工的编号写入到内表中,然后在把这些人员编号打印出来就能知道那些员工出现的问题。
DATA: lt_skipped_pernrs TYPE hrahq_pernr_table,
ls_skipped_pernrs LIKE LINE OF lt_skipped_pernrs.
pnp_get_auth_skipped_pernrs lt_skipped_pernrs.
" or one of these:
" PNPCE: perform mac_get_auth_skipped_pernrs in program sapdbpnpce changing lt_skipped_pernrs.
" PNP: perform mac_get_auth_skipped_pernrs in program sapdbpnp changing lt_skipped_pernrs.
IF lt_skipped_pernrs IS NOT INITIAL.
WRITE:/ 'List of skipped personnel no:'.
LOOP AT lt_skipped_pernrs INTO ls_skipped_pernrs.
WRITE:/3 ls_skipped_pernrs-pernr.
ENDLOOP.
ENDIF.
三、 什么情况会出现这样的问题
其实原来也写过一篇文章是介绍insufficient authorization, no.skipped personnel的原因的,今天我总结下,希望对大家有帮助。
在这我们首先了解下T77S0的ORGPD,这个参数会四个值,具体解释可以看note339367
-
Setting 1: If an organizational unit is assigned in infotype 0001, the system checks against this organizational unit. If no organizational unit is assigned, the system rejects the authorization.
-
Setting 2: The system does not evaluate the organizational unit and rejects the authorization.
-
Setting 3: If an organizational unit exists, the system checks against this organizational unit. If no organizational unit is assigned, it grants the authorization.
-
Setting 4: The system does not evaluate the organizational unit and grants the authorization.
我稍微对上面节点介绍下,如果选3,0001信息类型的单位存在,就会结构化授权检查,如果不存在就,通过检查,如果设置4就是不检查0001的单位,直接授权
场景一:员工已经离职,但是还需要发薪,但是为什么权限会提示离职以后得数据无法查询到呢。原因是这个部门在员工离职以后就失效,在两个条件下,结构化授权就无法找到,所以就提示insufficient authorization, no.skipped personnel。如果我想解决离职后且部门失效,有什么办法?,其实可以在结构化首选的地方,单独加这个组织ID,因为在结构化授权的地方有个日期,是全部,还是当前月的选项,只要为空就是全部,那么系统默认组织就是18000-9999都有效。
场景二:因为启用OM与PA的集成,如果OM与PA的数据部一致,例如PA数据有更新,OM数据没更新,结构化权限检查的时候就会提示权限不够insufficient authorization, no.skipped personnel。
上述两个场景是我遇到比较多的问题,所以在自定义开发的报表遇到insufficient authorization, no.skipped personnel,首先要检查的就是OM与PA的结构是否一致。
四、 HCM权限几个重要的函数与类及重要代码点
HR_CHECK_AUTHORITY_INFTY 检查有信息类型的查询权限
下面这个代码是结构化权限检查的核心,553行时获取信息类型的所有数据,然后数据会写入到PS内表,在587行中,是根据每行的数据都取检查,如果有权限PS内表有个字段就是表示是W还是N,当然还有其他权限,这里有意思的是,默认都是N,如果有权限就会把改成其他,N表示无权限。下次详细分析下这里面的逻辑。
重要的类是CL_HRPAD00AUTH_CHECK_STD与CL_HRPAD00AUTH_CHECK_FAST,这个都是结构化权限的检查类。