Nov 10, 2010

Hierarchical ALV from list display

Hierarchical ALV from list display

Output:




Program List:
*&---------------------------------------------------------------------*
*& Report  ZTES02
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT zteststs.

*-----------------------------------------------------
* type pools
*----------------------------------------------------
TYPE-POOLS: slis.

*----------------------------------------------------
* tables
*----------------------------------------------------
TABLES:pa0002, pa0008.

*----------------------------------------------------
* internal tables
*----------------------------------------------------

DATA:BEGIN OF it_pa0002 OCCURS 0,
       checkbox,
       pernr LIKE pa0002-pernr,
       begda LIKE pa0002-begda,
       endda LIKE pa0002-endda,
       vorna LIKE pa0002-vorna,
       nachn LIKE pa0002-nachn,
     END OF it_pa0002.

DATA:BEGIN OF it_pa002 OCCURS 0,
       pernr LIKE pa0002-pernr,
       begda LIKE pa0002-begda,
       endda LIKE pa0002-endda,
       vorna LIKE pa0002-vorna,
       nachn LIKE pa0002-nachn,
     END OF it_pa002.

DATA:BEGIN OF it_pa00021 OCCURS 0,
       pernr LIKE pa0002-pernr,
       begda LIKE pa0002-begda,
       endda LIKE pa0002-endda,
       vorna LIKE pa0002-vorna,
       nachn LIKE pa0002-nachn,
       expand TYPE xfeld VALUE 'X',
     END OF it_pa00021.

DATA:BEGIN OF it_pa0008 OCCURS 0,
       pernr LIKE pa0008-pernr,
       begda LIKE pa0008-begda,
       endda LIKE pa0008-endda,
       ansal LIKE pa0008-ansal,
       lga01 LIKE pa0008-lga01,
       bet01 LIKE pa0008-bet01,
     END OF it_pa0008.

DATA: it_field_cat  TYPE slis_t_fieldcat_alv,
      it_field_cat1 TYPE slis_t_fieldcat_alv,
      it_layout1    TYPE slis_layout_alv,
      wa_field_cat  TYPE slis_fieldcat_alv,
      wa_field_cat1 TYPE slis_fieldcat_alv,
      it_layout     TYPE slis_layout_alv,
      it_events     TYPE slis_t_event,
      wa_events     TYPE slis_alv_event,
      it_header     TYPE slis_t_listheader,
      wa_header     TYPE slis_listheader,
      wa_keyinfo    TYPE slis_keyinfo_alv.

CONSTANTS:c VALUE 'X'.

*-----------------------------------------------
* selection screen
*-----------------------------------------------
SELECT-OPTIONS: s_pernr FOR pa0002-pernr.

*-----------------------------------------------
* start of selection
*-----------------------------------------------
START-OF-SELECTION.
  SET PF-STATUS 'DATA' .
  PERFORM get_data.
  PERFORM build_field_cat.
  PERFORM get_events.
  PERFORM display_data.

*&------------------------------------------------*
*& Form get_data
*-------------------------------------------------*
FORM get_data .
  SELECT pernr begda endda vorna nachn
    FROM pa0002
    INTO CORRESPONDING FIELDS OF TABLE it_pa0002
    WHERE pernr IN s_pernr.
ENDFORM" get_data

