Friday, 23 March 2012

Employee Leave History Details in HR-ABAP

*USING /SDF/CMO_DATETIME_DIFFERENCE

REPORT  ZHR_D213_TIME.

TABLES PERNR.

DATA DAYS TYPE P.

TYPE-POOLS: SLIS.

DATA: ZES TYPE PC2B6 OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF ITAB OCCURS 0,
        D1(5)   TYPE C,
        D1P(10) TYPE C,
        D2(5)   TYPE C,
        D2P(10) TYPE C,
        D3(5)   TYPE C,
        D3P(10) TYPE C,
        D4(5)   TYPE C,
        D4P(10) TYPE C,
        D5(5)   TYPE C,
        D5P(10) TYPE C,
        D6(5)   TYPE C,
        D6P(10) TYPE C,
        D7(5)   TYPE C,
        D7P(10) TYPE C,
        D8(5)   TYPE C,
        D8P(10) TYPE C,
        D9(5)   TYPE C,
        D9P(10) TYPE C,
        D10(5)   TYPE C,
        D10P(10) TYPE C,
        D11(5)   TYPE C,
        D11P(10) TYPE C,
        D12(5)   TYPE C,
        D12P(10) TYPE C,
        D13(5)   TYPE C,
        D13P(10) TYPE C,
        D14(5)   TYPE C,
        D14P(10) TYPE C,
        D15(5)   TYPE C,
        D15P(10) TYPE C,
        D16(5)   TYPE C,
        D16P(10) TYPE C,
        D17(5)   TYPE C,
        D17P(10) TYPE C,
        D18(5)   TYPE C,
        D18P(10) TYPE C,
        D19(5)   TYPE C,
        D19P(10) TYPE C,
        D20(5)   TYPE C,
        D20P(10) TYPE C,
        D21(5)   TYPE C,
        D21P(10) TYPE C,
        D22(5)   TYPE C,
        D22P(10) TYPE C,
        D23(5)   TYPE C,
        D23P(10) TYPE C,
        D24(5)   TYPE C,
        D24P(10) TYPE C,
        D25(5)   TYPE C,
        D25P(10) TYPE C,
        D26(5)   TYPE C,
        D26P(10) TYPE C,
        D27(5)   TYPE C,
        D27P(10) TYPE C,
        D28(5)   TYPE C,
        D28P(10) TYPE C,
        D29(5)   TYPE C,
        D29P(10) TYPE C,
        D30(5)   TYPE C,
        D30P(10) TYPE C,
        D31(5)   TYPE C,
        D31P(10) TYPE C,
      END OF ITAB.

DATA: VAR(400) TYPE C,
      VAR3 TYPE STRING,
      VAR2 TYPE STRING,
      VAR4 TYPE STRING.

DATA: NUM TYPE I,
     NUM1 TYPE I.

DATA IT_FIELD TYPE SLIS_T_FIELDCAT_ALV.
DATA WA_FIELD TYPE SLIS_FIELDCAT_ALV.

DATA I_PNPPABRP TYPE I.

START-OF-SELECTION.

GET PERNR.

  CALL FUNCTION '/SDF/CMO_DATETIME_DIFFERENCE'
    EXPORTING
      DATE1                  = PN-BEGDA
      TIME1                  = '000000'
      DATE2                  = PN-ENDDA
      TIME2                  = '000000'
 IMPORTING
     DATEDIFF               = DAYS
