Service calculation report

*----This is the service calculation report for the employees,

*      here the employees will get the benifit days depending on the service in the organization

*     here we are updating the service calculation amount automatilcally to the infotype 15

*     to replicate the amount in the Payroll
REPORT zhr_service_calculation  MESSAGE-ID zmsg.

TYPE-POOLS: slis .

TABLES: pa0000,

pa0001,

sscrfields.

TYPES: BEGIN OF ty_pa0000,

pernr TYPE pa0000-pernr,

begda TYPE pa0000-begda,

endda TYPE pa0000-endda,

massn TYPE pa0000-massn,

stat2 TYPE p0000-stat2,

END OF ty_pa0000.

TYPES: BEGIN OF ty_pa0001,

pernr LIKE pa0001-pernr,

begda LIKE pa0001-begda,

endda LIKE pa0001-endda,

werks LIKE pa0001-werks,

persg LIKE pa0001-persg,

persk LIKE pa0001-persk,

btrtl LIKE pa0001-btrtl,

END OF ty_pa0001.

TYPES: BEGIN OF ty_pa0002,

pernr TYPE pa0002-pernr,

begda TYPE pa0002-begda,

endda TYPE pa0002-endda,

vorna TYPE pa0002-vorna,

nachn TYPE pa0002-nachn,

END OF ty_pa0002.

TYPES: BEGIN OF ty_pa0041.

INCLUDE STRUCTURE p0041.

TYPES: END OF ty_pa0041.

TYPES: BEGIN OF ty_pa2001.

INCLUDE STRUCTURE p2001.

TYPES: END OF ty_pa2001.

TYPES: BEGIN OF ty_pa0008.

INCLUDE STRUCTURE p0008.

TYPES: END OF ty_pa0008.

DATA: BEGIN OF wagetypes,

lga LIKE p0008-lga01,

bet LIKE p0008-bet01,

END OF wagetypes.

DATA: BEGIN OF dates,

dar LIKE p0041-dar01,

dat LIKE p0041-dat01,

END OF dates.

DATA: return LIKE bapireturn1.

TYPES: BEGIN OF ty_final,

pernr TYPE pa0000-pernr,

begda TYPE pa0000-begda,

endda TYPE pa0000-endda,

vorna TYPE pa0002-vorna,

nachn TYPE pa0002-nachn,

* werks LIKE pa0001-werks,

* persg LIKE pa0001-persg,

* persk LIKE pa0001-persk,

* btrtl LIKE pa0001-btrtl,

ltype TYPE char50,

bsal TYPE pa0008-bet01,

stat TYPE char20,

syears TYPE i,

smonths TYPE i,

sdays TYPE i,

bendays TYPE p DECIMALS 2,

amount TYPE pa0008-bet01,

amount1 TYPE pa0008-bet01,

END OF ty_final.

TYPES: BEGIN OF ty_prop_values.

INCLUDE STRUCTURE pprop.

TYPES: END OF ty_prop_values.

TYPES: BEGIN OF ty_mod_values.

INCLUDE STRUCTURE pskey.

TYPES: END OF ty_mod_values.

DATA: it_prop_values TYPE TABLE OF ty_prop_values WITH HEADER LINE,

it_mod_values TYPE TABLE OF ty_mod_values WITH HEADER LINE,

it_return TYPE bapireturn .

DATA: lfs_0008 LIKE p0008,

v_bet01 LIKE p0008-bet01,

v_bet02 LIKE p0008-bet01,

v_bet03 LIKE p0008-bet01.

DATA: it_pa0000 TYPE STANDARD TABLE OF ty_pa0000 WITH HEADER LINE,

it_pa0001 TYPE STANDARD TABLE OF ty_pa0001 WITH HEADER LINE,

it_pa0002 TYPE STANDARD TABLE OF ty_pa0002 WITH HEADER LINE,

it_pa0008 TYPE STANDARD TABLE OF ty_pa0008 WITH HEADER LINE,

it_pa0041 TYPE STANDARD TABLE OF ty_pa0041 WITH HEADER LINE,

