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

Payroll results (ABAP)
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