Thursday, 15 September 2016

A simple tool to display product hierarchy in an ALV tree

Recently I start to study SD and I found the product hierarchy in transaction code V/76 could not be viewed in tree style and it is not so convenient to check:

A simple tool to display product hierarchy in an ALV tree
So I wrote a simple report to retrieve hierarchy data from table T179 and display the data in a tree as below:

A simple tool to display product hierarchy in an ALV tree

The source code of report is listed below:
*&---------------------------------------------------------------------*
*& Report ZDISPLAY_HIERARCHY
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*

REPORT zdisplay_hierarchy.

DATA: g_alv_tree TYPE REF TO cl_gui_alv_tree,  
  gt_data TYPE STANDARD TABLE OF zcl_alv_tool=>ty_displayed_node,  
  ok_code LIKE sy-ucomm,  
  save_ok LIKE sy-ucomm,  
  ls_data LIKE LINE OF gt_data.  
END-OF-SELECTION.  
  DATA(lo_tool) = NEW zcl_alv_tool( ).  
  DATA(lt_fieldcat) = lo_tool->get_fieldcat_by_data( ls_data ).  
  PERFORM change_label.  
  CALL SCREEN 100.  
MODULE pbo OUTPUT.  
  SET PF-STATUS 'MAIN100'.  
  SET TITLEBAR 'MAINTITLE'.  
  IF g_alv_tree IS INITIAL.  
  PERFORM init_tree.  
  CALL METHOD cl_gui_cfw=>flush  
  EXCEPTIONS  
  cntl_system_error = 1  
  cntl_error = 2.  
  ASSERT sy-subrc = 0.  
  ENDIF.  
ENDMODULE. " PBO OUTPUT  
MODULE pai INPUT.  
  save_ok = ok_code.  
  CLEAR ok_code.  
  CASE save_ok.  
  WHEN 'EXIT' OR 'BACK' OR 'CANC'.  
  PERFORM exit_program.  
  WHEN OTHERS.  
  CALL METHOD cl_gui_cfw=>dispatch.  
  ENDCASE.  
  CALL METHOD cl_gui_cfw=>flush.  
ENDMODULE. " PAI INPUT  
FORM change_label.  
  READ TABLE lt_fieldcat ASSIGNING FIELD-SYMBOL(<id>) INDEX 1.  
  <id>-seltext = <id>-reptext = <id>-scrtext_m = <id>-scrtext_s = <id>-scrtext_l = 'Hierarchy ID'.  
  <id>-outputlen = 20.  
  READ TABLE lt_fieldcat ASSIGNING FIELD-SYMBOL(<text>) INDEX 2.  
  <text>-seltext = <text>-reptext = <text>-scrtext_m = <text>-scrtext_l = 'Description'.  
  <text>-scrtext_s = 'Text'.  
  <text>-outputlen = 40.  
ENDFORM.  
FORM init_tree.  
  g_alv_tree = lo_tool->get_tree( ).  
  DATA l_hierarchy_header TYPE treev_hhdr.  
  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_fieldcatalog = lt_fieldcat  
  it_outtab = gt_data.  
  PERFORM create_tree.  
  g_alv_tree->frontend_update( ).  
  lo_tool->expand( ).  
ENDFORM.  
FORM create_tree.  
  DATA(lt_data) = lo_tool->get_hierarchy_data( ).  
  lo_tool->draw_tree( lt_data ).  
ENDFORM. " init_tree  
FORM build_hierarchy_header CHANGING p_hierarchy_header TYPE treev_hhdr.  
  p_hierarchy_header-heading = 'Material hierarchy'.  
  p_hierarchy_header-width = 30.  
  p_hierarchy_header-width_pix = ' '.  
ENDFORM. " build_hierarchy_header  
FORM exit_program.  
  LEAVE PROGRAM.  
ENDFORM. " exit_program  

In order to use the report, all you need is to just create a new screen :

A simple tool to display product hierarchy in an ALV tree

And drag a custom container to screen with name "CCONTAINER1":

A simple tool to display product hierarchy in an ALV tree

1 comment: