所有的宏都保存在数据库表TRMAC中
一般数据的处理常用到的宏:
(1) 在满足屏选条件的多个结果中,可以用RP_PROVIDE_FROM_FRST来选择时间最早的一条记录。
RP_PROVIDE_FROM_FRST P0001 SPACE PN-BEGDA PN-ENDDA.
(2)在满足屏选条件的多个结果中,可以用RP_PROVIDE_FROM_LAST 来选择时间最晚的一条记录。
RP_PROVIDE_FROM_LAST P0001 SPACE PN-BEGDA PN-ENDDA.
(3)使用RP-READ-T001P 来读取人事范围和人事子范围的文本
RP-READ-T001P P0001-WERKS P0001-BTRTL SPACE.
(4)可以通过RP_READ_ALL_TIME_ITY不通过 PN-BEGD来截取记录时间
RP_READ_ALL_TIME_ITY PN-BEGDA PN-ENDA.
查cluster表PCL1或PCL2:
除了infotype以外很多数据都保存在cluster表里面。
每个cluster表里的每种类型都用两个字母的缩写来代表。
如PCL1表有以下类型的数据
B1 time event /PDC
G1 Group incentive wages
L1 Individual incentive wages
PC Personal calendar
TE Trip costs/accounting results
TC Trip costs/credit card data
TX Infotype texts
Z1 Interface PDC -> cost accounting/materials management
在写程序取数的时候,直接用宏就行了,宏的名字是RP-IMP-Cn-xy.
n是pcl后面的数字,比如pcl1的话,n=1。
xy就是该类型的两个字母。
比如借贷物品的信息类型是40,该信息里的注释说明字段是保存在cluster表pcl1里的TX类型里的。需要查询的话可以先取道p0040里的记录,然后用宏rp-imp-c1-tx来取到该记录的注释数据。
使用function从数据库中取工资信息:
员工的所有工资信息可以通过报表:H99_DISPLAY_PAYRESULT来查看。
这个报表第一层的输出都可以通过函数CU_READ_RGDIR来查到。使用方法:
DATA: BEGIN OF RGDIR OCCURS 100.
INCLUDE STRUCTURE PC261.
DATA: END OF RGDIR.
DATA: COUNTRY LIKE T001P-MOLGA.
GET PERNR.
CALL FUNCTION 'CU_READ_RGDIR'
EXPORTING
PERSNR = PERNR-PERNR
IMPORTING
MOLGA = COUNTRY
TABLES
IN_RGDIR = RGDIR
EXCEPTIONS
NO_RECORD_FOUND = 1
OTHERS = 2.
如果需要查工资报表的第二层的输出,就需要下面的方法来取数:
工资大致分成两种,一种是周期性的,比如每个月的工资。另一种是非周期性的,比如某个月获得特别奖金。
都可以使用函数CD_EVALUATION_PERIODS来查到一个内表EVPDIR,
然后使用这个表来做为输入条件调用宏RP-IMP-C2-CN就可以了。
在使用CD_EVALUATION_PERIODS时:
(1) 如果是周期性的,那么将BONUS_DATE和PAY_TYPE都设为空。
(2)如果是非周期性的,那么必须输入BONUS_DATE,并将PAY_TYPE设为'A'。
比如查看某员工2009.1.2的奖金,可以这样来使用:
DATA: EVP1 LIKE TABLE OF RGDIR WITH HEADER LINE.
CALL FUNCTION 'CD_EVALUATION_PERIODS'
EXPORTING
BONUS_DATE = '20090102'
INPER_MODIF = PN-PERMO
INPER = PN-PAPER
PAY_TYPE = 'A'
PAY_IDENT = ' '
TABLES
RGDIR = RGDIR
EVPDIR = EVP1.