当前位置:文档之家› SAP HR模块报表开发

SAP HR模块报表开发

SAP HR模块报表开发目录1. 概述 (3)2. HR开发介绍 (3)2.1 逻辑数据库介绍 (3)2.2 HR相关逻辑数据库 (4)2.2.1 PNP (4)2.2.2 PCH (5)2.3 逻辑数据库的选择屏幕 (6)2.3.1 PNP的选择屏幕 (6)2.3.2 PCH的选择屏幕 (10)3. HR报表开发 (12)3.1 HR相关数据库表 (12)3.2 常用函数和宏 (12)3.2.1 宏RP_PROVIDE_FROM_FRST和RP_PROVIDE_FROM_LAST (13)3.2.2 函数RH_STRUC_GET (13)3.2.3 函数HR_READ_FOREIGN_OBJECT_TEXT (14)3.2.4 函数PYXX_READ_PAYROLL_RESULT (15)4. 其他 (16)4.1 PNP和PCH里的变量 (16)4.2 时间交叉 (17)4.3 权限检查 (18)1. 概述本文介绍了SAP HR模块报表开发的相关经验,结合本人参与项目所做的开发工作,汇总整理了一些在HR开发中需要注意的地方,并介绍了有用的小技巧。

相信本文对初级从事HR开发工作的相关人员有一定帮助。

因为笔者相关经验也在积累过程中,也许本文中会出现一些错误,还望见谅指正。

2. HR开发介绍HR 报表开发主要涉及到逻辑数据库的应用,相关的开发工作也主要围绕着逻辑数据库进行。

2.1 逻辑数据库介绍逻辑数据库则提供另一种选择数据的方式,可以代替SQL语句在数据库中提取数据,供程序操作。

因而,可以认为逻辑数据库是一种报表设计程序中的辅助工具,而不能将其误解为一种可进行数据存储的数据库。

SAP中提供多种类型的逻辑数据库,开发人员也可自行定义数据源。

Transaction Code:SE36或SLDB2.2 HR相关逻辑数据库HR报表开发主要是对逻辑数据库PNP( PNPCE)和PCH的应用。

其中PNPCE是PNP的加强。

但是本文所举例子,皆是PNP的应用,如果将来有机会应用到PNPCE逻辑数据库,会再进行补充。

程序中使用逻辑数据库非常方便,只要在程序属性里选择关联到就可以实现,直接在程序里就可以使用。

2.2.1 PNPPNP逻辑数据库主要针对人事信息的查询。

PNP查询到的信息是以人为单位的,每次查询到一个人相关信息。

如果报表的信息是关于个人人事信息的内容,首先考虑PNP逻辑数据库。

逻辑数据使用,首先要在程序里定义TABLES: PERNR。

PERNR 是一个结构,每次程序返回一个PERNR的结点,代表员工号为pernr-pernr的这个人,并附带这个人的相关数据。

如果想让每次返回的人员附带信息类型数据,需要在程序里定义INFOTYPES: nnnn,nnnn代表信息类型编号(包括自定义增强的信息类型)。

如果声明了信息类型,则在返回个人信息的时候,也顺带返回这个人的一个Pnnnn的结构,对应相应个信息类型。

Pnnnn的内容根据屏幕选择字段内容确定(PNPCE逻辑数据库返回的内容与PNP有所不同)。

程序里想使用逻辑数据,在主程序里调用GET PERNR。

GET pernr类似于一个循环,每次返回一个pernr结点,就是一个人,我们可以对这个人的信息进行处理。

当把所有的人都处理完了,那我们所得到的就是需要的数据了。

所以使用PNP逻辑数据库,最少得有三行:TABLES: PERNRINFOTYPES: nnnnGET PERNR.IDES系统里有例程:ZPSOL0102.2.2 PCHPCH逻辑数据库主要是对应于组织管理(OM)。

相对于PNP逻辑数据库,PCH每次返回的结点是OBJEC类型,代表一个对象。

这些对象包括在PP01可以维护的对象(例如:O,S,……等等),随其一同返回的也是OM的信息类型(例如1000,1001……等)。

PCH查找结点,除了标准的选择条件之外,还可以应用评估路径,这样大大增强了PCH的可用性。

同PNP逻辑数据库一样,PCH也许要在程序里声明TABLES: OJBEC才可以使用,返回的也是objec结构。

使用方法基本同PNP 逻辑数据库类似。

所以也必须要添加三行:TABLES: OJBECINFOTYPES: nnnnGET OBJEC.IDES系统里有例程:ZHSOL0102.3 逻辑数据库的选择屏幕2.3.1 PNP的选择屏幕默认的PNP选择屏幕如下:屏幕主要分为两个部分,期间选择和条件选择,最上面一排按钮还可以进行进一步选择。

同时,我们还可以自定义我们的选择屏幕。

标准选择屏虽然功能完备,但界面繁琐,很多时候客户并不接受,所以我们大多都使用自定义的选择屏幕。

注意:在下面选择窗口中的组织结构选择,只能找寻这个组织部门下面的人员,如果还有子部门,逻辑数据库并不能返回子部门的人员。

如果想要返回子部门的人员,可以在上排按钮中选择组织结构,这里边选择的部门,会搜寻到下级子部门。

使用自定义选择屏幕,可在程序属性里选择。

当我们关联到PNP 逻辑数据库,再进属性界面,会多出个按钮HR报告类,这就是我们可以自定义选择界面的地方。

在HR报告类中,可以创建、选择系统提供的和我们自定义的选择屏幕。

