SAPHR模块报表开发.docx

上传人:b****1 文档编号:3025158 上传时间:2023-05-05 格式:DOCX 页数:13 大小:118.99KB
下载 相关 举报
SAPHR模块报表开发.docx_第1页
第1页 / 共13页
SAPHR模块报表开发.docx_第2页
第2页 / 共13页
SAPHR模块报表开发.docx_第3页
第3页 / 共13页
SAPHR模块报表开发.docx_第4页
第4页 / 共13页
SAPHR模块报表开发.docx_第5页
第5页 / 共13页
SAPHR模块报表开发.docx_第6页
第6页 / 共13页
SAPHR模块报表开发.docx_第7页
第7页 / 共13页
SAPHR模块报表开发.docx_第8页
第8页 / 共13页
SAPHR模块报表开发.docx_第9页
第9页 / 共13页
SAPHR模块报表开发.docx_第10页
第10页 / 共13页
SAPHR模块报表开发.docx_第11页
第11页 / 共13页
SAPHR模块报表开发.docx_第12页
第12页 / 共13页
SAPHR模块报表开发.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

SAPHR模块报表开发.docx

《SAPHR模块报表开发.docx》由会员分享,可在线阅读,更多相关《SAPHR模块报表开发.docx(13页珍藏版)》请在冰点文库上搜索。

SAPHR模块报表开发.docx

SAPHR模块报表开发

 

SAPHR模块

报表开发

 

 

1.概述

本文介绍了SAPHR模块报表开发的相关经验,结合本人参与项目所做的开发工作,汇总整理了一些在HR开发中需要注意的地方,并介绍了有用的小技巧。

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

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

2.HR开发介绍

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

2.1逻辑数据库介绍

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

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

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

TransactionCode:

SE36或SLDB

2.2HR相关逻辑数据库

HR报表开发主要是对逻辑数据库PNP(PNPCE)和PCH的应用。

其中PNPCE是PNP的加强。

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

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

2.2.1PNP

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

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

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

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

PERNR。

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

如果想让每次返回的人员附带信息类型数据,需要在程序里定义INFOTYPES:

nnnn,nnnn代表信息类型编号(包括自定义增强的信息类型)。

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

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

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

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

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

所以使用PNP逻辑数据库,最少得有三行:

TABLES:

PERNR

INFOTYPES:

nnnn

GETPERNR.

IDES系统里有例程:

ZPSOL010

2.2.2PCH

PCH逻辑数据库主要是对应于组织管理(OM)。

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

这些对象包括在PP01可以维护的对象(例如:

O,S,……等等),随其一同返回的也是OM的信息类型(例如1000,1001……等)。

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

同PNP逻辑数据库一样,PCH也许要在程序里声明TABLES:

OJBEC才可以使用,返回的也是objec结构。

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

所以也必须要添加三行:

TABLES:

OJBEC

INFOTYPES:

nnnn

GETOBJEC.

IDES系统里有例程:

ZHSOL010

2.3逻辑数据库的选择屏幕

2.3.1PNP的选择屏幕

默认的PNP选择屏幕如下:

屏幕主要分为两个部分,期间选择和条件选择,最上面一排按钮还可以进行进一步选择。

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

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

注意:

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

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

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

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

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

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

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

例如:

注意:

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

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

DBPNPSEL。

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

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

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

例如,客户想把期间选择默认为当前月,其实很简单,在初始化的时候加入代码:

  PNPTIMED = 'M'.   "当前月

这些变量的声明都可以再DBPNPSEL里找到,我们只要仔细研究这些声明,很多事情我们都可以再初始化的时候做。

2.3.2PCH的选择屏幕

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

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

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

在代码中除了声明TABLEojbec之外,我们只要在声明TABLEgdstr,就可以出现评估路径的选择界面

这样的界面基本上就能满足我们大部分的需要了,如果还有不够的,那我们可以还可以再程序里自己定义屏幕选择条件。

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

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

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

 

3.HR报表开发

3.1HR相关数据库表

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_FRSTPnnnnsubtypeBEGDAENDDA

RP_PROVIDE_FROM_LASTPnnnnsubtypeBEGDAENDDA

其中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'

    EXPORTING

      act_otype      = 'O'

      act_objid      = t_itab-objid

      act_wegid      = 'PERS-O'

      act_plvar      = '01'

      act_begda      = pchoend    " 期末

      act_endda      = pchoend

    TABLES

      result_objec   = tab_org1

    EXCEPTIONS

      no_plvar_found = 1

      no_entry_found = 2

      OTHERS         = 3.

有了评估路径,无论是从O,S,P,我们都可以通过函数找到我们需要的结点。

PNP里是以P为主,如果我们想得到相关O、S的信息;或是在PCH里进行二次的查找,这个函数都是十分管用的。

3.2.3函数HR_READ_FOREIGN_OBJECT_TEXT

