ABAP Program to retrieve and display sickpay(SSP, SMP etc) with SAP
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
Related Articles
Display organisational structure
SAP HR infotypes
GET PERNR LAST and GET PAYROL
Retrieve multiple contracts for HR personnel and include in locical database selection/report
SAP HR Development help - ABAP code and information on various areas of HR development in SAP
ABAP code to retrieve Absence type text(AWART) from SAP table
ABAP to retrieve country grouping for personnel with SAP
Deleting an SAP HR Infotype
SAP HR Infotype selection
Creating a New SAP Infotype using transaction PM01 and PPCI
Retrieve comment texts from cluster table for SAP infotype 19
SAP Function module to call ABAP report from managers desktop(MDT)
SAP User Exits to Add functionality to the PBO and PAI of HR infotypes
Create SAP HR report category for logical database selection within ABAP report
SAP HR Selection Screen example
Retrieve SAP personal work schedule
SAP HR Infotype Development Information, ABP and step by step instructions
Enhancing an Infotype - Add, change or modify fields of and SAP infotype
SAP Personal absence calander for SSP/SMP
SAP Personal absence calendar (NCALE) using transaction PC00_M08_CLPC
Accessing NCALE data via the Results Log when running a payroll
Program to retrieve sickpay values
Processing the SAP HR Organisation unit
SAP HR Payroll results ( transaction code: PC_PAYRESULT)
Payroll results (ABAP)
Display Payroll results using SAP transaction PC_PAYRESULT