Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Tree Display

Former Member
0 Likes
624

Hi,

I want a simple program that will display the contents of an internal table in a tree format.

Thanx

Amrita

1 ACCEPTED SOLUTION
Read only

Former Member
4 REPLIES 4
Read only

Former Member
Read only

Former Member
0 Likes
604

Check the sample code

&---------------------------------------------------------------------
*& Report ZUS_SDN_THREE_ALV_GRIDS
*&
&---------------------------------------------------------------------
*&
*&
&---------------------------------------------------------------------
 
REPORT zus_sdn_three_alv_grids.
 
 
 
DATA:
gd_okcode TYPE ui_func,
*
go_docking TYPE REF TO cl_gui_docking_container,
go_splitter TYPE REF TO cl_gui_splitter_container,
go_splitter_2 TYPE REF TO cl_gui_splitter_container,
go_cell_top TYPE REF TO cl_gui_container,
go_cell_bottom TYPE REF TO cl_gui_container,
go_cell_left TYPE REF TO cl_gui_container,
go_cell_right TYPE REF TO cl_gui_container,
go_grid1 TYPE REF TO cl_gui_alv_grid,
go_grid2 TYPE REF TO cl_gui_alv_grid,
go_grid3 TYPE REF TO cl_gui_alv_grid.
 
 
DATA:
gt_knb1 TYPE STANDARD TABLE OF knb1,
gt_vbak TYPE STANDARD TABLE OF vbak,
gt_vbap TYPE STANDARD TABLE OF vbap.
 
 
 
PARAMETERS:
p_bukrs TYPE bukrs DEFAULT '1000'.
 
 
 
---------------------------------------------------------------------
 
 
CLASS lcl_eventhandler DEFINITION 
---------------------------------------------------------------------
*
---------------------------------------------------------------------
CLASS lcl_eventhandler DEFINITION.
 
PUBLIC SECTION.
CLASS-METHODS:
handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING
e_row
e_column
es_row_no
sender.
 
ENDCLASS. "lcl_eventhandler DEFINITION
 
 
 
---------------------------------------------------------------------
 
 
CLASS lcl_eventhandler IMPLEMENTATION 
---------------------------------------------------------------------
*
---------------------------------------------------------------------
CLASS lcl_eventhandler IMPLEMENTATION.
 
METHOD handle_double_click.
 
define local data 
DATA:
ls_knb1 TYPE knb1,
ls_vbak TYPE vbak,
ls_vbap TYPE vbap.
 
CASE sender.
WHEN go_grid1.
READ TABLE gt_knb1 INTO ls_knb1 INDEX e_row-index.
CHECK ( ls_knb1-kunnr IS NOT INITIAL ).
 
CALL METHOD go_grid1->set_current_cell_via_id
EXPORTING
 
 
IS_ROW_ID = 
IS_COLUMN_ID = 
is_row_no = es_row_no.
 
 
Triggers PAI of the dynpro with the specified ok-code 
CALL METHOD cl_gui_cfw=>set_new_ok_code( 'ORDERS' ).
 
WHEN go_grid2.
READ TABLE gt_vbak INTO ls_vbak INDEX e_row-index.
CHECK ( ls_vbak-vbeln IS NOT INITIAL ).
 
CALL METHOD go_grid1->set_current_cell_via_id
EXPORTING
 
 
IS_ROW_ID = 
IS_COLUMN_ID = 
is_row_no = es_row_no.
 
 
Triggers PAI of the dynpro with the specified ok-code 
CALL METHOD cl_gui_cfw=>set_new_ok_code( 'ORDER_DETAILS' ).
 
 
WHEN go_grid3.
READ TABLE gt_vbap INTO ls_vbap INDEX e_row-index.
CHECK ( ls_vbap-matnr IS NOT INITIAL ).
 
SET PARAMETER ID 'MAT' FIELD ls_vbap-matnr.
CALL TRANSACTION 'MM02' AND SKIP FIRST SCREEN.
 