it_pa2001 TYPE STANDARD TABLE OF ty_pa2001 WITH HEADER LINE,

it_final TYPE STANDARD TABLE OF ty_final WITH HEADER LINE,

it_fieldcat TYPE slis_t_fieldcat_alv,

wa_fieldcat TYPE slis_fieldcat_alv,

it_top_of_page TYPE slis_t_listheader,

it_layout TYPE slis_layout_alv,

it_events TYPE slis_t_event,

wa_events TYPE slis_alv_event,

it_list TYPE slis_t_listheader WITH HEADER LINE,

wa_pa0015 TYPE p0015.

DATA: v_years TYPE i,

v_months TYPE i,

v_days TYPE i,

v_date TYPE sy-datum,

v_addi_bdays TYPE i,

v_addi_bdays1 TYPE i,

v_addi_bdays2 TYPE i,

v_count TYPE i.

CONSTANTS: v_bdays TYPE i VALUE '15'.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

SELECTION-SCREEN END OF BLOCK b1 .

SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-002.

SELECT-OPTIONS: s_pernr FOR pa0000-pernr,

s_werks FOR pa0001-werks,

s_btrtl FOR pa0001-btrtl,

s_persg FOR pa0001-persg,

s_persk FOR pa0001-persk.

PARAMETERS: p_date LIKE pa0000-begda DEFAULT sy-datum.

SELECTION-SCREEN END OF BLOCK b3 .

SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-004.

PARAMETERS: r4 RADIOBUTTON GROUP r2 DEFAULT 'X' USER-COMMAND uc1. " Leaving

PARAMETERS: r3 RADIOBUTTON GROUP r2. " Termination

SELECTION-SCREEN BEGIN OF BLOCK b5 WITH FRAME TITLE text-004.

PARAMETERS: r5 RADIOBUTTON GROUP r3 MODIF ID aaa, "with notice period

r6 RADIOBUTTON GROUP r3 MODIF ID aaa. "without notice period

SELECTION-SCREEN END OF BLOCK b5.

SELECTION-SCREEN END OF BLOCK b4 .

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-003.

PARAMETERS: r1 RADIOBUTTON GROUP r1, " Test Run

r2 RADIOBUTTON GROUP r1. " Actual Run

SELECTION-SCREEN END OF BLOCK b2 .

AT SELECTION-SCREEN .

IF sscrfields = 'ONLI'.

IF p_date IS INITIAL.

MESSAGE e043 WITH 'Enter A Valid Date'.

ENDIF.

ENDIF.

AT SELECTION-SCREEN OUTPUT .

IF r4 = 'X'.

LOOP AT SCREEN.

IF screen-group1 = 'AAA'.

screen-active = 0.

MODIFY SCREEN.

ENDIF.

ENDLOOP.

ENDIF.

START-OF-SELECTION.

PERFORM get_data.

END-OF-SELECTION.

PERFORM process_data.

PERFORM build_fieldcat.

PERFORM display_alv.

*&---------------------------------------------------------------------*

*& Form GET_DATA

*----------------------------------------------------------------------*

FORM get_data .

IF p_date IS INITIAL.

p_date = sy-datum.

ENDIF.

IF r3 = 'X'.

SELECT pernr

begda

endda

massn

stat2

FROM pa0000

INTO TABLE it_pa0000

WHERE pernr IN s_pernr

AND begda LE p_date

AND endda GE p_date.

* AND massn EQ '20'. " termination

ELSE.

SELECT pernr

begda

endda

massn

stat2

FROM pa0000

INTO TABLE it_pa0000

WHERE pernr IN s_pernr

AND begda LE p_date

AND endda GE p_date

AND massn EQ '10'. "Leaving

ENDIF.

IF NOT it_pa0000[] IS INITIAL.

SORT it_pa0000 BY pernr begda.

DELETE ADJACENT DUPLICATES FROM it_pa0000 COMPARING pernr.

SELECT *

FROM pa0041

INTO CORRESPONDING FIELDS OF TABLE it_pa0041

FOR ALL ENTRIES IN it_pa0000