选择屏幕也可以在IMG里定义。

我们可以再报表类别中创建我们自定义的报表选择条件,这样基本上能满足客户的需要。

例如:注意:报表类是必须选择现有的字段,如果标准里没有需要的选择条件,我们可以在程序里自定义屏幕选择,但自定义的选择条件并不会影响PNP逻辑数据库的选择,需要我们自己处理。

标准的屏幕选择定义在程序: DBPNPSEL。

如果我们需要在程序的初始屏幕赋值或做一下定制化的内容,可参考程序DBPNPSEL里的定义。

其中最常见的客户要求可能就是时间期间选择。

客户通常希望能按自己的要求来自动选择期间,我们可以用程序变式的方式来实现,但有时候,客户的要求我们也可以再程序初始化的实现,尤其是一些按钮的选择,让他们出现在默认状态也是客户经常提出的。

例如,客户想把期间选择默认为当前月,其实很简单,在初始化的时候加入代码:PNPTIMED = 'M'. "当前月这些变量的声明都可以再DBPNPSEL里找到,我们只要仔细研究这些声明,很多事情我们都可以再初始化的时候做。

2.3.2 PCH的选择屏幕PCH选择屏幕没有报告类可以配置,因为他的默认选择屏幕相对比较简单。

这个界面只有期间选择和对象选择,所以没有报告类可供我们自由配置。

这些在大多时候很难满足我们的业务需要,但我们最长用到的评估路径选择也是可以很容易加入进去。

在代码中除了声明TABLE ojbec之外,我们只要在声明TABLE gdstr,就可以出现评估路径的选择界面这样的界面基本上就能满足我们大部分的需要了,如果还有不够的,那我们可以还可以再程序里自己定义屏幕选择条件。

同样,我们自己定义的屏幕选择条件是不影响逻辑数据库的返回值,所以要我们根据选择条件自己再进行后续处理。

大部分时候,对象类型,评估路径等内容我们都会根据程序确定好,做成默认输入,或者干脆隐藏起来,但如果要影响PCH逻辑数据库的返回值,objec和gdstr是必须要声明的。

程序DBPCHSEL声明了PCH选择屏幕的选择字段,我们可以仿照PNP的处理方法对初始屏幕进行定义。

3. HR报表开发3.1 HR相关数据库表HR报表开发很肯定会涉及到数据库表,因为SAP的数据都存放在表里。

PNP逻辑数据最常用的就是PAnnnn的表,人事数据的信息类型数据都存放在这些表中,PNP其实就是从这些表中抓取的数据,所以如果我们需要一些数据,可以直接手动从这些表中抓取。

逻辑数据库返回的结构Pnnnn其实就是表PAnnnn的子结构,所以想详细了解Pnnnn的结构,只需要仔细研究PAnnnn的定义即可。

PCH逻辑数据库对应的是表HRPnnnn,一般我们常碰到就是HPR1000、HRP1001,这两个表分别是对象定义和对象关系。

一个对象的自身描述都是定义在HRP1000里包括起始时间、名称等,而两个对象的关系则定义在HRP1001,如果想关联两个对象,那HRP1001表就是最好的查找对象。

当然还有很多我们常碰到的表,通过F1帮助,我们大多都能找到他们。

3.2 常用函数和宏HR常用逻辑数据库,尤其是PNP逻辑数据库提供很多常用的宏和函数供我们使用。

3.2.1 宏RP_PROVIDE_FROM_FRST和RP_PROVIDE_FROM_LAST宏RP_PROVIDE_FROM_FRST和RP_PROVIDE_FROM_LAST 是一对相对应的宏,也是我们PNP逻辑数据库里最常用的一组宏。

这对宏的作用就是在返回个人信息的结构Pnnnn里提取时间最早和时间最晚的记录。

具体用法:RP_PROVIDE_FROM_FRST Pnnnn subtype BEGDA ENDDARP_PROVIDE_FROM_LAST Pnnnn subtype BEGDA ENDDA 其中Pnnnn就是要处理的信息类型,subtype处填写子信息类型,如果没有字信息类型,此处传入SPACE,后面两个是参数时间,即开始时间和结束时间。

这个宏处理过后,会将开始时间和结束时间之间的,时间最早(晚)的一条数据,放入Pnnnn表头(工作区)。

PNP还有许多有用的宏,可以帮助我们快速处理数据,具体宏的定义,可参见程序DBPNPMAC。

3.2.2 函数RH_STRUC_GET个人感觉,这个函数是最好用最常用的一个函数之一,无论是PNP 和PCH,这个函数在程序里都是最好补充。

这个函数是根据评估路径返回一个objec结构的内表,这就相当于在程序里又调用了一次PCH逻辑数据库的感觉。

因为我们每次只能选择一个逻辑数据库,所以在PNP里或是在PCH里,想再次通过评估路径来查找一些信息,这个函数都提供了很方便的功能。

只要给一个入口,然后再loop返回的内表,相当于在成立内嵌了一个小的PCH逻辑应用,十分好用。

例如:CALL FUNCTION'RH_STRUC_GET'EXPORTINGact_otype = 'O'act_objid = t_itab-objidact_wegid = 'PERS-O'act_plvar = '01'act_begda = pchoend " 期末act_endda = pchoendTABLESresult_objec = tab_org1EXCEPTIONSno_plvar_found = 1no_entry_found = 2OTHERS = 3.有了评估路径,无论是从O,S,P,我们都可以通过函数找到我们需要的结点。

相关主题