WHEN OTHERS.
RETURN.
ENDCASE.
 
 
 
 
 
ENDMETHOD. "handle_double_click
 
ENDCLASS. "lcl_eventhandler IMPLEMENTATION
 
 
 
 
START-OF-SELECTION.
 
SELECT * FROM knb1 INTO TABLE gt_knb1
WHERE bukrs = p_bukrs.
 
 
 
Create docking container 
CREATE OBJECT go_docking
EXPORTING
parent = cl_gui_container=>screen0
ratio = 90
EXCEPTIONS
OTHERS = 6.
IF sy-subrc 0.
 
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
ENDIF.
 
 
 
 
Create splitter container 
CREATE OBJECT go_splitter
EXPORTING
parent = go_docking
rows = 1
columns = 2
 
NO_AUTODEF_PROGID_DYNNR = 
NAME = 
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3.
IF sy-subrc 0.
 
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
ENDIF.
 
 
Get cell container 
CALL METHOD go_splitter->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = go_cell_left.
CALL METHOD go_splitter->get_container
EXPORTING
row = 1
column = 2
RECEIVING
container = go_cell_right.
 
 
Create 2nd splitter container 
CREATE OBJECT go_splitter_2
EXPORTING
parent = go_cell_left
rows = 2
columns = 1
 
NO_AUTODEF_PROGID_DYNNR = 
NAME = 
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3.
IF sy-subrc 0.
 
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
ENDIF.
 
 
Get cell container 
CALL METHOD go_splitter_2->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = go_cell_top.
CALL METHOD go_splitter_2->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = go_cell_bottom.
 
 
Create ALV grids 
CREATE OBJECT go_grid1
EXPORTING
i_parent = go_cell_top
EXCEPTIONS
OTHERS = 5.
IF sy-subrc 0.
 
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
ENDIF.
 
 
CREATE OBJECT go_grid2
EXPORTING
i_parent = go_cell_bottom
EXCEPTIONS
OTHERS = 5.
IF sy-subrc 0.
 
 
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
ENDIF.
 
CREATE OBJECT go_grid3
EXPORTING
i_parent = go_cell_right
EXCEPTIONS
OTHERS = 5.
IF sy-subrc 0.
 
 
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
ENDIF.
 
 
 
 
 
Set event handler 
SET HANDLER: lcl_eventhandler=>handle_double_click FOR go_grid1.
SET HANDLER: lcl_eventhandler=>handle_double_click FOR go_grid2.
SET HANDLER: lcl_eventhandler=>handle_double_click FOR go_grid3.
 
 
Display data 
CALL METHOD go_grid1->set_table_for_first_display
EXPORTING
i_structure_name = 'KNB1'
CHANGING
it_outtab = gt_knb1
EXCEPTIONS
OTHERS = 4.
IF sy-subrc 0.
 
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
ENDIF.
 
REFRESH: gt_vbak.
CALL METHOD go_grid2->set_table_for_first_display
EXPORTING
i_structure_name = 'VBAK'
CHANGING
it_outtab = gt_vbak " empty !!!
EXCEPTIONS
OTHERS = 4.
IF sy-subrc 0.
 
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
ENDIF.
 
REFRESH: gt_vbap.
CALL METHOD go_grid3->set_table_for_first_display
EXPORTING
i_structure_name = 'VBAP'
CHANGING
it_outtab = gt_vbap " empty !!!
EXCEPTIONS
OTHERS = 4.
IF sy-subrc 0.
 
 
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
ENDIF.
 
 
Link the docking container to the target dynpro 
CALL METHOD go_docking->link
EXPORTING
repid = syst-repid
dynnr = '0100'
 
CONTAINER = 
EXCEPTIONS
OTHERS = 4.
IF sy-subrc 0.
 
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
ENDIF.
 
 
NOTE: dynpro does not contain any elements 
CALL SCREEN '0100'.
 
