메뉴 건너뛰기

SAP 한국 커뮤니티



REPORT z_alv_hierseq_list

노름마치 2007.11.05 12:47 조회 수 : 3121

REPORT z_alv_hierseq_list.
*---------------------------------------------------------------------*
* Program with FM REUSE_ALV_HIERSEQ_LIST_DISPLAY                      *
*---------------------------------------------------------------------*
* Author : Michel PIOUD                                               *
* Email : mpioud@yahoo.fr  HomePage : http://www.geocities.com/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
    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 NOT gt_vbak[] IS INITIAL.
*   Read Sales Document: Item Data
    SELECT vbeln posnr matnr netwr waerk
      FROM vbap
      INTO CORRESPONDING FIELDS OF TABLE gt_vbap
       FOR ALL ENTRIES IN gt_vbak
     WHERE vbeln = gt_vbak-vbeln.
  ENDIF.


  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 '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
    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 ******************