当前位置: 首页 > news >正文

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,这个都是结构化权限的检查类。

http://www.lryc.cn/news/530711.html

相关文章:

  • 五. Redis 配置内容(详细配置说明)
  • 4 [危机13小时追踪一场GitHub投毒事件]
  • Shadow DOM举例
  • 力扣动态规划-18【算法学习day.112】
  • 网络基础
  • 使用 EXISTS 解决 SQL 中 IN 查询数量过多的问题
  • 使用SpringBoot发送邮件|解决了部署时连接超时的bug|网易163|2025
  • Ruby Dir 类和方法详解
  • 克隆OpenAI(基于openai API和streamlit)
  • 位运算算法题
  • 12 向量结构模块(vector.rs)
  • Android车机DIY开发之学习篇(六)编译讯为3568开发板安卓
  • Codeforces Round 863 (Div. 3) E. Living Sequence
  • 一文讲解HashMap线程安全相关问题(上)
  • MFC 创建Ribbon样式窗口
  • uv 安装包
  • IELTS口语练习题库
  • 图书管理系统 Axios 源码__获取图书列表
  • 基于OSAL的嵌入式裸机事件驱动框架——整体架构调度机制
  • c++ string类 +底层模拟实现
  • 六十分之三十七——一转眼、时光飞逝
  • Shell基础:中括号的使用
  • 《基于Scapy的综合性网络扫描与通信工具集解析》
  • 面经--C语言——sizeof和strlen,数组和链表,#include <>和 #include ““ #define 和typedef 内存对齐概述
  • 使用 Kotlin 将 Vertx 和 Springboot 整合
  • 线性回归算法-01
  • 洛谷 P1130 红牌 C语言
  • 虚幻UE5手机安卓Android Studio开发设置2025
  • 线性代数复习笔记
  • 你需要更深层次的解放