REPORT z_alv_hierseq_list. *---------------------------------------------------------------------* * Program with FM REUSE_ALV_HIERSEQ_LIST_DISPLAY * *---------------------------------------------------------------------* * Author : Michel PIOUD - Updated 21 Dec 2007 * * HomePage : http://www.oocities.org/mpioud * *---------------------------------------------------------------------* TYPE-POOLS: slis. " ALV Global types *---------------------------------------------------------------------* CONSTANTS : c_x VALUE 'X', c_gt_vbap TYPE slis_tabname VALUE 'GT_VBAP', c_gt_vbak TYPE slis_tabname VALUE 'GT_VBAK'. *---------------------------------------------------------------------* SELECTION-SCREEN : SKIP, BEGIN OF LINE,COMMENT 5(27) v_1 FOR FIELD p_max. "#EC NEEDED PARAMETERS p_max(02) TYPE n DEFAULT '10' OBLIGATORY. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN : SKIP, BEGIN OF LINE,COMMENT 5(27) v_2 FOR FIELD p_expand. "#EC NEEDED PARAMETERS p_expand AS CHECKBOX DEFAULT c_x. SELECTION-SCREEN END OF LINE. *---------------------------------------------------------------------* TYPES : * 1st Table BEGIN OF ty_vbak, vbeln TYPE vbak-vbeln, " Sales document kunnr TYPE vbak-kunnr, " Sold-to party netwr TYPE vbak-netwr, " Net Value of the Sales Order erdat TYPE vbak-erdat, " Creation date waerk TYPE vbak-waerk, " SD document currency expand TYPE xfeld, END OF ty_vbak, * 2nd Table BEGIN OF ty_vbap, vbeln TYPE vbap-vbeln, " Sales document posnr TYPE vbap-posnr, " Sales document matnr TYPE vbap-matnr, " Material number arktx TYPE vbap-arktx, " Material description netwr TYPE vbap-netwr, " Net Value of the Sales Order waerk TYPE vbap-waerk, " SD document currency END OF ty_vbap. *---------------------------------------------------------------------* DATA : * 1st Table gt_vbak TYPE TABLE OF ty_vbak, * 2nd Table gt_vbap TYPE TABLE OF ty_vbap. *---------------------------------------------------------------------* INITIALIZATION. v_1 = 'Maximum of records to read'. v_2 = 'With ''EXPAND'' field'. *---------------------------------------------------------------------* START-OF-SELECTION. * Read Sales Document: Header Data SELECT vbeln kunnr netwr waerk erdat FROM vbak UP TO p_max ROWS INTO CORRESPONDING FIELDS OF TABLE gt_vbak. IF gt_vbak[] IS NOT INITIAL. * Read Sales Document: Item Data SELECT vbeln posnr matnr arktx netwr waerk FROM vbap INTO CORRESPONDING FIELDS OF TABLE gt_vbap FOR ALL ENTRIES IN gt_vbak WHERE vbeln = gt_vbak-vbeln. ENDIF. *---------------------------------------------------------------------* END-OF-SELECTION. PERFORM f_display. *---------------------------------------------------------------------* * Form F_DISPLAY *---------------------------------------------------------------------* FORM f_display. * Macro definition DEFINE m_fieldcat. ls_fieldcat-tabname = &1. ls_fieldcat-fieldname = &2. ls_fieldcat-ref_tabname = &3. ls_fieldcat-cfieldname = &4. " Field with currency unit append ls_fieldcat to lt_fieldcat. END-OF-DEFINITION. DEFINE m_sort. ls_sort-tabname = &1. ls_sort-fieldname = &2. ls_sort-up = c_x. append ls_sort to lt_sort. END-OF-DEFINITION. DATA: ls_layout TYPE slis_layout_alv, ls_keyinfo TYPE slis_keyinfo_alv, ls_sort TYPE slis_sortinfo_alv, lt_sort TYPE slis_t_sortinfo_alv," Sort table ls_fieldcat TYPE slis_fieldcat_alv, lt_fieldcat TYPE slis_t_fieldcat_alv." Field catalog ls_layout-group_change_edit = c_x. ls_layout-colwidth_optimize = c_x. ls_layout-zebra = c_x. ls_layout-detail_popup = c_x. ls_layout-get_selinfos = c_x. IF p_expand = c_x. ls_layout-expand_fieldname = 'EXPAND'. ENDIF. * Build field catalog and sort table m_fieldcat c_gt_vbak 'VBELN' 'VBAK' ''. m_fieldcat c_gt_vbak 'KUNNR' 'VBAK' ''. m_fieldcat c_gt_vbak 'NETWR' 'VBAK' 'WAERK'. m_fieldcat c_gt_vbak 'WAERK' 'VBAK' ''. m_fieldcat c_gt_vbak 'ERDAT' 'VBAK' ''. m_fieldcat c_gt_vbap 'POSNR' 'VBAP' ''. m_fieldcat c_gt_vbap 'MATNR' 'VBAP' ''. m_fieldcat c_gt_vbap 'ARKTX' 'VBAP' ''. m_fieldcat c_gt_vbap 'NETWR' 'VBAP' 'WAERK'. m_fieldcat c_gt_vbap 'WAERK' 'VBAP' ''. m_sort c_gt_vbak 'KUNNR'. m_sort c_gt_vbap 'NETWR'. ls_keyinfo-header01 = 'VBELN'. ls_keyinfo-item01 = 'VBELN'. ls_keyinfo-item02 = 'POSNR'. * Dipslay Hierarchical list CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY' EXPORTING i_callback_program = sy-cprog i_callback_user_command = 'USER_COMMAND' is_layout = ls_layout it_fieldcat = lt_fieldcat it_sort = lt_sort i_tabname_header = c_gt_vbak i_tabname_item = c_gt_vbap is_keyinfo = ls_keyinfo i_save = 'A' TABLES t_outtab_header = gt_vbak t_outtab_item = gt_vbap 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. ENDFORM. " F_LIST_DISPLAY *---------------------------------------------------------------------* * Form USER_COMMAND * *---------------------------------------------------------------------* FORM user_command USING i_ucomm TYPE sy-ucomm is_selfield TYPE slis_selfield. "#EC CALLED DATA ls_vbak TYPE ty_vbak. CASE i_ucomm. WHEN '&IC1'. " Pick CASE is_selfield-tabname. WHEN c_gt_vbap. WHEN c_gt_vbak. READ TABLE gt_vbak INDEX is_selfield-tabindex INTO ls_vbak. IF sy-subrc EQ 0. * Sales order number SET PARAMETER ID 'AUN' FIELD ls_vbak-vbeln. * Display Sales Order CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN. ENDIF. ENDCASE. ENDCASE. ENDFORM. " USER_COMMAND ****************** END OF PROGRAM Z_ALV_HIERSEQ_LIST ******************