************************************************************************
* Report: ZCALL_SXPVALUE *
* *
* Description: Sickness history report. *
* Calls second program 'ZP_GET_SXP_ABSENCE_DATA' to *
* retrieve sickness absence data from clustor tables it *
* memory area. *
* *
************************************************************************
REPORT ZCALL_SXPVALUE
LINE-SIZE 120 NO STANDARD PAGE HEADING.
TABLES: t554s, pernr. " pcl1, pcl2.
infotypes: 0001, "Organisational assignment
2001. "Absences
DATA: ssp_weeks TYPE p DECIMALS 2 VALUE 0.
DATA: gd_begda(10) TYPE c,
gd_endda(10) TYPE c.
DATA: ld_orgtxt LIKE t527x-orgtx.
DATA: name(30).
DATA: BEGIN OF itab OCCURS 0,
pernr LIKE p0002-pernr,
perid LIKE p0002-perid,
name LIKE name,
END OF itab.
TYPES: BEGIN OF t_report,
sxp(3) TYPE c,
name TYPE name, "30
pernr TYPE pernr-pernr, "8
awart TYPE p2001-awart, "4
begda TYPE p2001-begda, "10
endda TYPE p2001-endda, "10
wkspaid TYPE p DECIMALS 2, "10
amtpaid TYPE p DECIMALS 2, "10
END OF t_report.
DATA: it_report TYPE STANDARD TABLE OF t_report INITIAL SIZE 0,
wa_report TYPE t_report.
DATA: moabw LIKE t001p-moabw.
DATA: printheader TYPE i VALUE 1,
gd_success TYPE i.
* SMP/SSP absence data
DATA BEGIN OF it_msa OCCURS 0.
INCLUDE STRUCTURE pc27j.
DATA END OF it_msa.
DATA BEGIN OF msa OCCURS 0.
INCLUDE STRUCTURE pc27j.
DATA END OF msa.
*Temp data store for pernrs who have absences
TYPES: BEGIN OF t_pa2001,
pernr TYPE pa2001-pernr,
END OF t_pa2001.
DATA: it_pa2001 TYPE STANDARD TABLE OF t_pa2001 INITIAL SIZE 0,
wa_pa2001 TYPE t_pa2001.
DATA: gd_memid(30) TYPE c,
gd_date TYPE sy-datum,
gd_zebra TYPE i,
gd_storamt LIKE wa_report-amtpaid,
gd_storwks LIKE wa_report-wkspaid,
gd_storbeg LIKE wa_report-begda,
gd_storend LIKE wa_report-endda,
gd_storawart LIKE wa_report-awart,
gd_count(6) TYPE n,
gd_outtext(70) TYPE c.
* Select screen declaration.
* ----------------------------
SELECTION-SCREEN BEGIN OF BLOCK atypes WITH FRAME TITLE text-t01.
SELECT-OPTIONS: so_ssp FOR p2001-awart,
so_smp FOR p2001-awart,
so_sap FOR p2001-awart,
so_spp FOR p2001-awart.
SELECTION-SCREEN END OF BLOCK atypes.
************************************************************************
*INITIALIZATION.
INITIALIZATION.
PERFORM initialize_awart_selection.
************************************************************************
*STAR-OF-SELECTION
START-OF-SELECTION.
* Only retrieves employees who have an absence
IF pnppernr IS INITIAL.
SELECT pernr
INTO TABLE it_pa2001
FROM pa2001
WHERE ( ( begda GE pn-begda AND
begda LE pn-endda ) OR
( endda GE pn-begda AND
endda LE pn-endda ) OR
( begda LE pn-begda AND
endda GT pn-endda ) ).
LOOP AT it_pa2001 INTO wa_pa2001.
pnppernr-low = wa_pa2001-pernr.
pnppernr-sign = 'I'.
pnppernr-option = 'EQ'.
APPEND pnppernr.
ENDLOOP.
ENDIF.
GET pernr.
ADD 1 TO gd_count.
CONCATENATE 'Processing personnel data'(m10) gd_count INTO gd_outtext
SEPARATED BY ' '.
PERFORM progress_indicator USING gd_outtext.
rp_provide_from_last p0001 space pn-begda pn-endda.
PROVIDE * FROM p2001 BETWEEN pn-begda AND pn-endda.
CHECK p2001-awart IN so_ssp OR
p2001-awart IN so_smp OR
p2001-awart IN so_sap OR
p2001-awart IN so_spp.
READ TABLE p2001 INDEX sy-tabix.
wa_report-pernr = pernr-pernr.
wa_report-name = p0001-ename.
wa_report-awart = p2001-awart.
wa_report-begda = p2001-begda.
wa_report-endda = p2001-endda.
* Retrieve sickness absence data
perform add_data_to_msa_table using p2001-begda p2001-endda.
IF p2001-awart IN so_ssp.
wa_report-sxp = 'SSP'.
CALL FUNCTION 'HR_GB_FETCH_SSMP_DATA'
EXPORTING
persnr = p2001-pernr
begda = p2001-begda
endda = p2001-endda
get_ssmp_weeks = 'x'
IMPORTING
ssmp_weeks = ssp_weeks
EXCEPTIONS
failed_imp_cluster_pc = 1
failed_imp_rgdir = 2
failed_read_qdnum = 3
division_by_zero = 4
OTHERS = 5.
wa_report-wkspaid = ssp_weeks.
gd_date = p2001-begda.
WHILE gd_date LE p2001-endda.
LOOP AT it_msa WHERE begda LE gd_date AND endda GE gd_date.
IF it_msa-wtype = '/SSP'.
wa_report-amtpaid = wa_report-amtpaid + it_msa-amoun.
ENDIF.
gd_date = gd_date + 1.
EXIT.
ENDLOOP.
IF sy-subrc NE 0.
gd_date = gd_date + 1.
ENDIF.
ENDWHILE.
ELSEIF p2001-awart IN so_smp.
wa_report-sxp = 'SMP'.
gd_date = p2001-begda.
WHILE gd_date LE p2001-endda.
LOOP AT it_msa WHERE begda LE gd_date AND endda GE gd_date.
IF it_msa-wtype = '/MMU' OR it_msa-wtype = '/MML'.
wa_report-amtpaid = wa_report-amtpaid + it_msa-amoun.
* SMP is paid weekly so each occurance of payment is 1 week
wa_report-wkspaid = wa_report-wkspaid + 1.
ENDIF.
gd_date = gd_date + 1.
EXIT.
ENDLOOP.
IF sy-subrc NE 0.
gd_date = gd_date + 1.
ENDIF.
ENDWHILE.
ELSEIF p2001-awart IN so_sap.
wa_report-sxp = 'SAP'.
gd_date = p2001-begda.
WHILE gd_date LE p2001-endda.
LOOP AT it_msa WHERE begda LE gd_date AND endda GE gd_date.
IF it_msa-wtype = '/GGP'.
wa_report-amtpaid = wa_report-amtpaid + it_msa-amoun.
* SAP is paid weekly so each occurance of payment is 1 week
wa_report-wkspaid = wa_report-wkspaid + 1.
ENDIF.
gd_date = gd_date + 1.
EXIT.
ENDLOOP.
IF sy-subrc NE 0.
gd_date = gd_date + 1.
ENDIF.
ENDWHILE.
ELSEIF p2001-awart IN so_spp. "in so_spp
wa_report-sxp = 'SPP'.
gd_date = p2001-begda.
WHILE gd_date LE p2001-endda.
LOOP AT it_msa WHERE begda LE gd_date AND endda GE gd_date.
IF it_msa-wtype = '/PPP'.
wa_report-amtpaid = wa_report-amtpaid + it_msa-amoun.
* SPP is paid weekly so each occurance of payment is 1 week
wa_report-wkspaid = wa_report-wkspaid + 1.
ENDIF.
gd_date = gd_date + 1.
EXIT.
ENDLOOP.
IF sy-subrc NE 0.
gd_date = gd_date + 1.
ENDIF.
ENDWHILE.
ENDIF.
IF wa_report-wkspaid GT 0.
APPEND wa_report TO it_report.
ENDIF.
CLEAR: wa_report.
ENDPROVIDE.
************************************************************************
*END-OF-SELECTION.
END-OF-SELECTION.
gd_zebra = 1.
SORT it_report BY pernr.
LOOP AT it_report INTO wa_report.
AT NEW pernr.
IF sy-tabix NE 1.
WRITE:/ sy-vline,
(08) ' ', sy-vline,
(30) ' ', sy-vline,
(07) ' ', sy-vline,
(10) ' ', sy-vline,
(10) ' ', sy-vline,
(10) ' ', sy-vline,
(10) ' ', sy-vline.
ENDIF.
IF gd_zebra EQ 1.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
gd_zebra = 2.
ELSE.
FORMAT COLOR COL_NORMAL INTENSIFIED ON.
gd_zebra = 1.
ENDIF.
ENDAT.
WRITE:/ sy-vline,
(08) wa_report-pernr, sy-vline,
(30) wa_report-name, sy-vline,
(07) wa_report-awart, sy-vline,
(10) wa_report-begda, sy-vline,
(10) wa_report-endda, sy-vline,
(10) wa_report-wkspaid, sy-vline,
(10) wa_report-amtpaid, sy-vline.
ENDLOOP.
WRITE: sy-uline(107).
************************************************************************
*TOP-OF-PAGE.
TOP-OF-PAGE.
WRITE:/2 text-001.
SKIP.
CONCATENATE pn-begda+6(2) pn-begda+4(2) pn-begda(4)
INTO gd_begda SEPARATED BY '.'.
CONCATENATE pn-endda+6(2) pn-endda+4(2) pn-endda(4)
INTO gd_endda SEPARATED BY '.'.
WRITE: /02 'Date Selection: ',
gd_begda,
'to',
gd_endda.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
WRITE: sy-uline(107).
WRITE:/ sy-vline,
(08) 'Employee', sy-vline,
(30) 'Name', sy-vline,
(07) 'Absence', sy-vline,
(10) 'Start', sy-vline,
(10) 'End', sy-vline,
(10) 'Weeks', sy-vline,
(10) 'Amount', sy-vline.
WRITE:/ sy-vline,
(08) 'Number', sy-vline,
(30) ' ', sy-vline,
(07) 'Type', sy-vline,
(10) 'Date', sy-vline,
(10) 'Date', sy-vline,
(10) 'Paid', sy-vline,
(10) 'Paid', sy-vline.
WRITE: sy-uline(107).
FORMAT COLOR COL_NORMAL.
************************************************************************
*END-OF-PAGE.
END-OF-PAGE.
*&---------------------------------------------------------------------*
*& Form INITIALIZE_AWART_SELECTION
*&---------------------------------------------------------------------*
FORM initialize_awart_selection.
so_ssp-sign = 'I'.
so_ssp-option = 'EQ'.
MOVE-CORRESPONDING so_ssp TO so_smp.
MOVE-CORRESPONDING so_ssp TO so_sap.
MOVE-CORRESPONDING so_ssp TO so_spp.
* Build SSP absence types table
so_ssp-low = '0205'.
APPEND so_ssp.
so_ssp-low = '0206'.
APPEND so_ssp.
so_ssp-low = '0207'.
APPEND so_ssp.
so_ssp-low = '0208'.
APPEND so_ssp.
so_ssp-low = '0210'.
APPEND so_ssp.
so_ssp-low = '0211'.
APPEND so_ssp.
so_ssp-low = '0212'.
APPEND so_ssp.
so_ssp-low = '0220'.
APPEND so_ssp.
so_ssp-low = '0300'.
APPEND so_ssp.
so_ssp-low = '0305'.
APPEND so_ssp.
so_ssp-low = '0320'.
APPEND so_ssp.
* Build SMP absence types table
so_smp-low = '0310'.
APPEND so_smp.
so_smp-low = '0600'.
APPEND so_smp.
so_smp-low = '0601'.
APPEND so_smp.
so_smp-low = '0602'.
APPEND so_smp.
* Build SAP absence type table
so_sap-low = '0325'.
APPEND so_sap.
* Build SPP absence type table
so_spp-low = '0330'.
APPEND so_spp.
ENDFORM. " INITIALIZE_AWART_SELECTION
*&---------------------------------------------------------------------*
*& Form PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
* Displays progress indicator on SAP screen
*----------------------------------------------------------------------*
FORM progress_indicator USING p_text.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
* PERCENTAGE = 0
text = p_text.
ENDFORM. " PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
*& Form ADD_DATA_TO_MSA_TABLE
*&---------------------------------------------------------------------*
* Add additional data to MSA table
*----------------------------------------------------------------------*
FORM add_data_to_msa_table USING p_datefrm p_dateto.
DATA: seltab TYPE TABLE OF rsparams,
seltab_wa LIKE LINE OF seltab.
refresh it_msa. clear: it_msa.
REFRESH seltab.
CLEAR: seltab_wa.
seltab_wa-selname = 'PNPBEGDA'.
seltab_wa-sign = 'I'.
seltab_wa-option = 'EQ'.
seltab_wa-low = p_datefrm.
APPEND seltab_wa TO seltab.
seltab_wa-selname = 'PNPENDDA'.
seltab_wa-sign = 'I'.
seltab_wa-option = 'EQ'.
seltab_wa-low = p_dateto.
APPEND seltab_wa TO seltab.
seltab_wa-selname = 'PNPPERNR'.
seltab_wa-low = pernr-pernr.
APPEND seltab_wa TO seltab.
CONCATENATE 'ZP151REP' sy-uname sy-uzeit INTO gd_memid.
* Executes program which retrieves sickness absence data
* from clustor tables
SUBMIT ZSXP_ABSENCE_DATA WITH SELECTION-TABLE seltab
EXPORTING LIST TO MEMORY
AND RETURN
WITH p_memid = gd_memid.
IMPORT msa FROM MEMORY ID gd_memid.
FREE MEMORY ID gd_memid.
APPEND LINES OF msa TO it_msa.
ENDFORM. " ADD_DATA_TO_MSA_TABLE
*Text elements
*----------------------------------------------------------
* 001 SxP Absence History
* T01 Sickness Absence types
*Selection texts
*----------------------------------------------------------
* SO_SAP SAP Att./absence types
* SO_SMP SMP Att./absence types
* SO_SPP SPP Att./absence types
* SO_SSP SSP Att./absence types
|