*   TIMEDIFF               =
*   EARLIEST               =
* EXCEPTIONS
*   INVALID_DATETIME       = 1
*   OTHERS                 = 2
            .
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  CALL FUNCTION 'HR_TIME_RESULTS_GET'
    EXPORTING
      GET_PERNR = PERNR-PERNR
      GET_PABRJ = PN-PABRJ
      GET_PABRP = PN-PABRP
    TABLES
      GET_ZES   = ZES.

  LOOP AT ZES WHERE ZTART = '0050' OR ZTART = '0020'.
    NUM1 = ZES-REDAY - NUM - 1.
    NUM = NUM + 1.
    IF ZES-REDAY NE NUM.
      DO NUM1 TIMES.
        VAR4 = NUM.
        IF NUM >= '23'.
         

    CONCATENATE VAR3  VAR4 'HOLIDAY' INTO VAR3 SEPARATED BY '@'.
        ELSE.
          CONCATENATE VAR VAR4 'HOLIDAY' INTO VAR SEPARATED BY '@'.
          CONDENSE VAR.
        ENDIF.
        NUM = NUM + 1.
      ENDDO.
    ENDIF.

    VAR2 = ZES-ANZHL.

    IF ZES-ZTART = '0020'.
      VAR2 = 'L'.
    ENDIF.

    IF ZES-REDAY >= '23'.
      CONCATENATE VAR3 ZES-REDAY VAR2 INTO VAR3 SEPARATED BY '@'.
    ELSE.
      CONCATENATE VAR ZES-REDAY VAR2 INTO VAR SEPARATED BY '@'.
      CONDENSE VAR.
    ENDIF.

    NUM = ZES-REDAY.
    CLEAR VAR2.
  ENDLOOP.

  CLEAR  ITAB.

  SPLIT VAR AT '@' INTO VAR2 ITAB-D1 ITAB-D1P ITAB-D2 ITAB-D2P
                             ITAB-D3 ITAB-D3P ITAB-D4 ITAB-D4P
                             ITAB-D5 ITAB-D5P ITAB-D6 ITAB-D6P
                             ITAB-D7 ITAB-D7P ITAB-D8 ITAB-D8P
                             ITAB-D9 ITAB-D9P ITAB-D10 ITAB-D10P
                             ITAB-D11 ITAB-D11P ITAB-D12 ITAB-D12P
                             ITAB-D13 ITAB-D13P ITAB-D14 ITAB-D14P
                             ITAB-D15 ITAB-D15P ITAB-D16 ITAB-D16P
                             ITAB-D17 ITAB-D17P ITAB-D18 ITAB-D18P
                             ITAB-D19 ITAB-D19P ITAB-D20 ITAB-D20P
                             ITAB-D21 ITAB-D21P ITAB-D22 ITAB-D22P.

  SPLIT VAR3 AT '@' INTO VAR3 ITAB-D23 ITAB-D23P ITAB-D24 ITAB-D24P
                               ITAB-D25 ITAB-D25P ITAB-D26 ITAB-D26P
                               ITAB-D27 ITAB-D27P ITAB-D28 ITAB-D28P
                               ITAB-D29 ITAB-D29P ITAB-D30 ITAB-D30P
                               ITAB-D31 ITAB-D31P.
  APPEND ITAB.

  DATA DD(4) TYPE C.
  DAYS = DAYS + 1.

DO DAYS TIMES.

  PERFORM FIELD USING DD 'DAY1'.