Flow logic of dynpro: 
*
*PROCESS BEFORE OUTPUT.
 
MODULE STATUS_0100. 
**
*PROCESS AFTER INPUT.
 
MODULE USER_COMMAND_0100. 
 
END-OF-SELECTION.
 
&---------------------------------------------------------------------
*& Module STATUS_0100 OUTPUT
&---------------------------------------------------------------------
 
 
text 
----------------------------------------------------------------------
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS_0100'. " contains push button "ORDERS"
 
SET TITLEBAR 'xxx'. 
 
Refresh display of detail ALV list 
CALL METHOD go_grid2->refresh_table_display
 
EXPORTING 
IS_STABLE = 
I_SOFT_REFRESH = 
EXCEPTIONS
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.
 
 
Refresh display of detail ALV list 
CALL METHOD go_grid3->refresh_table_display
 
EXPORTING 
IS_STABLE = 
I_SOFT_REFRESH = 
EXCEPTIONS
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.
 
ENDMODULE. " STATUS_0100 OUTPUT
 
&---------------------------------------------------------------------
*& Module USER_COMMAND_0100 INPUT
&---------------------------------------------------------------------
 
text 
----------------------------------------------------------------------
MODULE user_command_0100 INPUT.
 
CASE gd_okcode.
WHEN 'BACK' OR
'END' OR
'CANC'.
SET SCREEN 0. LEAVE SCREEN.
 
 
User has pushed button "Display Orders" 
WHEN 'ORDERS'.
PERFORM customer_show_orders.
 
WHEN 'ORDER_DETAILS'.
PERFORM order_show_details.
 
WHEN OTHERS.
ENDCASE.
 
CLEAR: gd_okcode.
 
ENDMODULE. " USER_COMMAND_0100 INPUT
 
&---------------------------------------------------------------------
*& Form CUSTOMER_SHOW_ORDERS
&---------------------------------------------------------------------
 
text 
----------------------------------------------------------------------
 
--> p1 text 
<-- p2 text 
----------------------------------------------------------------------
FORM customer_show_orders .
 
define local data 
DATA:
ld_row TYPE i,
ls_knb1 TYPE knb1.
 
CALL METHOD go_grid1->get_current_cell
IMPORTING
e_row = ld_row.
 
READ TABLE gt_knb1 INTO ls_knb1 INDEX ld_row.
CHECK ( syst-subrc = 0 ).
 
SELECT * FROM vbak INTO TABLE gt_vbak
WHERE kunnr = ls_knb1-kunnr.
 
REFRESH: gt_vbap.
 
 
 
ENDFORM. " CUSTOMER_SHOW_ORDERS
 
&---------------------------------------------------------------------
*& Form ORDER_SHOW_DETAILS
&---------------------------------------------------------------------
 
 
text 
----------------------------------------------------------------------
 
--> p1 text 
<-- p2 text 
----------------------------------------------------------------------
FORM order_show_details .
 
define local data 
DATA:
ld_row TYPE i,
ls_vbak TYPE vbak.
 
CALL METHOD go_grid1->get_current_cell
IMPORTING
e_row = ld_row.
 
READ TABLE gt_vbak INTO ls_vbak INDEX ld_row.
CHECK ( syst-subrc = 0 ).
 
SELECT * FROM vbap INTO TABLE gt_vbap
WHERE vbeln = ls_vbak-vbeln.
 
 
ENDFORM. " ORDER_SHOW_DETAILS.

Regards

Read only

Former Member
0 Likes
604

hi

good

you can't display the internal table data in a tree format in the classical report, for that you have to use the alv report which will help you to display your internal table data in a tree format.

thanks

mrutyun^

Read only

Former Member
0 Likes
604

Try this one...It uses OO ALV Tree...


*&---------------------------------------------------------------------*
*& Report  ZDUMMY_ATG_2
*&
*&---------------------------------------------------------------------*
REPORT zdummy_atg_2.

TYPES: BEGIN OF ty_header,
       carrid TYPE spfli-carrid,
       END OF ty_header.