WHERE pernr = it_pa0000-pernr.

IF sy-subrc = 0.

SELECT pernr

begda

endda

werks

persg

persk

btrtl

FROM pa0001

INTO TABLE it_pa0001

FOR ALL ENTRIES IN it_pa0000

WHERE pernr = it_pa0000-pernr

AND werks IN s_werks

AND btrtl IN s_btrtl

AND persg IN s_persg

AND persk IN s_persk.

DELETE ADJACENT DUPLICATES FROM it_pa0001 COMPARING pernr.

SELECT pernr

begda

endda

vorna

nachn

FROM pa0002

INTO TABLE it_pa0002

FOR ALL ENTRIES IN it_pa0000

WHERE pernr = it_pa0000-pernr.

IF NOT it_pa0002[] IS INITIAL.

SORT it_pa0002 BY pernr.

ENDIF.

SELECT * FROM pa0008

INTO CORRESPONDING FIELDS OF TABLE it_pa0008

FOR ALL ENTRIES IN it_pa0000

WHERE pernr = it_pa0000-pernr

AND begda LE p_date

AND endda GE p_date.

IF sy-subrc = 0.

SORT it_pa0008 BY pernr ASCENDING begda DESCENDING.

ENDIF.

ENDIF.

SELECT * FROM pa2001

INTO CORRESPONDING FIELDS OF TABLE it_pa2001

FOR ALL ENTRIES IN it_pa0000

WHERE pernr = it_pa0000-pernr

AND subty = '5100'

OR subty = '5110'.

IF sy-subrc = 0.

SORT it_pa2001 BY pernr.

ENDIF.

ENDIF.

ENDFORM. " GET_DATA

*&---------------------------------------------------------------------*

*& Form PROCESS_DATA

*----------------------------------------------------------------------*

FORM process_data .

LOOP AT it_pa0001.

READ TABLE it_pa0000 WITH KEY pernr = it_pa0001-pernr.

IF sy-subrc = 0.

it_final-pernr = it_pa0000-pernr.

CASE: it_pa0000-stat2.

WHEN '0'.

it_final-stat = 'Withdrawn'.

WHEN '1'.

it_final-stat = 'Inactive'.

WHEN '2'.

it_final-stat = 'Retiree'.

WHEN '3'.

it_final-stat = 'Active'.

ENDCASE.

ENDIF.

READ TABLE it_pa0002 WITH KEY pernr = it_pa0001-pernr.

IF sy-subrc = 0.

it_final-vorna = it_pa0002-vorna.

it_final-nachn = it_pa0002-nachn.

ENDIF.

* it_final-werks = it_pa0001-werks.

* it_final-persg = it_pa0001-persg.

* it_final-persk = it_pa0001-persk.

* it_final-btrtl = it_pa0001-btrtl.

READ TABLE it_pa0041 WITH KEY pernr = it_pa0000-pernr.

IF sy-subrc = 0.

DO 12 TIMES VARYING dates-dar FROM it_pa0041-dar01 NEXT it_pa0041-dar02

VARYING dates-dat FROM it_pa0041-dat01 NEXT it_pa0041-dat02.

CHECK dates-dar IS NOT INITIAL.

IF dates-dar = '01'.

it_final-begda = dates-dat.

ENDIF.

ENDDO.

ENDIF.

IF it_final-begda IS INITIAL.

it_final-begda = it_pa0001-begda.

ENDIF.

CALL FUNCTION 'HR_SGPBS_YRS_MTHS_DAYS'

EXPORTING

beg_da = it_final-begda

end_da = p_date

IMPORTING

no_day = v_days

no_month = v_months

no_year = v_years

EXCEPTIONS

dateint_error = 1

OTHERS = 2.

it_final-syears = v_years.

it_final-smonths = v_months.

it_final-sdays = v_days.

CHECK v_years GE 2.

READ TABLE it_pa0008 WITH KEY pernr = it_pa0001-pernr.

IF sy-subrc = 0.

CLEAR : lfs_0008.

MOVE-CORRESPONDING it_pa0008 TO lfs_0008.