CONCATENATE 'D' DAYS INTO DD.
ENDDO.
*  PERFORM FIELD USING 'D1' 'DAY1'.
*  PERFORM FIELD USING 'D1P' 'HOURS'.
*
*  PERFORM FIELD USING 'D2' 'DAY2'.
*  PERFORM FIELD USING 'D2P' 'HOURS'.
*
*  PERFORM FIELD USING 'D3' 'DAY3'.
*  PERFORM FIELD USING 'D3P' 'HOURS'.
*
*  PERFORM FIELD USING 'D4' 'DAY4'.
*  PERFORM FIELD USING 'D4P' 'HOURS'.
*
*  PERFORM FIELD USING 'D5' 'DAY5'.
*  PERFORM FIELD USING 'D5P' 'HOURS'.
*
*  PERFORM FIELD USING 'D6' 'DAY6'.
*  PERFORM FIELD USING 'D6P' 'HOURS'.
*
*  PERFORM FIELD USING 'D7' 'DAY7'.
*  PERFORM FIELD USING 'D7P' 'HOURS'.
*  IF DAYS GT '07'.
*
*    PERFORM FIELD USING 'D8' 'DAY8'.
*    PERFORM FIELD USING 'D8P' 'HOURS'.
*
*    PERFORM FIELD USING 'D9' 'DAY9'.
*    PERFORM FIELD USING 'D9P' 'HOURS'.
*
*    PERFORM FIELD USING 'D10' 'DAY10'.
*    PERFORM FIELD USING 'D10P' 'HOURS'.
*
*    PERFORM FIELD USING 'D11' 'DAY11'.
*    PERFORM FIELD USING 'D11P' 'HOURS'.
*
*    PERFORM FIELD USING 'D12' 'DAY12'.
*    PERFORM FIELD USING 'D12P' 'HOURS'.
*
*    PERFORM FIELD USING 'D13' 'DAY13'.
*    PERFORM FIELD USING 'D13P' 'HOURS'.
*
*    PERFORM FIELD USING 'D14' 'DAY14'.
*    PERFORM FIELD USING 'D14P' 'HOURS'.
*
*    PERFORM FIELD USING 'D15' 'DAY15'.
*    PERFORM FIELD USING 'D15P' 'HOURS'.
*
*    PERFORM FIELD USING 'D16' 'DAY16'.
*    PERFORM FIELD USING 'D16P' 'HOURS'.
*
*    PERFORM FIELD USING 'D17' 'DAY17'.
*    PERFORM FIELD USING 'D17P' 'HOURS'.
*
*    PERFORM FIELD USING 'D18' 'DAY18'.
*    PERFORM FIELD USING 'D18P' 'HOURS'.
*
*    PERFORM FIELD USING 'D19' 'DAY19'.
*    PERFORM FIELD USING 'D19P' 'HOURS'.
*
*    PERFORM FIELD USING 'D20' 'DAY20'.
*    PERFORM FIELD USING 'D20P' 'HOURS'.
*
*    PERFORM FIELD USING 'D21' 'DAY21'.
*    PERFORM FIELD USING 'D21P' 'HOURS'.
*
*    PERFORM FIELD USING 'D22' 'DAY22'.
*    PERFORM FIELD USING 'D22P' 'HOURS'.
*
*    PERFORM FIELD USING 'D23' 'DAY23'.
*    PERFORM FIELD USING 'D23P' 'HOURS'.
*
*    PERFORM FIELD USING 'D24' 'DAY24'.
*    PERFORM FIELD USING 'D24P' 'HOURS'.
*
*    PERFORM FIELD USING 'D25' 'DAY25'.
*    PERFORM FIELD USING 'D25P' 'HOURS'.
*
*    PERFORM FIELD USING 'D26' 'DAY26'.
*    PERFORM FIELD USING 'D26P' 'HOURS'.
*
*    PERFORM FIELD USING 'D27' 'DAY27'.
*    PERFORM FIELD USING 'D27P' 'HOURS'.
*
*    PERFORM FIELD USING 'D28' 'DAY28'.
*    PERFORM FIELD USING 'D28P' 'HOURS'.
*    IF DAYS GT '27'.
*      PERFORM FIELD USING 'D29' 'DAY29'.
*      PERFORM FIELD USING 'D29P' 'HOURS'.
*
*      PERFORM FIELD USING 'D30' 'DAY30'.
*      PERFORM FIELD USING 'D30P' 'HOURS'.
*
*      IF DAYS GT '29'.
*
*        PERFORM FIELD USING 'D31' 'DAY31'.
*        PERFORM FIELD USING 'D31P' 'HOURS'.
*
*      ENDIF.
*    ENDIF.
*  ENDIF.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
*   I_INTERFACE_CHECK                 = ' '
*   I_BYPASSING_BUFFER                = ' '
*   I_BUFFER_ACTIVE                   = ' '
*   I_CALLBACK_PROGRAM                = ' '
*   I_CALLBACK_PF_STATUS_SET          = ' '
*   I_CALLBACK_USER_COMMAND           = ' '
*   I_CALLBACK_TOP_OF_PAGE            = ' '
*   I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*   I_CALLBACK_HTML_END_OF_LIST       = ' '
*   I_STRUCTURE_NAME                  =
*   I_BACKGROUND_ID                   = ' '
*   I_GRID_TITLE                      =
*   I_GRID_SETTINGS                   =
*   IS_LAYOUT                         =
     IT_FIELDCAT                       = IT_FIELD
