zoukankan      html  css  js  c++  java
  • ◆◆0使用逻辑数据库PNP开发HR报表

    HR开发中会经常用到逻辑数据库,其中PNP逻辑数据最常用的。 人事数据的信息类型数据都存放在PAnnnn这些表中,PNP其实就是从这些表中抓取的数据。现在已经用PNPCE(支持concurrent employment)取代PNP,但是因为PNP已经用得相当普遍而且够用,很多报表还是基于PNP的,这里举个PNP的例子。

    1, 指定逻辑数据库PNP

    创建程序是在属性界面输入逻辑数据库PNP

    下图selection screen处可以选择000或900两个选择屏幕,000是主数据的选择屏,900是薪资结果的选择屏。

    然后点击HR Report Catergory,进入report category assignment屏幕,创建一个category。

    1351064681_8131

    2, 创建report category

    系统中已经存在很多ReportCategory,可以根据开发需要选择类似的进行复制,来看一个比较常见的Category

    1351064690_9427

    1351064697_8468

    可以通过下图看到report category中的设置和报表选择画面的关系,其中2是决定哪些字段作为条件显示在选择画面中。

    1351064701_6363

    1351064706_6936

    创建一个自定义的report category ’ZEMPLOY'完后保存,然后输入新创建的CATEGORY名字保存退出。

    然后se38创建一个程序,输入下面的代码运行就可以看到选择画面了

    运行就可以看到效果。

    1351064717_4532

    3, 程序编写

    3.1 HR数据表定义

    由于用到了LDBHR的表结构与其它模块的不同,所以程序的编写也略有不同,但要比其它模块的更简单。

    程序头部要定义将要用到的HR数据表(如PA0000,PA0001)就是
    INFOTYPES:0000,0001.
    如果不定义,而在后面使用了该表程序会报语法错误。
    而定义好之后在程序中使用时表名是P0000,P0001(而不是pa0000,pa0001)

    3.2 get语句

    然后用get语句就可以将逻辑数据库中的数据取出来,

    Get pernr.

    这句是逻辑数据库的专用语法,功能是根据用户输入的选择条件从逻辑数据库PNP中取出相应的数据然后循环,此时的PERNR是一个结构体,会在每次循环时自动赋值。且要注意该句不能写在FORM内部.

    程序运行时有一个结构体PN,存放的是屏幕上输入的日期及一些基本参数,常用到的是PN-BEGDAPN-ENDDA

    1351064730_8069

    3.3 宏Rp_provide_from_last

    下面介绍一个HR开发中常用的宏,Rp_provide_from_last,标准用法如下:

    2017-02-23_22-26-45

    它的意思是根据PERNR当前的NO.号找表P0000中字段SUBTY = P0000-SUBTY且字段BEGDAENDDAPN-BEGDAPN-ENDDA之间的数据的最后一条。

      p0000:

    P0000

    BEGDA

    ENDDA

    1

    2012.05.01

    2012.05.30

    2

    2012.06.01

    2012.06.30

    PN-BEGDA =2012.04.01,PN-ENDDA = 2012.05.03

    该语法只会得到第1条,因为第2条的时间不在PN内。

    如果PN-BEGDA = 2012.04.01, PN-ENDDA = 2012.06.02.

    那么该语法会取第2条,1都在时间内,取最后一条。

    下面是一段用到了Rp_provide_from_last的代码。

    1351064785_1418

    3.4 DO ..VARYIING OBJ FORM XXX NTEXT XXX

    HR的表中有的表的结构如P0041中的DAR01/DAT01,DAR02/DAT02,DAR03/DAT03…

    1351064794_3324

    DTTYPE的类型,如果要取某个类型的DATE时,由于不确定是存放在哪个DT(DAT01/DAT02/…),所以可用语法

    DO ..VARYIING OBJ FORM XXX NTEXT XXX来方便解决这个问题。如下:

    1351064789_8008

    3.5 provide语句

    还有一种常用的语法,PROVIDE * FROM P0000 BETWEEN PN-BEGDA AND PN-ENDDA.

    其功能等于一个LOOP AT P0000 WHERE BEGDA LT PN-ENDDA AND ENDDA GTPN-ENDDA. ENDLOOP.

    掌握以上几点,基本上可以写出一个基于逻辑数据库PNP的报表了。

    以上。

  • 相关阅读:
    SQL游标应用
    八月随笔
    LINQ TO DATATABLE/DATASET基本操作之-简单查询
    Linux8.7 Linux系统日志
    Linux6.2 压缩扩展
    [转]Linux系统误删数据找回
    Linux9.2 MySQL安装
    Linux9.1 介绍
    来自朋友最近面试的阿里、腾讯、美团等P7岗位面试题
    拿到京东Java社招offer,过来分享面经
  • 原文地址:https://www.cnblogs.com/lvdong18847870057/p/12550820.html
Copyright © 2011-2022 走看看