DO 40 TIMES VARYING wagetypes-lga FROM lfs_0008-lga01 NEXT lfs_0008-lga02

VARYING wagetypes-bet FROM lfs_0008-bet01 NEXT lfs_0008-bet02.

CHECK wagetypes-lga IS NOT INITIAL.

CASE wagetypes-lga.

WHEN '1000'. " Basic pay

v_bet01 = wagetypes-bet.

it_final-bsal = wagetypes-bet.

* WHEN '1010'.

* v_bet01 = v_bet01 + wagetypes-bet.

*

* WHEN '1020'.

* v_bet01 = v_bet01 + wagetypes-bet.

ENDCASE.

ENDDO.

ENDIF.

IF r4 = 'X'. "Resignation process

DATA: no_of_days TYPE i,

v_updays TYPE i,

v_kaltg TYPE pa2001-kaltg.

CALL FUNCTION 'HR_99S_INTERVAL_BETWEEN_DATES'

EXPORTING

begda = it_final-begda

endda = p_date

IMPORTING

days = no_of_days.

LOOP AT it_pa2001 WHERE pernr = it_final-pernr.

v_kaltg = it_pa2001-kaltg.

ENDLOOP.

v_updays = v_kaltg.

IF v_years GE 2 AND v_years LT 5.

it_final-amount = ( 1 / 3 ) * v_bet01 * ( ( no_of_days - v_updays ) / 365 ) .

ELSEIF v_years GE 5 AND v_years LT 10.

it_final-amount = ( 2 / 3 ) * v_bet01 * ( ( no_of_days - v_updays ) / 365 ) .

ELSE.

it_final-amount = v_bet01 * ( ( no_of_days - v_updays ) / 365 ) .

ENDIF.

ELSE. " Termination Process

IF v_years LT 2.

it_final-amount = v_bet01 / 12 / v_years.

ELSE.

ENDIF.

ENDIF.

IF r4 = 'X'.

it_final-ltype = 'Leaving'.

ELSEIF r3 = 'X'.

IF r5 = 'X'.

it_final-ltype = 'Terminated with Notice Period '.

ELSEIF r6 = 'X'.

it_final-ltype = 'Terminated without Notice Period'.

ENDIF.

ENDIF.

APPEND it_final.

CLEAR it_final.

CLEAR: v_years, v_addi_bdays, v_months, v_days, v_count.

ENDLOOP.

IF r2 = 'X'.

DATA: l_answer TYPE c.

CALL FUNCTION 'POPUP_TO_CONFIRM'

EXPORTING

titlebar = 'Update info type 0015(Additional Payments)'

text_question = 'Do you want to update the data to infotype 0015 (Additional Payments)'

text_button_1 = 'Yes'

icon_button_1 = 'ICON_OKEY'

text_button_2 = 'No'

icon_button_2 = 'ICON_CANCEL'

default_button = '1'

display_cancel_button = 'X'

IMPORTING

answer = l_answer.

IF l_answer = '1'.

LOOP AT it_final.

PERFORM update_pa0015.

ENDLOOP.

ELSE.

MESSAGE s000 WITH 'Update was Failed'.

ENDIF.

ENDIF.

ENDFORM. " PROCESS_DATA

*&---------------------------------------------------------------------*

*& Form BUILD_FIELDCAT

*----------------------------------------------------------------------*

FORM build_fieldcat .

it_layout-colwidth_optimize = 'X'.

wa_fieldcat-fieldname = 'PERNR'.

wa_fieldcat-seltext_m = 'Personnel Number'.

wa_fieldcat-just = 'C'.

APPEND wa_fieldcat TO it_fieldcat.

wa_fieldcat-fieldname = 'BEGDA'.

wa_fieldcat-seltext_m = 'Start Date'.

wa_fieldcat-just = 'C'.

APPEND wa_fieldcat TO it_fieldcat.

CLEAR wa_fieldcat.

* wa_fieldcat-fieldname = 'ENDDA'.

* wa_fieldcat-seltext_m = 'End Date'.

* wa_fieldcat-just = 'C'.