TYPES: BEGIN OF ty_scarr,
       carrid TYPE scarr-carrid,
       carrname TYPE scarr-carrname,
       END OF ty_scarr.

TYPES: BEGIN OF ty_tree,
       carrid TYPE spfli-carrid,
       connid TYPE spfli-connid,
       countryfr TYPE spfli-countryfr,
       cityfrom TYPE spfli-cityfrom,
       airpfrom TYPE spfli-airpfrom,
       countryto TYPE spfli-countryto,
       cityto TYPE spfli-cityto,
       END OF ty_tree.

DATA: t_spfli TYPE STANDARD TABLE OF spfli,
      w_spfli LIKE LINE OF t_spfli,
      lt_f4 TYPE lvc_t_f4 WITH HEADER LINE,
      return_tab TYPE STANDARD TABLE OF ddshretval WITH HEADER LINE,
      t_stable TYPE STANDARD TABLE OF lvc_s_stbl WITH HEADER LINE,
      t_header TYPE STANDARD TABLE OF ty_header,
      t_scarr TYPE STANDARD TABLE OF ty_scarr,
      t_tree TYPE STANDARD TABLE OF ty_tree WITH HEADER LINE.

DATA: g_alv_tree TYPE REF TO cl_gui_alv_tree,
      g_custom_container TYPE REF TO cl_gui_custom_container,
      gs_fieldcat TYPE lvc_s_fcat,
      gt_fieldcat_tree TYPE lvc_t_fcat,
      l_hierarchy_header TYPE treev_hhdr,
      it_node_key TYPE lvc_t_nkey,
      w_index TYPE sy-tabix.

DATA: ok_code LIKE sy-ucomm,
      gt_fieldcat TYPE lvc_t_fcat.

FIELD-SYMBOLS: <fs_spfli> LIKE LINE OF t_spfli,
               <fs_header> LIKE LINE OF t_header,
               <fs_scarr> LIKE LINE OF t_scarr.

*&---------------------------------------------------------------------*
*&      START-OF-SELECTION                                             *
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM cargar_datos.
  PERFORM init_tree.

  CALL SCREEN 0100.

*&---------------------------------------------------------------------*
*&      Form  CARGAR_DATOS                                             *
*&---------------------------------------------------------------------*
FORM cargar_datos.

  SELECT mandt carrid connid countryfr cityfrom
         airpfrom countryto cityto airpto
         fltime deptime arrtime distance
         distid fltype period
  INTO TABLE t_spfli
  FROM spfli.

  SELECT carrid carrname
  INTO TABLE t_scarr
  FROM scarr
  FOR ALL ENTRIES IN t_spfli
  WHERE carrid EQ t_spfli-carrid.

  DELETE ADJACENT DUPLICATES FROM t_scarr
  COMPARING carrid.

  LOOP AT t_scarr ASSIGNING <fs_scarr>.
    APPEND INITIAL LINE TO t_header
    ASSIGNING <fs_header>.
    MOVE <fs_scarr> TO <fs_header>.
  ENDLOOP.

ENDFORM.                    " CARGAR_DATOS

*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT                                    *
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'MAIN_STATUS'.
*  SET TITLEBAR 'xxx'.

ENDMODULE.                 " STATUS_0100  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT                               *
*&---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

  ok_code = sy-ucomm.

  CASE ok_code.
    WHEN 'BACK' OR 'STOP' OR 'CANCEL'.
      SET SCREEN 0.
      LEAVE SCREEN.
  ENDCASE.

ENDMODULE.                 " USER_COMMAND_0100  INPUT