*&----------------------------------------------*
*& Form build_field_cat
*----------------------------------------------*
FORM build_field_cat .
  wa_field_cat-tabname = 'PA0002'.
  wa_field_cat-fieldname = 'CHECKBOX'.
  wa_field_cat-ref_tabname = 'IT_PA0002'.
  wa_field_cat-reptext_ddic = 'Check Box'.
  APPEND wa_field_cat TO it_field_cat.
  CLEAR wa_field_cat.
  wa_field_cat-tabname = 'PA0002'.
  wa_field_cat-fieldname = 'PERNR'.
  wa_field_cat-ref_tabname = 'IT_PA0002'.
  wa_field_cat-reptext_ddic = 'Personnel no'.
  APPEND wa_field_cat TO it_field_cat.
  CLEAR wa_field_cat.
  wa_field_cat-tabname = 'PA0002'.
  wa_field_cat-fieldname = 'BEGDA'.
  wa_field_cat-ref_tabname = 'IT_PA0002'.
  wa_field_cat-reptext_ddic = 'Start date'.
  APPEND wa_field_cat TO it_field_cat.
  CLEAR wa_field_cat.
  wa_field_cat-tabname = 'PA0002'.
  wa_field_cat-fieldname = 'ENDDA'.
  wa_field_cat-ref_tabname = 'IT_PA0002'.
  wa_field_cat-reptext_ddic = 'End date'.
  APPEND wa_field_cat TO it_field_cat.
  CLEAR wa_field_cat.
  wa_field_cat-tabname = 'PA0002'.
  wa_field_cat-fieldname = 'VORNA'.
  wa_field_cat-ref_tabname = 'IT_PA0002'.
  wa_field_cat-reptext_ddic = 'First name'.
  APPEND wa_field_cat TO it_field_cat.
  CLEAR wa_field_cat.
  wa_field_cat-tabname = 'PA0002'.
  wa_field_cat-fieldname = 'NACHN'.
  wa_field_cat-ref_tabname = 'IT_PA0002'.
  wa_field_cat-reptext_ddic = 'Last name'.
  APPEND wa_field_cat TO it_field_cat.
  CLEAR wa_field_cat.
  wa_field_cat1-tabname = 'PA0002'.
  wa_field_cat1-fieldname = 'PERNR'.
  wa_field_cat1-ref_tabname = 'IT_PA00021'.
  wa_field_cat1-reptext_ddic = 'Personnel no'.
  APPEND wa_field_cat1 TO it_field_cat1.
  CLEAR wa_field_cat1.
  wa_field_cat1-tabname = 'PA0002'.
  wa_field_cat1-fieldname = 'BEGDA'.
  wa_field_cat1-ref_tabname = 'IT_PA00021'.
  wa_field_cat1-reptext_ddic = 'Start date'.
  APPEND wa_field_cat1 TO it_field_cat1.
  CLEAR wa_field_cat1.
  wa_field_cat1-tabname = 'PA0002'.
  wa_field_cat1-fieldname = 'ENDDA'.
  wa_field_cat1-ref_tabname = 'IT_PA00021'.
  wa_field_cat1-reptext_ddic = 'End date'.
  APPEND wa_field_cat1 TO it_field_cat1.
  CLEAR wa_field_cat1.
  wa_field_cat1-tabname = 'PA0002'.
  wa_field_cat1-fieldname = 'VORNA'.
  wa_field_cat1-ref_tabname = 'IT_PA00021'.
  wa_field_cat1-reptext_ddic = 'First name'.
  APPEND wa_field_cat1 TO it_field_cat1.
  CLEAR wa_field_cat.
  wa_field_cat1-tabname = 'PA0002'.
  wa_field_cat1-fieldname = 'NACHN'.
  wa_field_cat1-ref_tabname = 'IT_PA00021'.
  wa_field_cat1-reptext_ddic = 'Last name'.
  APPEND wa_field_cat1 TO it_field_cat1.
  CLEAR wa_field_cat1.
  wa_field_cat1-tabname = 'PA0008'.
  wa_field_cat1-fieldname = 'PERNR'.
  wa_field_cat-ref_tabname = 'IT_PA0008'.
  wa_field_cat1-reptext_ddic = 'personnelno'.
  APPEND wa_field_cat1 TO it_field_cat1.
  CLEAR wa_field_cat1.
  wa_field_cat1-tabname = 'PA0008'.
  wa_field_cat1-fieldname = 'BEGDA'.
  wa_field_cat-ref_tabname = 'IT_PA0008'.
  wa_field_cat1-reptext_ddic = 'begindate'.
  APPEND wa_field_cat1 TO it_field_cat1.
  CLEAR wa_field_cat1.
  wa_field_cat1-tabname = 'PA0008'.
  wa_field_cat1-fieldname = 'ENDDA'.
  wa_field_cat-ref_tabname = 'IT_PA0008'.
  wa_field_cat1-reptext_ddic = 'enddate'.
  APPEND wa_field_cat1 TO it_field_cat1.
  CLEAR wa_field_cat1.
  wa_field_cat1-tabname = 'PA0008'.
  wa_field_cat1-fieldname = 'ANSAL'.
  wa_field_cat-ref_tabname = 'IT_PA0008'.
  wa_field_cat1-reptext_ddic = 'annualsalary'.
  APPEND wa_field_cat1 TO it_field_cat1.
  CLEAR wa_field_cat1.
  wa_field_cat1-tabname = 'PA0008'.
  wa_field_cat1-fieldname = 'LGA01'.
  wa_field_cat-ref_tabname = 'IT_PA0008'.
  wa_field_cat1-reptext_ddic = 'wagetype'.
  APPEND wa_field_cat1 TO it_field_cat1.
  CLEAR wa_field_cat1.
  wa_field_cat1-tabname = 'PA0008'.
  wa_field_cat1-fieldname = 'BET01'.
  wa_field_cat-ref_tabname = 'IT_PA0008'.
  wa_field_cat1-reptext_ddic = 'Amount'.
  APPEND wa_field_cat1 TO it_field_cat1.
  CLEAR wa_field_cat1.
