Example of how to submit sickpay value program and retrieve results. The program below retrieves all SSP/SMP sickness pay and displays results as a simple report.
******************************************************** * Report: ZCALL_SXPVALUE * * * * 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