*   IT_EXCLUDING                      =
*   IT_SPECIAL_GROUPS                 =
*   IT_SORT                           =
*   IT_FILTER                         =
*   IS_SEL_HIDE                       =
*   I_DEFAULT                         = 'X'
*   I_SAVE                            = ' '
*   IS_VARIANT                        =
*   IT_EVENTS                         =
*   IT_EVENT_EXIT                     =
*   IS_PRINT                          =
*   IS_REPREP_ID                      =
*   I_SCREEN_START_COLUMN             = 0
*   I_SCREEN_START_LINE               = 0
*   I_SCREEN_END_COLUMN               = 0
*   I_SCREEN_END_LINE                 = 0
*   I_HTML_HEIGHT_TOP                 = 0
*   I_HTML_HEIGHT_END                 = 0
*   IT_ALV_GRAPHICS                   =
*   IT_HYPERLINK                      =
*   IT_ADD_FIELDCAT                   =
*   IT_EXCEPT_QINFO                   =
*   IR_SALV_FULLSCREEN_ADAPTER        =
* IMPORTING
*   E_EXIT_CAUSED_BY_CALLER           =
*   ES_EXIT_CAUSED_BY_USER            =
    TABLES
      T_OUTTAB                          = ITAB
* EXCEPTIONS
*   PROGRAM_ERROR                     = 1
*   OTHERS                            = 2
            .
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
*  LOOP AT ITAB .
*    WRITE:/ ITAB-D1, ITAB-D1P, ITAB-D2, ITAB-D2P,
*                             ITAB-D3, ITAB-D3P, ITAB-D4, ITAB-D4P,
*                             ITAB-D5, ITAB-D5P, ITAB-D6, ITAB-D6P,
*                             ITAB-D7, ITAB-D7P, ITAB-D8, ITAB-D8P,
*                             ITAB-D9, ITAB-D9P, ITAB-D10, ITAB-D10P,
*                             ITAB-D11, ITAB-D11P, ITAB-D12, ITAB-D12P,
*                             ITAB-D13, ITAB-D13P, ITAB-D14, ITAB-D14P,
*                             ITAB-D15, ITAB-D15P, ITAB-D16, ITAB-D16P,
*                             ITAB-D17, ITAB-D17P, ITAB-D18, ITAB-D18P,
*                             ITAB-D19, ITAB-D19P, ITAB-D20, ITAB-D20P,
*                             ITAB-D21, ITAB-D21P, ITAB-D22, ITAB-D22P,
*                             ITAB-D23, ITAB-D23P, ITAB-D24, ITAB-D24P,
*                             ITAB-D25, ITAB-D25P, ITAB-D26, ITAB-D26P,
*                             ITAB-D27, ITAB-D27P, ITAB-D28, ITAB-D28P,
*                             ITAB-D29, ITAB-D29P, ITAB-D30, ITAB-D30P,
*                             ITAB-D31, ITAB-D31P.
*
*  ENDLOOP.
*&---------------------------------------------------------------------*
*&      Form  FIELD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FNAME      text
*      -->FDESC      text
*      -->TABNAME    text
*----------------------------------------------------------------------*

FORM FIELD USING FNAME
                 FDESC.

CONCATENATE 'DAY' DAYS INTO FDESC.

  WA_FIELD-FIELDNAME = FNAME.
  WA_FIELD-SELTEXT_L = FDESC.

  APPEND WA_FIELD TO IT_FIELD.
  CLEAR WA_FIELD.
ENDFORM.                    " FIELD