ENDFORM" build_field_cat

*&------------------------------------------------*
*& Form display_data
*-------------------------------------------------*
FORM display_data .
  it_layout-box_fieldname = 'CHECKBOX'.
  it_layout-edit = 'X'.
  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
    EXPORTING
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'PF_STATUS'
      i_callback_user_command  = 'USER_COMMAND'
      it_fieldcat              = it_field_cat
      is_layout                = it_layout
      it_events                = it_events
    TABLES
      t_outtab                 = it_pa0002.
ENDFORM" display_data

*&------------------------------------------------*
*& Form get_events
*------------------------------------------------*
FORM get_events .
  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    IMPORTING
      et_events = it_events.

  READ TABLE it_events INTO wa_events
  WITH KEY name = slis_ev_top_of_page.

  IF sy-subrc = 0.
    wa_events-form = 'TOP_OF_PAGE'.
    MODIFY it_events FROM wa_events INDEX sy-tabix.
  ENDIF.
ENDFORM" get_events

*&--------------------------------------------*
*& Form top_of_page
*---------------------------------------------*
FORM top_of_page.
  wa_header-typ = 'H'.
  wa_header-info = 'EMPLOYEE DATA'.
  APPEND wa_header TO it_header.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = it_header.
ENDFORM"top_of_page

*&---------------------------------------------*
*& Form GUI_SET
*&---------------------------------------------*
FORM gui_set USING rt_extab TYPE slis_t_extab .
  SET PF-STATUS 'DATA' .
ENDFORM"GUI_SET

*&---------------------------------------------*
*& Form USER_COMMAND
*&---------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
                        r_selfield TYPE slis_selfield.

  DATA:v_pernr LIKE pa0002-pernr.

  CASE r_ucomm.

    WHEN 'DET'.
      DATA: v_flag.
      CLEAR : v_flag.

      LOOP AT it_pa0002.
        IF it_pa0002-checkbox = 'X'.
          v_pernr = it_pa0002-pernr.
          SELECT pernr begda endda vorna nachn
            FROM pa0002
            INTO CORRESPONDING FIELDS OF TABLE it_pa00021
            WHERE pernr = v_pernr.

          MOVE-CORRESPONDING it_pa0002 TO it_pa002.
          APPEND it_pa002.
        ENDIF.
      ENDLOOP.

      SELECT pernr begda endda ansal lga01 bet01
        FROM pa0008
        INTO TABLE it_pa0008
        FOR ALL ENTRIES IN it_pa002
        WHERE pernr = it_pa002-pernr.

      it_pa00021[] = it_pa002[].

      IF NOT it_pa0008[] IS INITIAL.
        SORT it_pa0008 BY pernr.
        READ TABLE it_pa0008 INDEX 1.
      ENDIF.

      it_layout1-group_change_edit = c.
      it_layout1-colwidth_optimize = c.
      it_layout1-zebra = c.
      it_layout1-detail_popup = c.
      it_layout1-get_selinfos = c.
      it_layout-expand_fieldname = 'EXPAND'.
      wa_keyinfo-header01 = 'PERNR'.
      wa_keyinfo-item01 = 'PERNR'.

      CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
        EXPORTING
          i_callback_program    = sy-repid
          is_layout             = it_layout1
          it_fieldcat           = it_field_cat1
          i_tabname_header      = 'PA0002'
          i_tabname_item        = 'PA0008'
          is_keyinfo            = wa_keyinfo
          i_screen_start_column = 12
          i_screen_start_line   = 6
          i_screen_end_column   = 90
          i_screen_end_line     = 35
        TABLES
          t_outtab_header       = it_pa00021
          t_outtab_item         = it_pa0008.

      CLEAR: it_pa00021,it_pa0002,it_pa0008.

    WHEN 'BACK'.
      EXIT.

  ENDCASE.

ENDFORM"USER_COMMAND

*---------------------------------------
 

No comments :