*---------------------------------------------------------------------*
*       FORM init_tree                                                *
*---------------------------------------------------------------------*
FORM init_tree.

  DATA: l_tree_container_name(30) TYPE c.

  l_tree_container_name = 'CUSTOM_ALV'.

  CREATE OBJECT g_custom_container
    EXPORTING
      container_name              = l_tree_container_name
    EXCEPTIONS
      cntl_error                  = 1
      cntl_system_error           = 2
      create_error                = 3
      lifetime_error              = 4
      lifetime_dynpro_dynpro_link = 5.

  CREATE OBJECT g_alv_tree
    EXPORTING
      parent                      = g_custom_container
      node_selection_mode         = cl_gui_column_tree=>node_sel_mode_single
      item_selection              = ''
      no_html_header              = 'X'
      no_toolbar                  = ''
    EXCEPTIONS
      cntl_error                  = 1
      cntl_system_error           = 2
      create_error                = 3
      lifetime_error              = 4
      illegal_node_selection_mode = 5
      failed                      = 6
      illegal_column_name         = 7.

  PERFORM fill_catalog_tree.
  PERFORM build_hierarchy_header CHANGING l_hierarchy_header.

  CALL METHOD g_alv_tree->set_table_for_first_display
    EXPORTING
      is_hierarchy_header = l_hierarchy_header
    CHANGING
      it_outtab           = t_tree[]
      it_fieldcatalog     = gt_fieldcat_tree.

  PERFORM create_hierarchy.

ENDFORM.                    "INIT_TREE

*&---------------------------------------------------------------------*
*&      Form  FILL_CATALOG_TREE                                        *
*&---------------------------------------------------------------------*
FORM fill_catalog_tree.

  DATA: gs_fieldcat TYPE lvc_s_fcat.

  CLEAR gs_fieldcat.
  gs_fieldcat-col_pos   = 1.
  gs_fieldcat-fieldname = 'CARRID'.
  gs_fieldcat-scrtext_s = 'Compañía'.
  gs_fieldcat-tabname   = 'T_SPFLI'.
  gs_fieldcat-edit      = 'X'.
  gs_fieldcat-f4availabl = 'X'.
  gs_fieldcat-outputlen = '8'.
  APPEND gs_fieldcat TO gt_fieldcat_tree.

  CLEAR gs_fieldcat.
  gs_fieldcat-col_pos   = 2.
  gs_fieldcat-fieldname = 'CONNID'.
  gs_fieldcat-scrtext_s = 'Conexión'.
  gs_fieldcat-tabname   = 'T_SPFLI'.
  gs_fieldcat-edit      = 'X'.
  gs_fieldcat-outputlen = '8'.
  APPEND gs_fieldcat TO gt_fieldcat_tree.

  CLEAR gs_fieldcat.
  gs_fieldcat-col_pos   = 3.
  gs_fieldcat-fieldname = 'COUNTRYFR'.
  gs_fieldcat-scrtext_s = 'País'.
  gs_fieldcat-tabname   = 'T_SPFLI'.
  gs_fieldcat-edit      = 'X'.
  gs_fieldcat-outputlen = '4'.
  APPEND gs_fieldcat TO gt_fieldcat_tree.

  CLEAR gs_fieldcat.
  gs_fieldcat-col_pos   = 4.
  gs_fieldcat-fieldname = 'CITYFROM'.
  gs_fieldcat-scrtext_s = 'Ciudad Salida'.
  gs_fieldcat-tabname   = 'T_SPFLI'.
  gs_fieldcat-edit      = space.
  gs_fieldcat-outputlen = '20'.
  APPEND gs_fieldcat TO gt_fieldcat_tree.

  CLEAR gs_fieldcat.
  gs_fieldcat-col_pos   = 5.
  gs_fieldcat-fieldname = 'AIRPFROM'.
  gs_fieldcat-scrtext_s = 'Arp. Salida'.
  gs_fieldcat-tabname   = 'T_SPFLI'.
  gs_fieldcat-edit      = 'X'.
  gs_fieldcat-outputlen = '10'.
  APPEND gs_fieldcat TO gt_fieldcat_tree.

  CLEAR gs_fieldcat.
  gs_fieldcat-col_pos   = 6.
  gs_fieldcat-fieldname = 'COUNTRYTO'.
  gs_fieldcat-scrtext_s = 'País'.
  gs_fieldcat-tabname   = 'T_SPFLI'.
  gs_fieldcat-edit      = 'X'.
  gs_fieldcat-outputlen = '4'.
  APPEND gs_fieldcat TO gt_fieldcat_tree.

  CLEAR gs_fieldcat.
  gs_fieldcat-col_pos   = 7.
  gs_fieldcat-fieldname = 'CITYTO'.
  gs_fieldcat-scrtext_s = 'Ciudad Llegada'.
  gs_fieldcat-tabname   = 'T_SPFLI'.
  gs_fieldcat-edit      = space.
  gs_fieldcat-outputlen = '20'.
  APPEND gs_fieldcat TO gt_fieldcat_tree.

