本文简单介绍一下 SAP HR模块 开发,供大家参考。
我们在进行开发之前,对于 SAP HR
中的一些基本概念,比如:企业结构、人事结构、组织结构、人事范围、员工组、工资核算范围、组织单元、职务、岗位、员工、评估路径等等,需要简单了解一下,本文不做介绍了。
• ** 信息类型 **
为了更好的管理这些人员的、组织的信息, SAP
把这些信息进行了逻辑分类,每一个分类就叫做一个信息类型。这样既保证了信息的完备性,又给操作带来了灵活性,还给未来提供了扩展性。信息类型使用 4
位数字编号来表示,如( infotype0000 )人员在企业中的变动历史、( 0001 )任职信息、( 0002 )个人基本资料、(
0006 )地址信息、( 0008 )基本工资、( 0009
)银行账号等,对每个信息类型,还可以根据需要细分为子类型,如地址信息可以分为家庭住址、邮寄地址、户口地址等;学历信息可以按照小学、中学、大学等阶段进行各个子类型的划分,如下图展示部分:
信息类型的时间约束分为三类,可通过下面的两张图来理解:
信息类型对应的数据库表,基本都 INCLUDE STRUCTURE : PAKEY 、 PSHD1 、 PS0001
组成,如表PA0000:
• ** 报表开发 **
除
了掌握基本的ABAP开发技能外,HR报表开发主要使用到逻辑数据库相关知识。逻辑数据库是SAP在物理数据库的基础上进行加工整理,提供一个标准的方法来生成报表程序,可以认为逻辑数据库是一种报表设计程序中的辅助工具,而不能将其误解为一种可进行数据存储的数据库。使用逻辑数据具有以下便利:
1. 简化数据定义和数据读取:
逻辑数据库中已经预先定义好了所有的信息类型结构,可以直接使用;而且逻辑数据库提供了标准的方法,预先读取数据,只需要在程序中进行处理即可,大大简化了开发的流程和维护的成本
2. 统一的选择屏幕:
选择屏幕是根据使用的逻辑数据库来定义的。使用标准的选择屏幕,一方面减轻了开发的工作量,另一方面也给用户一个统一的熟悉的界面,便于用户快速上手
3. 自动进行权限检查:
由于人事数据大都是敏感的数据,所以权限检查必不可少。但是HR的权限检查又比较复杂,如果全部自行开发,难免会有遗漏。所以逻辑数据库中预先集成了权限检查的功能,可以根据使用的数据进行全面的权限检查,确保数据不外泄
HR报表中经常使用的逻辑数据库包括:
• 人事报表:使用逻辑数据库PNP或者PNPCE
• 组织报表:使用逻辑数据库PCH
• 招聘报表:使用逻辑数据库PAP
下面以逻辑数据库PNP为例来展示:
• **关联PNP**
程序中使用逻辑数据库非常方便,只要在程序属性里选择关联到就可以实现,直接在程序里就可以使用
在代码中至少包括以下行
TABLES/NODES:声明工作区,可以供程序与数据库程序共享数据,进行数据的传输
INFOTYPES:定义要使用的信息类型(取数据库表PAnnnn的数据,放在程序中内表Pnnnn中)
GET:根据选择条件筛出数据循环对工作区填充数据(GET语句可以循环进来多次,每次进来是一个人员的信息,包括这个人员的P0000,P0001,P0006)
• **PNP选择屏幕**
TABLES语句后,运行程序就能够载入PNP标准的选择屏幕,自带标准屏幕主要分为两个部分,期间选择和条件选择,最上面一排按钮还可以进行进一步选择
注意:1、在图中选择组织结构时,只能找寻这个组织部门下面的人员,如果还有子部门,逻辑数据库并不能返回子部门的人员。如果想要返回子部门的人员,可以在上排按钮中选择组织结构,这里边选择的部门,会搜寻到下级子部门。2、我们可以在程序里自定义屏幕选择,但自定义的选择条件并不会影响PNP逻辑数据库的选择,需要我们自己处理。3、逻辑数据库PNP的选择屏幕元素在程序
< DBPNPSEL > 中,有很多界面元素,通过HR报告类设置展示规则
• **HR报告类**
在新建程序选择逻辑数据库PNP后保存,系统会指定默认的HR报告类;标准选择屏幕虽然功能完备,但有些客户认为界面繁琐,并不一定接受,所以我们通过设置HR报告类来调整;最好新建自己的HR报告类
上图标识Q一般都打勾设置一样。在某些业务情景下,数据选择期间和人员选择期间不一致是有用的,比如提取当前月在职人员的去年考勤数据作分析,此时人员选择期间是本月,数据选择期间就是去年
1 月 1 日至 12 月 31 日。
注意:
报告类是必须选择现有的字段,如果标准里没有需要的选择条件,我们可以在程序里自定义屏幕选择,但自定义的选择条件并不会影响PNP逻辑数据库的选择,需要我们自己处理。
• **程序结构**
INITIALIZATION 和 AT SELECTION-SCREEN OUTPUT:初始化、设置屏幕元素必填之类的的一些动作
START-OF-SELECTION:可以select一些文本描述、域描述之类
GET
取到信息类型的数据进行处理,会循环进来多次,每次是一个人员的信息,同时填充表P0000,P0001,P0002这些已经声明的infotype,是全部的记录(不会按照选择屏幕时间范围进行过滤,和选择屏幕的选择期间内PN-
BEGDA和PNENDDA没有直接关系)。因为要循环进来多次,所以Select data尽量放在get外,因为get是循环,效率低
END-OF-SELECTION 输出展示同时还有一个重要的结构PN,注意四个时间,数据选择的开始结束和人员选择的开始结束
• **语句LOOP和PROVIDE**
在 GET pernr/perasa取得infotype中的数据之后,Pnnnn是个内表,有两种方式可以循环访问Pnnnn中的数据。一种就是传统的LOOP
AT ENDLOOP,另外一种就是使用PROVIDE ENDPROVIDE.
举例如下,GET PERNR后,得到内表P0001,一共有9条数据,需要循环处理。
注意:1、只允许时间约束1或2的Infotype。2、Infotype含有subtype的要用WHERE条件来指定处理的具体是哪个subtype。3、Pnnnn-
BEGDA 和 Pnnnn-ENDDA会被Reset。4、多个infotype可以使用join进行连接。在一个provide
endprovide中可以处理多个infotype.同样join也只能用于time constraints为1和2的infotoype.
在使用join的时候,有一个特殊的变量Pnnn_valid用来标识,该infotype是否存在完整的记录,如果具有完整的记录,则该变量的值填充为X
• **语句DO ..VARYIING OBJ FORM OBJ1 NEXT OBJ2**
HR的表中有的表的结构如P0041中的DAR01/DAT01,DAR02/DAT02,DAR03/DAT03…,DT是TYPE的类型,如果要取某个类型的DATE时,由于不确定是存放在哪个DT(DAT01/DAT02/…),所以可用语法DO
VARYIING来方便解决这个问题。
• **宏**
RP_PROVIDE_FROM_LAST 获取指定的信息类型时间范围内最晚的一条数据
RP_PROVIDE_FROM_FRST 获取指定的信息类型时间范围内最早的一条数据
RP_SET_DATA_INTERVAL 设定指定的信息类型的时间范围
RP_SET_DATA_INTERVAL_ALL 设定声明的所有信息类型的时间范围
RP_READ_ALL_TIME_ITY 读取指定的时间范围的时间管理信息类型
PNP还有许多有用的宏,可以帮助我们快速处理数据,具体宏的定义,可参见程序DBPNPMAC
• ** 增强开发 **
• **用户出口(CMOD)**
常见出口如下:
PBAS0001为例:
001一般用来设初值
002一般用来检查校验
HR出口增强中常用的方法有:
1、 cl_hr_pnnnn_type_cast=>prelp_to_pnnnn “获取数据
2、 cl_hr_pnnnn_type_cast=>pnnnn_to_prelp “写入数据
• **CLASSIC BADI(SE19)**
HRBAS00INFTY 作用于OM
HRPAD00INFTY 作用于PA
• **人事管理信息类型增强(PM01)**
• **人事计划信息类型增强(PPCI)**
HR模块的增强方案中,除了传统的用户出口和BADI外,还有专门针对信息类型的增强PM01和PPCI,他们既可以创建新的信息类型,也可以扩展已有信息类型。具体实现实例将在后文《SAP
HR信息类型增强简介》中介绍。
• **常用函数**
HR_IMAGE_EXISTS 判断照片是否存在和获得存放的信息
RP_CHECK_PERNR 用来检查员工号码是否维护完整(IT0000\0001)
COMPUTE_YEARS_BETWEEN_DATES 获取年龄
RP_GET_HIRE_DATE 取员工入职时间
RH_STRUC_GET 用于获取组织单元下的职位及人员信息
PYXX_READ_PAYROLL_RESULT 根据索引号得到工资数,一般与CU_READ_RGDIR一起用
RH_OBJID_REQUEST 获取组织对象
HR_HCP_READ_OBJECT_TEXT 获取对象文本 ****
**
**
使用举例:
• **HR_INFOTYPE_OPERATION**
函数 BAPI_EMPLOYEE_ENQUEUE 和 BAPI_EMPLOYEE_ENQUEUE 分别用来锁定和解锁员工号.
以保证对员工信息进行更新时的数据一致性。
函数
HR_INFOTYPE_OPERATION,维护员工和申请人的主数据,在屏幕中操作进行数据维护时系统所做的检查在直接调用该函数时也会进行(包括权限检查,输入有效性等)。并且与屏幕维护时的错误返回结果相同。其中参数OPERATION:MOD
(change), COPY (copy), DEL (delete), INS (insert), LIS9 (delimit);参数DIALOG_MOD
: 0 在后台执行,出现错误时将错误信息返回到结构体RETURN中,1 在后台执行,出现错误时返回屏幕对话模式,2. 屏幕对话模式。
• **HR_READ_FOREIGN_OBJECT_TEXT**
在SAP系统中,大部分对象存在的方式的都是以ID的方式记录在数据库表中,HR模块也不例外,但是HR报表中,绝大部分的
...