..3 Printing program

Create a report Z_ORGUNIT_HIERARCHY_1 and paste below code:


REPORT z_orgunit_hierarchy_1 .

TYPE-POOLS:
  abap .
TYPES:
  BEGIN OF ty_s_alvtree_outtab ,
    objid             TYPE objec-objid ,
    stras             TYPE p1028-stras ,
    ort01             TYPE p1028-ort01 ,
    pstlz             TYPE p1028-pstlz ,
    land1             TYPE p1028-land1 ,
  END   OF ty_s_alvtree_outtab ,
  ty_t_alvtree_outtab TYPE STANDARD TABLE OF ty_s_alvtree_outtab .
DATA:
  gv_plvar            TYPE objec-plvar ,
  gr_alvtree          TYPE REF TO cl_hrpayna_gui_alv_tree , 
" -->> inherited from CL_GUI_ALV_TREE 
  gt_alvtree_outtab   TYPE ty_t_alvtree_outtab .

* fill the context
PERFORM fill_context .

* call the form
CALL FUNCTION 'ZXLWB_CALLFORM'
  EXPORTING
    iv_formname         = 'ORGUNIT_HIERARCHY'
    iv_context_ref      = gr_alvtree
  EXCEPTIONS
    process_terminated  = 1
    OTHERS              = 2.
IF sy-subrc NE 0 .
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .
  EXIT .
ENDIF .


*&---------------------------------------------------------------------*
*&      Form  fill_context
*&---------------------------------------------------------------------*

FORM fill_context .

  CALL FUNCTION 'RH_GET_PLVAR'
    IMPORTING
      plvar  = gv_plvar
    EXCEPTIONS
      OTHERS = 1.
  IF sy-subrc NE 0 .
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    EXIT .
  ENDIF .

* create tree
  PERFORM fill_context_create_tree
    CHANGING gr_alvtree .

  cl_gui_cfw=>flush( EXCEPTIONS OTHERS = 0 ) .

* add nodes to the tree
  PERFORM fill_context_add_nodes
    USING 'O' '00000001' space
    CHANGING gr_alvtree .

  cl_gui_cfw=>flush( EXCEPTIONS OTHERS = 0 ) .

ENDFORM .                    "fill_context
*&---------------------------------------------------------------------*
*&      Form  fill_context_create_tree
*&---------------------------------------------------------------------*

FORM fill_context_create_tree
          CHANGING cr_alvtree  TYPE REF TO cl_hrpayna_gui_alv_tree .

  CREATE OBJECT cr_alvtree
    EXPORTING
      parent              = cl_gui_container=>default_screen
      node_selection_mode = cl_gui_column_tree=>node_sel_mode_single
    EXCEPTIONS
      OTHERS              = 7.
  CHECK sy-subrc EQ 0 .

*---->> fieldcatalog
  DATA:
    ls_fct            TYPE lvc_s_fcat ,
    lt_fct            TYPE lvc_t_fcat ,
    lr_salv_table     TYPE REF TO cl_salv_table ,
    lr_columns_table  TYPE REF TO cl_salv_columns_table ,
    lr_aggregations   TYPE REF TO cl_salv_aggregations .

  cl_salv_table=>factory(
    IMPORTING r_salv_table = lr_salv_table
    CHANGING  t_table      = gt_alvtree_outtab ) .

  lr_columns_table = lr_salv_table->get_columns( ) .

  lt_fct = cl_salv_controller_metadata=>get_lvc_fieldcatalog(
              r_columns = lr_columns_table
              r_aggregations = lr_aggregations ) .

  ls_fct-outputlen = 15 .
  MODIFY lt_fct FROM ls_fct TRANSPORTING outputlen
   WHERE fieldname EQ 'OBJID'
      OR fieldname EQ 'LAND1' .

*---->> variant
  DATA ls_var      TYPE disvariant .
  ls_var-report = sy-repid .

*---->> initialization
  cr_alvtree->set_table_for_first_display(
    EXPORTING is_variant          = ls_var
    CHANGING  it_fieldcatalog     = lt_fct[]
              it_outtab           = gt_alvtree_outtab[] ) .

ENDFORM .                    "fill_context_create_tree
*&---------------------------------------------------------------------*
*&      Form  add_nodes
*&---------------------------------------------------------------------*
FORM fill_context_add_nodes
        USING pv_parent_otype   TYPE any
              pv_parent_objid   TYPE any
              pv_parent_nkey    TYPE any
        CHANGING
              cr_alvtree        TYPE REF TO cl_hrpayna_gui_alv_tree .
  DATA:
    ls_result_struc     TYPE struc ,
    lt_result_struc     TYPE STANDARD TABLE OF struc ,
    ls_p1028            TYPE p1028 ,
    lt_p1028            TYPE STANDARD TABLE OF p1028 .
  DATA:
    ls_alvtree_outtab   TYPE ty_s_alvtree_outtab ,
    lv_ntext            TYPE lvc_value ,
    lv_nkey             TYPE lvc_nkey .

  CALL FUNCTION 'RH_STRUC_GET'
    EXPORTING
      act_otype       = pv_parent_otype
      act_objid       = pv_parent_objid
      act_wegid       = 'O-O_DOWN'
      act_plvar       = gv_plvar
      act_begda       = sy-datum
      act_endda       = sy-datum
      act_tdepth      = 2
      act_tflag       = abap_off
      act_vflag       = abap_off
      authority_check = abap_off
    TABLES
      result_struc    = lt_result_struc
    EXCEPTIONS
      OTHERS          = 0.
  DELETE lt_result_struc WHERE objid EQ pv_parent_objid .
  CHECK lt_result_struc[] IS NOT INITIAL .

  LOOP AT lt_result_struc INTO ls_result_struc .
    CLEAR ls_alvtree_outtab .
    CLEAR lv_ntext .
    CLEAR lt_p1028 .

*---->> node text (org.unit name)
    SELECT SINGLE orgtx
      INTO lv_ntext
      FROM t527x
     WHERE sprsl EQ 'E'
       AND orgeh EQ ls_result_struc-objid
       AND begda LE sy-datum
       AND endda GE sy-datum .
    CHECK lv_ntext IS NOT INITIAL .

*---->> address fields
    ls_alvtree_outtab-objid = ls_result_struc-objid .
    CALL FUNCTION 'RH_GET_ADDRESS'
      EXPORTING
        plvar   = gv_plvar
        otype   = 'O'
        objid   = ls_alvtree_outtab-objid
        begda   = sy-datum
        endda   = sy-datum
      TABLES
        address = lt_p1028.
    READ TABLE lt_p1028 INTO ls_p1028 INDEX 1 .
    IF sy-subrc EQ 0 .
      MOVE-CORRESPONDING ls_p1028 TO ls_alvtree_outtab .
    ENDIF .

*---->> add current node to the tree
    cr_alvtree->add_node(
          EXPORTING i_relat_node_key = pv_parent_nkey
                    i_relationship   = cl_gui_column_tree=>relat_last_child
                    i_node_text      = lv_ntext
                    is_outtab_line   = ls_alvtree_outtab
          IMPORTING e_new_node_key   = lv_nkey ) .

*---->> recursively adding child nodes
    PERFORM fill_context_add_nodes
      USING ls_result_struc-otype
            ls_result_struc-objid
            lv_nkey
      CHANGING
            cr_alvtree .
  ENDLOOP .

ENDFORM .                    "fill_context_add_nodes


 

Result of the printing program execution:


Export ALV TREE from ABAP to Excel