在SAP系统中,大部分对象存在的方式的都是以ID的方式记录在数据库表中,HR模块也不例外,但是HR报表中,绝大部分的可以都希望显示名称,这时函数HR_READ_FOREIGN_OBJECT_TEXT就非常有用。

当然你也可以把它写到公共子例程里随时调用,我就是这么使用的。

这个函数是返回对象的名称文本,例如:

  CALL FUNCTION 'HR_READ_FOREIGN_OBJECT_TEXT'

      EXPORTING

        otype                         = 'O'

        objid                         =  g_orgeh

        begda                         = pn-endda

        endda                         = pn-endda

       IMPORTING

*           SHORT_TEXT                    =

        object_text                   = l_dw_text

       EXCEPTIONS

         nothing_found                 = 1

         wrong_objecttype              = 2

         missing_costcenter_data       = 3

         missing_object_id             = 4

         OTHERS                        = 5

3.2.4函数PYXX_READ_PAYROLL_RESULT

这个函数主要是获取员工工资,大部分时间要和函数CU_READ_RGDIR配合使用,这里不再赘述,由于用法比较简单可自行揣摩。

值得注意的地方就是函数CU_READ_RGDIR函数返回结果中表项srtza的筛选和PYXX_READ_PAYROLL_RESULT返回表工资是放在payroll_result-inter-rt表中

举例:

CALL FUNCTION 'CU_READ_RGDIR'

    EXPORTING

      persnr                   = ipernr

*     BUFFER                   =

*     NO_AUTHORITY_CHECK       = ' '

*     IMPORTING

*     MOLGA                    =

    TABLES

      in_rgdir                 = prgdir  "pc261结果表

 EXCEPTIONS

   no_record_found          = 1

   OTHERS                   = 2.

  loop at prgdir where FPPER = iperiod and SRTZA = 'A' and PAYTY = ' '.

    pseqnr = prgdir-SEQNR.

  endloop.

  CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT'

          EXPORTING

*         clusterid                          =

            employeenumber                     = ipernr

            sequencenumber                     = pseqnr

*         READ_ONLY_BUFFER                   = ' '

*         READ_ONLY_INTERNATIONAL            = ' '

*         ARC_GROUP                          = ' '

            check_read_authority               = 'X'

*         FILTER_CUMULATIONS                 = 'X'

*         CLIENT                             =

*       IMPORTING

*         VERSION_NUMBER_PAYVN               =

*         VERSION_NUMBER_PCL2                =

          CHANGING

            payroll_result                     = tpayresult

         EXCEPTIONS

            illegal_isocode_or_clusterid       = 1

            error_generating_import            = 2

            import_mismatch_error              = 3

            subpool_dir_full                   = 4

            no_read_authority                  = 5

            no_record_found                    = 6

            versions_do_not_match              = 7

            error_reading_archive              = 8

            error_reading_relid                = 9

            OTHERS                             = 10.

 

4.其他

4.1PNP和PCH里的变量

其实我们在看PNP和PCH里程序是时常会看到些变量,这些变量是PNP和PCH里固有的变量,在程序里我们可以方便的拿来直接使用,他们大部分都分别定义在程序DBPNPCOM和DBPCHCOM里。

PNP里最常用的变量恐怕就是pn-begda和pn-endda,他们是属于结构pn的,都是在DBPNPCOM里定义的。

这两个值,会在程序程序执行的时候赋值成屏幕选择字段的数据选择期间,即屏幕字段pnpbegda和pnpendda。

在程序里我们就可以直接使用的pn-begda和pn-endda,注意这两个是数据选择字段,是数据的有效期,如果想使用人员有效期,请使用pn-begps和pn-endps,我们大部分时候是处理数据,所以经常使用的就是pn-begda和pn-endda。

4.2时间交叉

HR数据中,最重要的就是时间关系,因为数据都是按时间有效来记录的,所以我们经常要处理的就是时间的关系。

通常客户会要求查询一个时间段的数据,但实际的数据可能会有各种方式经历这个时间段。

一般我们对时间段提取就是使用的时间交叉的方式,即开始时间<结束时间、结束时间>开始时间,这就保证了我们提取的数据是在所要求的时间段。

例如:

SELECT SINGLE state FROM pa0006 INTO l_state

      WHERE subty = '2' AND pernr = tab_org1-objid AND  begda <= pchoend AND endda >= pchobeg.

4.3权限检查

逻辑数据库都会默认进行权限检查,如果我们外部做过结构化授权等,逻辑数据库会只提取我们有权限查看的数据。

如果我们想去掉PNP里的权限检查,在初始化的时候添加:

  PNP_SW_SKIP_PERNR = 'N'.

PCH里对应的初始化变量是$pch$-stru_authy。

有时我们的权限不够,所以逻辑数据库程序最后有个反馈信息,提示我们多少数据因为权限问题没法查看,但基本上客户都不太关心这个信息。

我对此问题的解决方法是在程序的最后加一行:

exit,程序停止,跳过那个信息屏,如果谁有什么更好的解决方法希望也能告诉我。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2