1.Using Select Statements .
2. Using Different Function Modules.
(i). Function Module HR_READ_INFOTYPE
This function module is used for fetching the data from Personnel Administration and Time management info types . This is used to get a single PERNR from the Info type .see the below example....
REPORT ZHRTESTS.
tables:pa0002 .
data: itab type p0002 occurs 0 with header line .
select-options:s_pernr for pa0002-pernr no intervals no-extension,
s_date for sy-datum.
start-of-selection .
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
TCLAS = 'A'
pernr = s_pernr-low
infty = '0002'
BEGDA = s_date-low
ENDDA = s_date-high
TABLES
infty_tab = itab.
if not itab[] is initial.
loop at itab .
write:/ itab-pernr,
itab-begda,
itab-endda,
itab-vorna,
itab-nachn .
endloop.
endif.
(ii) Function Module RH_READ_INTFY
This is used for the organization management info types. With this function module we can get the relations for the given object ( means we can get position for a pernr , organization for a position , organization for an organization....)
report ygetsupervisor.
*&---------------------------------------------------------------------*
* database tables used
*&---------------------------------------------------------------------*
tables:pa0001,
hrp1001,
pa0002.
*&---------------------------------------------------------------------*
* internal tables declaration
*&---------------------------------------------------------------------*
data: t1001 like p1001 occurs 0 with header line,
t1002 like p1001 occurs 0 with header line,
t1003 like p1001 occurs 0 with header line,
t1004 like p1001 occurs 0 with header line,
t0001 like p0001 occurs 0 with header line,
it_pa0002 type pa0002 occurs 0 with header line.
*&---------------------------------------------------------------------*
* variable declaration
*&---------------------------------------------------------------------*
data: v_sobid1 like p1001-objid,
v_sobid2 like p1001-objid,
v_sobid3 like p1001-objid,
v_pernr like pa0002-pernr.
*&---------------------------------------------------------------------*
* selection screen paramters
*&---------------------------------------------------------------------*
parameters:p_pernr like pa0001-pernr.
*&---------------------------------------------------------------------*
* start of selection
*&---------------------------------------------------------------------*
start-of-selection.
call function 'RH_READ_INFTY'
exporting
plvar = '01'
otype = 'P'
objid = p_pernr
infty = '1001'
subty = 'B008'
begda = sy-datum
endda = sy-datum
tables
innnn = t1001 .
sort t1001 by begda descending .
read table t1001 with key objid = p_pernr
otype = 'P'
rsign = 'B'
relat = '008'
sclas = 'S'.
if sy-subrc = 0.
v_sobid1 = t1001-sobid.
call function 'RH_READ_INFTY'
exporting
plvar = '01'
otype = 'S'
objid = v_sobid1
infty = '1001'
subty = 'A003'
begda = sy-datum
endda = sy-datum
tables
innnn = t1002 .
endif.
sort t1002 by begda descending .
read table t1002 with key objid = v_sobid1
otype = 'S'
rsign = 'A'
relat = '003'
sclas = 'O'.
if sy-subrc = 0.
v_sobid2 = t1002-sobid.
call function 'RH_READ_INFTY'
exporting
plvar = '01'
otype = 'O'
objid = v_sobid2
infty = '1001'
subty = 'B012'
begda = sy-datum
endda = sy-datum
tables
innnn = t1003 .
endif.
sort t1003 by objid.
read table t1003 with key objid = v_sobid2
otype = 'O'
rsign = 'B'
relat = '012'
sclas = 'S'.
if sy-subrc = 0.
v_sobid3 = t1003-sobid.
call function 'RH_READ_INFTY'
exporting
plvar = '01'
otype = 'S'
objid = v_sobid3
infty = '1001'
subty = 'A008'
begda = sy-datum
endda = sy-datum
tables
innnn = t1004 .
endif.
read table t1004 with key objid = v_sobid3
otype = 'S'
rsign = 'A'
relat = '008'
sclas = 'P'.
if sy-subrc = 0.
v_pernr = t1004-sobid+0(8).
select pernr
vorna
nachn
cname
from pa0002
into corresponding fields of table it_pa0002
where pernr = v_pernr.
sort it_pa0002 by pernr begda.
read table it_pa0002 index 1.
if sy-subrc eq 0.
write:/ it_pa0002-pernr,it_pa0002-vorna,it_pa0002-nachn,it_pa0002-cname.
endif.
endif.
(iii) Function Module RH_STRUC_GET
This is used to get the higher organization unit for the given personnel no. this is easier way for getting the highest org unit for a given pesonnel no or for a given org.unit ..
REPORT ZHRTESTS.
PARAMETERS:P_OBJID TYPE OBJID.
DATA:RESULT_OBJEC TYPE OBJEC OCCURS 0 WITH HEADER LINE ,
RESULT_OBJEC1 TYPE OBJEC OCCURS 0 WITH HEADER LINE ,
V_OBJID1 TYPE OBJID .
*---here we will get the organization unit for the given pesonnel number.
CALL FUNCTION 'RH_STRUC_GET'
EXPORTING
act_otype = 'P'
act_objid = p_objid
act_wegid = 'P-S-O' " person-position-orgunit
TABLES
RESULT_OBJEC = RESULT_OBJEC.
LOOP AT RESULT_OBJEC WHERE OTYPE = 'O'.
*--- loop the orgunits only to get the higher orgunits
V_OBJID1 = RESULT_OBJEC-OBJID.
CALL FUNCTION 'RH_STRUC_GET'
EXPORTING
act_otype = 'O'
act_objid = V_OBJID1
act_wegid = 'O-O'
TABLES
RESULT_OBJEC = RESULT_OBJEC1 .
LOOP AT RESULT_OBJEC1.
ENDLOOP.
*----this is the highest orgunit for the Personnel number
WRITE:/ RESULT_OBJEC1-OBJID.
ENDLOOP.
3. Using Logical Databases (Macros).
Here i am using the PNP logical database for this example . And I am using the macros for getting the data from the databases .
REPORT ZHRTESTS.
TABLES: PERNR.
INFOTYPES: 0002.
GET PERNR.
*---get the first record for the pernr from the infotype
RP_PROVIDE_FROM_FRST P0002 SPACE PN-BEGDA PN-ENDDA .
IF PNP-SW-FOUND eq 1.
WRITE: / PERNR-PERNR,
PN-BEGDA,
PN-ENDDA,
P0002-VORNA,
P0002-NACHN,
P0002-GBDAT.
ENDIF.
*---get the last record for the pernr from the infotype
RP_PROVIDE_FROM_LAST P0002 SPACE PN-BEGDA PN-ENDDA.
IF PNP-SW-FOUND eq 1.
WRITE: / PERNR-PERNR,
PN-BEGDA,
PN-ENDDA,
P0002-VORNA,
P0002-NACHN,
P0002-GBDAT.
ENDIF.
This is the simple method for the selection of data from the hr tables(pannnn). in the HR data time is the major component , in the where condition we should include the date parameters for fetching the data .see this example
REPORT ZHRTESTS.
tables:pa0002 .
data:begin of itab occurs 0,
pernr like pa0002-pernr,
begda like pa0002-begda,
endda like pa0002-endda,
vorna like pa0002-vorna,
nachn like pa0002-nachn,
end of itab .
select-options:s_pernr for pa0002-pernr ,
s_date for sy-datum.
start-of-selection .
select pernr
begda
endda
vorna
nachn
from pa0002
into table itab
where pernr in s_pernr
and begda le s_date-high
and endda ge s_date-low.
if not itab[] is initial.
loop at itab .
write:/ itab-pernr,
itab-begda,
itab-endda,
itab-vorna,
itab-nachn .
endloop.
endif.
REPORT ZHRTESTS.
tables:pa0002 .
data:begin of itab occurs 0,
pernr like pa0002-pernr,
begda like pa0002-begda,
endda like pa0002-endda,
vorna like pa0002-vorna,
nachn like pa0002-nachn,
end of itab .
select-options:s_pernr for pa0002-pernr ,
s_date for sy-datum.
start-of-selection .
select pernr
begda
endda
vorna
nachn
from pa0002
into table itab
where pernr in s_pernr
and begda le s_date-high
and endda ge s_date-low.
if not itab[] is initial.
loop at itab .
write:/ itab-pernr,
itab-begda,
itab-endda,
itab-vorna,
itab-nachn .
endloop.
endif.
2. Using Different Function Modules.
(i). Function Module HR_READ_INFOTYPE
This function module is used for fetching the data from Personnel Administration and Time management info types . This is used to get a single PERNR from the Info type .see the below example....
REPORT ZHRTESTS.
tables:pa0002 .
data: itab type p0002 occurs 0 with header line .
select-options:s_pernr for pa0002-pernr no intervals no-extension,
s_date for sy-datum.
start-of-selection .
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
TCLAS = 'A'
pernr = s_pernr-low
infty = '0002'
BEGDA = s_date-low
ENDDA = s_date-high
TABLES
infty_tab = itab.
if not itab[] is initial.
loop at itab .
write:/ itab-pernr,
itab-begda,
itab-endda,
itab-vorna,
itab-nachn .
endloop.
endif.
(ii) Function Module RH_READ_INTFY
This is used for the organization management info types. With this function module we can get the relations for the given object ( means we can get position for a pernr , organization for a position , organization for an organization....)
report ygetsupervisor.
*&---------------------------------------------------------------------*
* database tables used
*&---------------------------------------------------------------------*
tables:pa0001,
hrp1001,
pa0002.
*&---------------------------------------------------------------------*
* internal tables declaration
*&---------------------------------------------------------------------*
data: t1001 like p1001 occurs 0 with header line,
t1002 like p1001 occurs 0 with header line,
t1003 like p1001 occurs 0 with header line,
t1004 like p1001 occurs 0 with header line,
t0001 like p0001 occurs 0 with header line,
it_pa0002 type pa0002 occurs 0 with header line.
*&---------------------------------------------------------------------*
* variable declaration
*&---------------------------------------------------------------------*
data: v_sobid1 like p1001-objid,
v_sobid2 like p1001-objid,
v_sobid3 like p1001-objid,
v_pernr like pa0002-pernr.
*&---------------------------------------------------------------------*
* selection screen paramters
*&---------------------------------------------------------------------*
parameters:p_pernr like pa0001-pernr.
*&---------------------------------------------------------------------*
* start of selection
*&---------------------------------------------------------------------*
start-of-selection.
call function 'RH_READ_INFTY'
exporting
plvar = '01'
otype = 'P'
objid = p_pernr
infty = '1001'
subty = 'B008'
begda = sy-datum
endda = sy-datum
tables
innnn = t1001 .
sort t1001 by begda descending .
read table t1001 with key objid = p_pernr
otype = 'P'
rsign = 'B'
relat = '008'
sclas = 'S'.
if sy-subrc = 0.
v_sobid1 = t1001-sobid.
call function 'RH_READ_INFTY'
exporting
plvar = '01'
otype = 'S'
objid = v_sobid1
infty = '1001'
subty = 'A003'
begda = sy-datum
endda = sy-datum
tables
innnn = t1002 .
endif.
sort t1002 by begda descending .
read table t1002 with key objid = v_sobid1
otype = 'S'
rsign = 'A'
relat = '003'
sclas = 'O'.
if sy-subrc = 0.
v_sobid2 = t1002-sobid.
call function 'RH_READ_INFTY'
exporting
plvar = '01'
otype = 'O'
objid = v_sobid2
infty = '1001'
subty = 'B012'
begda = sy-datum
endda = sy-datum
tables
innnn = t1003 .
endif.
sort t1003 by objid.
read table t1003 with key objid = v_sobid2
otype = 'O'
rsign = 'B'
relat = '012'
sclas = 'S'.
if sy-subrc = 0.
v_sobid3 = t1003-sobid.
call function 'RH_READ_INFTY'
exporting
plvar = '01'
otype = 'S'
objid = v_sobid3
infty = '1001'
subty = 'A008'
begda = sy-datum
endda = sy-datum
tables
innnn = t1004 .
endif.
read table t1004 with key objid = v_sobid3
otype = 'S'
rsign = 'A'
relat = '008'
sclas = 'P'.
if sy-subrc = 0.
v_pernr = t1004-sobid+0(8).
select pernr
vorna
nachn
cname
from pa0002
into corresponding fields of table it_pa0002
where pernr = v_pernr.
sort it_pa0002 by pernr begda.
read table it_pa0002 index 1.
if sy-subrc eq 0.
write:/ it_pa0002-pernr,it_pa0002-vorna,it_pa0002-nachn,it_pa0002-cname.
endif.
endif.
(iii) Function Module RH_STRUC_GET
This is used to get the higher organization unit for the given personnel no. this is easier way for getting the highest org unit for a given pesonnel no or for a given org.unit ..
REPORT ZHRTESTS.
PARAMETERS:P_OBJID TYPE OBJID.
DATA:RESULT_OBJEC TYPE OBJEC OCCURS 0 WITH HEADER LINE ,
RESULT_OBJEC1 TYPE OBJEC OCCURS 0 WITH HEADER LINE ,
V_OBJID1 TYPE OBJID .
*---here we will get the organization unit for the given pesonnel number.
CALL FUNCTION 'RH_STRUC_GET'
EXPORTING
act_otype = 'P'
act_objid = p_objid
act_wegid = 'P-S-O' " person-position-orgunit
TABLES
RESULT_OBJEC = RESULT_OBJEC.
LOOP AT RESULT_OBJEC WHERE OTYPE = 'O'.
*--- loop the orgunits only to get the higher orgunits
V_OBJID1 = RESULT_OBJEC-OBJID.
CALL FUNCTION 'RH_STRUC_GET'
EXPORTING
act_otype = 'O'
act_objid = V_OBJID1
act_wegid = 'O-O'
TABLES
RESULT_OBJEC = RESULT_OBJEC1 .
LOOP AT RESULT_OBJEC1.
ENDLOOP.
*----this is the highest orgunit for the Personnel number
WRITE:/ RESULT_OBJEC1-OBJID.
ENDLOOP.
3. Using Logical Databases (Macros).
Here i am using the PNP logical database for this example . And I am using the macros for getting the data from the databases .
REPORT ZHRTESTS.
TABLES: PERNR.
INFOTYPES: 0002.
GET PERNR.
*---get the first record for the pernr from the infotype
RP_PROVIDE_FROM_FRST P0002 SPACE PN-BEGDA PN-ENDDA .
IF PNP-SW-FOUND eq 1.
WRITE: / PERNR-PERNR,
PN-BEGDA,
PN-ENDDA,
P0002-VORNA,
P0002-NACHN,
P0002-GBDAT.
ENDIF.
*---get the last record for the pernr from the infotype
RP_PROVIDE_FROM_LAST P0002 SPACE PN-BEGDA PN-ENDDA.
IF PNP-SW-FOUND eq 1.
WRITE: / PERNR-PERNR,
PN-BEGDA,
PN-ENDDA,
P0002-VORNA,
P0002-NACHN,
P0002-GBDAT.
ENDIF.
ALSO READ:
- Using Macros In HR ABAP Report Program.
- Get The List Of Employees With Experience.
- BADI HRECM00_BDG0001 - Upload Initial Budgets From Excel Sheet.
- Get Employee Picture In Selection Screen.
- Unified Access to All HR Infotypes.
.....Back To Sub-Index On HR ABAP.
.....Back To MAIN INDEX.
Very informative for the rookies :)
ReplyDelete