* APPEND wa_fieldcat TO it_fieldcat.

* CLEAR wa_fieldcat.

wa_fieldcat-fieldname = 'VORNA'.

wa_fieldcat-seltext_m = 'First Name'.

APPEND wa_fieldcat TO it_fieldcat.

CLEAR wa_fieldcat.

wa_fieldcat-fieldname = 'NACHN'.

wa_fieldcat-seltext_m = 'Last Name'.

APPEND wa_fieldcat TO it_fieldcat.

CLEAR wa_fieldcat.

* wa_fieldcat-fieldname = 'WERKS'.

* wa_fieldcat-seltext_l = 'Personnel Area'.

* wa_fieldcat-just = 'C'.

* APPEND wa_fieldcat TO it_fieldcat.

* CLEAR wa_fieldcat.

*

* wa_fieldcat-fieldname = 'BTRTL'.

* wa_fieldcat-seltext_l = 'Pers...nnel Subarea'.

* wa_fieldcat-just = 'C'.

* APPEND wa_fieldcat TO it_fieldcat.

* CLEAR wa_fieldcat.

*

* wa_fieldcat-fieldname = 'PERSG'.

* wa_fieldcat-seltext_l = 'Employee Group'.

* wa_fieldcat-just = 'C'.

* APPEND wa_fieldcat TO it_fieldcat.

* CLEAR wa_fieldcat.

*

* wa_fieldcat-fieldname = 'PERSK'.

* wa_fieldcat-seltext_l = 'Employee Subgroup'.

* wa_fieldcat-just = 'C'.

* APPEND wa_fieldcat TO it_fieldcat.

* CLEAR wa_fieldcat.

wa_fieldcat-fieldname = 'STAT'.

wa_fieldcat-seltext_l = 'Employment Status'.

wa_fieldcat-just = 'C'.

APPEND wa_fieldcat TO it_fieldcat.

CLEAR wa_fieldcat.

wa_fieldcat-fieldname = 'SYEARS'.

wa_fieldcat-seltext_m = 'No of Service Years'.

wa_fieldcat-just = 'C'.

APPEND wa_fieldcat TO it_fieldcat.

CLEAR wa_fieldcat.

wa_fieldcat-fieldname = 'SMONTHS'.

wa_fieldcat-seltext_m = 'No of Service Months'.

wa_fieldcat-just = 'C'.

APPEND wa_fieldcat TO it_fieldcat.

CLEAR wa_fieldcat.

wa_fieldcat-fieldname = 'SDAYS'.

wa_fieldcat-seltext_m = 'No of Service Days'.

wa_fieldcat-just = 'C'.

APPEND wa_fieldcat TO it_fieldcat.

CLEAR wa_fieldcat.

wa_fieldcat-fieldname = 'LTYPE'.

wa_fieldcat-seltext_m = 'Type of Leaving'.

wa_fieldcat-just = 'L'.

APPEND wa_fieldcat TO it_fieldcat.

CLEAR wa_fieldcat.

wa_fieldcat-fieldname = 'BSAL'.

wa_fieldcat-seltext_m = 'Basic Pay'.

wa_fieldcat-just = 'C'.

APPEND wa_fieldcat TO it_fieldcat.

CLEAR wa_fieldcat.

wa_fieldcat-fieldname = 'AMOUNT'.

wa_fieldcat-seltext_m = 'Final Benifit Amount'.

wa_fieldcat-just = 'C'.

APPEND wa_fieldcat TO it_fieldcat.

CLEAR wa_fieldcat.

wa_fieldcat-fieldname = 'AMOUNT1'.

wa_fieldcat-seltext_m = 'Notice Period Amount'.

wa_fieldcat-just = 'C'.

APPEND wa_fieldcat TO it_fieldcat.

CLEAR wa_fieldcat.

ENDFORM. " BUILD_FIELDCAT

*&---------------------------------------------------------------------*

*& Form DISPLAY_ALV

*----------------------------------------------------------------------*

FORM display_alv .

it_layout-zebra = 'X'.

it_layout-colwidth_optimize = 'X'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