ENDFORM.                    " FILL_CATALOG_TREE

*---------------------------------------------------------------------*
*       FORM build_hierarchy_header                                   *
*---------------------------------------------------------------------*
FORM build_hierarchy_header CHANGING
                               p_hierarchy_header TYPE treev_hhdr.

  CLEAR p_hierarchy_header.
  p_hierarchy_header-heading = 'Código'(300).
  p_hierarchy_header-width = 60.
  p_hierarchy_header-width_pix = ' '.

ENDFORM.                    "BUILD_HIERARCHY_HEADER

*---------------------------------------------------------------------*
*       FORM create_hierarchy                                         *
*---------------------------------------------------------------------*
FORM create_hierarchy.

  DATA: l_root_key TYPE lvc_nkey,
        l_next_key TYPE lvc_nkey,
        l_last_key TYPE lvc_nkey,
        header TYPE string,
        w_menge_text(13) TYPE c.

  CLEAR l_root_key.

  LOOP AT t_header ASSIGNING <fs_header>.
    READ TABLE t_scarr WITH KEY carrid = <fs_header>-carrid
    ASSIGNING <fs_scarr>.
    IF sy-subrc EQ 0.
      header = <fs_scarr>-carrname.
    ENDIF.
    CLEAR l_root_key.
    CLEAR l_next_key.
    PERFORM add_node USING header l_root_key
                     CHANGING l_next_key.
    LOOP AT t_spfli ASSIGNING <fs_spfli>
    WHERE carrid EQ <fs_header>-carrid.

      MOVE-CORRESPONDING <fs_spfli> TO t_tree.

      PERFORM add_leaf USING t_tree l_next_key
                       CHANGING l_last_key.
    ENDLOOP.
  ENDLOOP.

  CALL METHOD g_alv_tree->frontend_update.

ENDFORM.                    "CREATE_HIERARCHY

*---------------------------------------------------------------------*
*       FORM ADD_NODE                                                 *
*---------------------------------------------------------------------*
FORM add_node USING l_name l_root_key
              CHANGING l_next_key.

  DATA: l_node_text TYPE lvc_value,
        ls_tree TYPE ty_tree.

  l_node_text =  l_name.
  CALL METHOD g_alv_tree->add_node
    EXPORTING
      i_relat_node_key = l_root_key
      i_relationship   = cl_gui_column_tree=>relat_last_child
      i_node_text      = l_node_text
      is_outtab_line   = ls_tree
    IMPORTING
      e_new_node_key   = l_next_key.

ENDFORM.                    "ADD_NODE

*---------------------------------------------------------------------*
*       FORM ADD_LEAF                                                 *
*---------------------------------------------------------------------*
FORM add_leaf USING l_tree TYPE ty_tree
                    l_next_key
              CHANGING l_last_key.

  CALL METHOD g_alv_tree->add_node
    EXPORTING
      i_relat_node_key = l_next_key
      i_relationship   = cl_gui_column_tree=>relat_last_child
      is_outtab_line   = t_tree
    IMPORTING
      e_new_node_key   = l_last_key.

ENDFORM.                    "ADD_LEAF

Greetings,

Blag.