FUNCTION Z_PERSON_RES_SAL.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(IPERNR) TYPE PERNR_D DEFAULT '80000001'
*" VALUE(BEGIN) TYPE SYDATUM DEFAULT SY-DATUM
*" EXPORTING
*" VALUE(SAL) TYPE PAD_AMT7S
*" VALUE(RET) TYPE BAPIRET2
*"----------------------------------------------------------------------
data: PNP-SW-FOUND type c,
pnp-sy-tabix LIKE sy-tabix.
data endda like p0001-begda.
data bdate like p0001-begda.
data tmp(8) type c.
data:p3010 type PAD_AMT7S,
p3011 type PAD_AMT7S,
p3110 type PAD_AMT7S.
data : tmplg like p0008-lga01,
tmpbetrg like p0008-bet01,
tmpanz like p0008-anz01.
data : it0008 type p0008 occurs 10 with header line,
it0014 type p0014 occurs 10 with HEADER LINE.
CONCATENATE begin+0(6)
'01'
into tmp.
move tmp to endda.
CONCATENATE begin+0(4)
'0301'
into tmp.
move tmp to bdate.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
* TCLAS = 'A'
PERNR = ipernr
INFTY = '0008'
BEGDA = bdate
ENDDA = endda
* BYPASS_BUFFER = ' '
* LEGACY_MODE = ' '
* IMPORTING
* SUBRC =
TABLES
INFTY_TAB = it0008
EXCEPTIONS
INFTY_NOT_FOUND = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ret-type = 'E'.
ret-message = '0008'.
exit.
ENDIF.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
* TCLAS = 'A'
PERNR = ipernr
INFTY = '0014'
BEGDA = bdate
ENDDA = endda
* BYPASS_BUFFER = ' '
* LEGACY_MODE = ' '
* IMPORTING
* SUBRC =
TABLES
INFTY_TAB = it0014
EXCEPTIONS
INFTY_NOT_FOUND = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ret-type = 'E'.
ret-message = '0014'.
exit.
ENDIF.
endda = bdate.
SAL = 0.
CALL FUNCTION 'DATE_GET_MONTH_LASTDAY'
EXPORTING
I_DATE = bdate
IMPORTING
E_DATE = endda
.
do 12 times.
clear:p3011,p3010,p3110.
rp-provide-from-last it0008 space bdate endda.
if pnp-sw-found eq '1'.
do 40 times varying tmplg from it0008-lga01 next it0008-lga02
varying tmpbetrg from it0008-bet01 next it0008-bet02
varying tmpanz from it0008-anz01 next it0008-anz02.
if tmplg eq '3010'.
p3010 = tmpbetrg.
endif.
if tmplg eq '3011'.
p3011 = tmpanz.
endif.
enddo.
endif.
rp-provide-from-last it0014 '3110' bdate endda.
if pnp-sw-found eq '1'.
p3110 = it0014-betrg.
endif.
sal = sal + ( p3010 * p3011 / 100 ) - p3110.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
DATE = bdate
DAYS = '00'
MONTHS = '01'
SIGNUM = '+'
YEARS = '00'
IMPORTING
CALC_DATE = bdate
.
CALL FUNCTION 'DATE_GET_MONTH_LASTDAY'
EXPORTING
I_DATE = bdate
IMPORTING
E_DATE = endda
.
if endda >= BEGIN.
exit.
endif.
enddo.
ENDFUNCTION.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(IPERNR) TYPE PERNR_D DEFAULT '80000001'
*" VALUE(BEGIN) TYPE SYDATUM DEFAULT SY-DATUM
*" EXPORTING
*" VALUE(SAL) TYPE PAD_AMT7S
*" VALUE(RET) TYPE BAPIRET2
*"----------------------------------------------------------------------
data: PNP-SW-FOUND type c,
pnp-sy-tabix LIKE sy-tabix.
data endda like p0001-begda.
data bdate like p0001-begda.
data tmp(8) type c.
data:p3010 type PAD_AMT7S,
p3011 type PAD_AMT7S,
p3110 type PAD_AMT7S.
data : tmplg like p0008-lga01,
tmpbetrg like p0008-bet01,
tmpanz like p0008-anz01.
data : it0008 type p0008 occurs 10 with header line,
it0014 type p0014 occurs 10 with HEADER LINE.
CONCATENATE begin+0(6)
'01'
into tmp.
move tmp to endda.
CONCATENATE begin+0(4)
'0301'
into tmp.
move tmp to bdate.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
* TCLAS = 'A'
PERNR = ipernr
INFTY = '0008'
BEGDA = bdate
ENDDA = endda
* BYPASS_BUFFER = ' '
* LEGACY_MODE = ' '
* IMPORTING
* SUBRC =
TABLES
INFTY_TAB = it0008
EXCEPTIONS
INFTY_NOT_FOUND = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ret-type = 'E'.
ret-message = '0008'.
exit.
ENDIF.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
* TCLAS = 'A'
PERNR = ipernr
INFTY = '0014'
BEGDA = bdate
ENDDA = endda
* BYPASS_BUFFER = ' '
* LEGACY_MODE = ' '
* IMPORTING
* SUBRC =
TABLES
INFTY_TAB = it0014
EXCEPTIONS
INFTY_NOT_FOUND = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ret-type = 'E'.
ret-message = '0014'.
exit.
ENDIF.
endda = bdate.
SAL = 0.
CALL FUNCTION 'DATE_GET_MONTH_LASTDAY'
EXPORTING
I_DATE = bdate
IMPORTING
E_DATE = endda
.
do 12 times.
clear:p3011,p3010,p3110.
rp-provide-from-last it0008 space bdate endda.
if pnp-sw-found eq '1'.
do 40 times varying tmplg from it0008-lga01 next it0008-lga02
varying tmpbetrg from it0008-bet01 next it0008-bet02
varying tmpanz from it0008-anz01 next it0008-anz02.
if tmplg eq '3010'.
p3010 = tmpbetrg.
endif.
if tmplg eq '3011'.
p3011 = tmpanz.
endif.
enddo.
endif.
rp-provide-from-last it0014 '3110' bdate endda.
if pnp-sw-found eq '1'.
p3110 = it0014-betrg.
endif.
sal = sal + ( p3010 * p3011 / 100 ) - p3110.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
DATE = bdate
DAYS = '00'
MONTHS = '01'
SIGNUM = '+'
YEARS = '00'
IMPORTING
CALC_DATE = bdate
.
CALL FUNCTION 'DATE_GET_MONTH_LASTDAY'
EXPORTING
I_DATE = bdate
IMPORTING
E_DATE = endda
.
if endda >= BEGIN.
exit.
endif.
enddo.
ENDFUNCTION.