i_callback_program = sy-repid

i_callback_top_of_page = 'TOP_OF_PAGE'

is_layout = it_layout

it_fieldcat = it_fieldcat

it_events = it_events

TABLES

t_outtab = it_final.

ENDFORM. " DISPLAY_ALV

*&---------------------------------------------------------------------*

*& Form top_of_page

*----------------------------------------------------------------------*

FORM top_of_page .

PERFORM write_header.

*--- Get the comments on the top of page.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

EXPORTING

it_list_commentary = it_list[].

ENDFORM. " top_of_page

*&---------------------------------------------------------------------*

*& Form write_header

*----------------------------------------------------------------------*

FORM write_header .

REFRESH it_list.

CLEAR it_list.

CLEAR it_list.

it_list-typ = 'H'.

it_list-key = space.

it_list-info = 'Jubail O & M Company Limited'.

APPEND it_list TO it_list.

CLEAR it_list.

it_list-typ = 'H'.

it_list-key = space.

it_list-info = 'End of Service Benifit Report'.

APPEND it_list TO it_list.

***** REPORT PROGRAM NAME AND CLIENT ***************

it_list-typ = 'S'.

it_list-key = space.

CONCATENATE 'Report...:' sy-repid INTO it_list-info SEPARATED BY space.

APPEND it_list TO it_list.

***** USER NAME ************************************

CLEAR it_list.

it_list-typ = 'S'.

it_list-key = space.

CONCATENATE 'User.....:' sy-uname INTO it_list-info SEPARATED BY space.

APPEND it_list TO it_list.

**...* DATE / TIME STAMP *****************************

CLEAR it_list.

it_list-typ = 'S'.

it_list-key = space.

CONCATENATE 'Date/Time:' ' ' sy-datum+6(2) '/' sy-datum+4(2) '/' sy-datum+0(4)

' ' '/' ' ' sy-uzeit+0(2) ':' sy-uzeit+2(2) ':' sy-uzeit+4(2)

INTO it_list-info.

APPEND it_list TO it_list.

ENDFORM. " write_header

*&---------------------------------------------------------------------*

*& Form UPDATE_PA0015

*----------------------------------------------------------------------*

FORM update_pa0015 .

it_prop_values-infty = '0015'.

it_prop_values-fname = 'P0015-INFTY'.

it_prop_values-fval = '0015'.

APPEND it_prop_values.

it_prop_values-fname = 'P0015-SUBTY'.

it_prop_values-fval = '3030'.

APPEND it_prop_values.

it_prop_values-fname = 'P0015-BEGDA'.

it_prop_values-fval = sy-datum.

APPEND it_prop_values.

it_prop_values-fname = 'P0015-ENDDA'.

it_prop_values-fval = sy-datum.

APPEND it_prop_values.

it_prop_values-fname = 'P0015-AEDTM'.

it_prop_values-fval = sy-datum.

APPEND it_prop_values.

it_prop_values-fname = 'P0015-UNAME'.

it_prop_values-fval = sy-uname.

APPEND it_prop_values.

it_prop_values-fname = 'P0015-LGART'.

it_prop_values-fval = '3030'.

APPEND it_prop_values.

it_prop_values-fname = 'P0015-BETRG'.

it_prop_values-fval = it_final-amount.

APPEND it_prop_values.

it_prop_values-fname = 'P0015-WAERS'.

it_prop_values-fval = 'SAR'.

APPEND it_prop_values.

it_prop_values-fname = 'P0015-ESTDT'.

it_prop_values-fval = sy-datum.

APPEND it_prop_values.

CALL FUNCTION 'HR_MAINTAIN_MASTERDATA'

EXPORTING

pernr = it_pa0000-pernr

actio = 'INS'

tclas = 'A'

begda = sy-datum

endda = '99991231'

subty = '3030'

dialog_mode = '0'

luw_mode = '1'

no_existence_check = 'X'

no_enqueue = ' '

IMPORTING

return = it_return

TABLES

proposed_values = it_prop_values

modified_keys = it_mod_values.

ENDFORM. " UPDATE_PA0015

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.