xincheng24 发表于 2007-7-25 12:34:26

ALV 编程实践(全) - ABAP DEMO 系列

注册ITPUB已经好久了,但是一直没有发帖,积分比较少,连FTP都进不去,所以打算给论坛做点贡献,赚点积分挤入老会员行列。发现论坛的教学程序比较少,正好最近有空写点范例程序。我打算把ABAP涉及的项目中常用的应用程序都做一个DEMO供初学者参考(ALV, BDC, DIALOG PROG, REPORT PROG, SAP SCRIPT, SMARTFORMS, ETC…), 内容顺序跟培训课程不大一样,但这些都是独立模块,互相的关联没有太多限制,所以也没有关系。今天我将具体给出一个ALV的实践例子,抛砖引玉,有不足之处希望大家多多指教!同时希望ITPUB的其他同仁们也能够借此机会跟大家分享一些你们觉得有价值的ABAP程序。


应 merlinme(睡觉也会醒 )建议,已做成文档提供下载,请到11楼下载。


      今天我将给出5段程序代码,在SAP R/3 4.6C IDES 测试通过,程序细节如下:
  1            程序代码: 一般列表显示(NORMAL LIST DISPLAY)
  2            程序代码: SEARCH HELP(F4 HELP FOR DISPLAY VARIANTS)
  3            程序代码: 层级显示(HIERARCHICAL  ALV DISPLAY)
  4            程序代码: 多内表的ALV显示(DISPLAY MORE THAN ONE INTERNAL TABLE IN ALV)
  5            程序代码: ALV中的交互式报表程序(INTERACTIVE REPORTING IN  ALV)

xincheng24 发表于 2007-7-25 12:36:54

1.  程序代码:一般列表显示(Normal List Display)

此程序用来显示制定的物料细节(MM模块)


TABLES : mara.

SELECT-OPTIONS: s_matnr FOR mara-matnr.

TYPE-POOLS: slis.

DATA: BEGIN OF itab OCCURS 0,
      matnr LIKE mara-matnr,
      ernam LIKE mara-ernam,
      ersda LIKE mara-ersda,
      labor LIKE mara-labor,
      END OF itab.

DATA: i_fieldcat TYPE slis_t_fieldcat_alv,
      xevents    TYPE slis_t_event,
      ls_event    TYPE slis_alv_event,
      slis_ev_top TYPE slis_formname VALUE 'TOP_OF_PAGE'.

DATA: v_repid LIKE sy-repid.

START-OF-SELECTION.

  v_repid = sy-repid.

  SELECT matnr ernam ersda labor
    INTO TABLE itab
    FROM mara
    WHERE matnr IN s_matnr.

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type     = 0
    IMPORTING
      et_events       = xevents
    EXCEPTIONS
      list_type_wrong = 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.

  READ TABLE xevents WITH KEY name = slis_ev_top
                           INTO ls_event.
  IF sy-subrc = 0.
    MOVE slis_ev_top TO ls_event-form.
    APPEND ls_event TO xevents.
  ENDIF.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name               =  v_repid
      i_internal_tabname           = 'ITAB'
*     I_STRUCTURE_NAME             =
*     I_CLIENT_NEVER_DISPLAY       = 'X'
      i_inclname                   = v_repid
      i_bypassing_buffer           = 'X'
      i_buffer_active              = ' '
    CHANGING
      ct_fieldcat                  = i_fieldcat
    EXCEPTIONS
      inconsistent_interface       = 1
      program_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.

  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
    EXPORTING
*     I_INTERFACE_CHECK              = ' '
      i_bypassing_buffer             = 'X'
      i_buffer_active                = ' '
      i_callback_program             = v_repid
*     I_CALLBACK_PF_STATUS_SET       = ' '
*     I_CALLBACK_USER_COMMAND        = ' '
*     I_STRUCTURE_NAME               =
*     IS_LAYOUT                      =
      it_fieldcat                    = i_fieldcat
*     IT_EXCLUDING                   =
*     IT_SPECIAL_GROUPS              =
*     IT_SORT                        =
*     IT_FILTER                      =
*     IS_SEL_HIDE                    =
*     I_DEFAULT                      = 'X'
      i_save                         = 'A'
*     IS_VARIANT                     =
      IT_EVENTS                      = xevents
*     IT_EVENT_EXIT                  =
*     IS_PRINT                       =
*     IS_REPREP_ID                   =
*     I_SCREEN_START_COLUMN          = 0
*     I_SCREEN_START_LINE            = 0
*     I_SCREEN_END_COLUMN            = 0
*     I_SCREEN_END_LINE              = 0
*   IMPORTING
*     E_EXIT_CAUSED_BY_CALLER        =
*     ES_EXIT_CAUSED_BY_USER         =
    TABLES
      t_outtab                       = itab
    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.

*&--------------------------------------------------------------------*
*&      Form  top_of_page
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM TOP_OF_PAGE.

  WRITE:/ 'Top of page event triggered’.
  WRITE:/ ‘This report gives the material details'.

ENDFORM.                    "top_of_page

xincheng24 发表于 2007-7-25 12:39:23

2. 程序代码: Search Help(F4 help for the display variant)
此程序将根据制定的filed得出相关的search help

PARAMETERS: p_vari LIKE disvariant-variant.  "select variant

DATA: v_st_variant   LIKE disvariant,
      v_stx_variant  LIKE disvariant,
      v_exit.

CONSTANTS: c_save(1) VALUE ‘A’.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
  
  v_st_variant-report = sy_repid.

  CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
       EXPORTING
            is_variant          = v_st_variant
            i_save              = c_save
*           it_default_fieldcat =
       IMPORTING
            e_exit              = v_exit
            es_variant          = v_stx_variant
       EXCEPTIONS
            not_found = 2.
  IF sy-subrc = 2.
    MESSAGE ID sy-msgid TYPE 'S'      NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ELSE.
    IF v_exit = space.
      p_vari = v_stx_variant-variant.
    ENDIF.
  ENDIF.

xincheng24 发表于 2007-7-25 12:40:25

3. 程序代码: 层级显示(hierarchical display)
此程序将层级显示PO(purchasing order)的细节(MM模块)。

TABLES : ekko,
         ekpo.

SELECT-OPTIONS: s_ebeln FOR ekko-ebeln.

TYPE-POOLS: slis.

DATA: BEGIN OF headertab OCCURS 0,
       ebeln LIKE ekko-ebeln,
       bstyp LIKE ekko-bstyp,
       bsart LIKE ekko-bsart,
       statu LIKE ekko-statu,
      END OF headertab.

DATA: BEGIN OF itemtab OCCURS 0,
       ebeln LIKE ekpo-ebeln,
       ebelp LIKE ekpo-ebelp,
       matnr LIKE ekpo-matnr,
       werks LIKE ekpo-werks,
       menge LIKE ekpo-menge,
       netpr LIKE ekpo-netpr,
       peinh LIKE ekpo-peinh,
       netwr LIKE ekpo-netwr,
      END OF itemtab.

DATA: i_fieldcat TYPE slis_t_fieldcat_alv.
DATA: v_repid LIKE sy-repid.
DATA: g_tabname_header TYPE slis_tabname,
      g_tabname_item   TYPE slis_tabname,
      gs_keyinfo TYPE slis_keyinfo_alv.

START-OF-SELECTION.

  v_repid = sy-repid.

  SELECT ebeln bstyp bsart statu
     INTO TABLE headertab
     FROM ekko
     WHERE ebeln IN s_ebeln.

  IF NOT headertab[] IS INITIAL.
    SELECT ebeln ebelp matnr werks menge netpr peinh netwr
       INTO TABLE itemtab
       FROM ekpo
       FOR ALL ENTRIES IN headertab
       WHERE ebeln = headertab-ebeln.
  ENDIF.


  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name               =  v_repid
      i_internal_tabname           = 'HEADERTAB'
*     I_STRUCTURE_NAME             =
*     I_CLIENT_NEVER_DISPLAY       = 'X'
      i_inclname                   = v_repid
      i_bypassing_buffer           = 'X'
      i_buffer_active              = ' '
    CHANGING
      ct_fieldcat                  = i_fieldcat
    EXCEPTIONS
      inconsistent_interface       = 1
      program_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.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name               =  v_repid
      i_internal_tabname           = 'ITEMTAB'
*     I_STRUCTURE_NAME             =
*     I_CLIENT_NEVER_DISPLAY       = 'X'
      i_inclname                   = v_repid
      i_bypassing_buffer           = 'X'
      i_buffer_active              = ' '
    CHANGING
      ct_fieldcat                  = i_fieldcat
    EXCEPTIONS
      inconsistent_interface       = 1
      program_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.

  gs_keyinfo-header01 = 'EBELN'.
  gs_keyinfo-item01   = 'EBELN'.
  g_tabname_header = 'HEADERTAB'.
  g_tabname_item   = 'ITEMTAB'.


  CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
    EXPORTING
*     I_INTERFACE_CHECK              = ' '
      I_CALLBACK_PROGRAM             = v_repid
*     I_CALLBACK_PF_STATUS_SET       = ' '
*     I_CALLBACK_USER_COMMAND        = ' '
*     IS_LAYOUT                      =
      IT_FIELDCAT                    = i_fieldcat
*     IT_EXCLUDING                   =
*     IT_SPECIAL_GROUPS              =
*     IT_SORT                        =
*     IT_FILTER                      =
*     IS_SEL_HIDE                    =
*     I_SCREEN_START_COLUMN          = 0
*     I_SCREEN_START_LINE            = 0
*     I_SCREEN_END_COLUMN            = 0
*     I_SCREEN_END_LINE              = 0
*     I_DEFAULT                      = 'X'
      I_SAVE                         = 'A'
*     IS_VARIANT                     =
*     IT_EVENTS                      =
*     IT_EVENT_EXIT                  =
      i_tabname_header               = g_tabname_header
      i_tabname_item                 = g_tabname_item
*     I_STRUCTURE_NAME_HEADER        =
*     I_STRUCTURE_NAME_ITEM          =
      is_keyinfo                     = gs_keyinfo
*     IS_PRINT                       =
*     IS_REPREP_ID                   =
      I_BYPASSING_BUFFER             = 'X'
      I_BUFFER_ACTIVE                = ' '
*   IMPORTING
*     E_EXIT_CAUSED_BY_CALLER        =
*     ES_EXIT_CAUSED_BY_USER         =
    tables
      t_outtab_header                = headertab
      t_outtab_item                  = itemtab
  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.

xincheng24 发表于 2007-7-25 12:41:18

4. 程序代码: 多内表的ALV显示(display more than one internal table in ALV)
此程序将通过ALV显示两张内表的数据(MM模块)。

TABLES : ekko,
         ekpo.

SELECT-OPTIONS: s_ebeln FOR ekko-ebeln.

TYPE-POOLS: slis.

DATA: BEGIN OF headertab OCCURS 0,
       ebeln LIKE ekko-ebeln,
       bstyp LIKE ekko-bstyp,
       bsart LIKE ekko-bsart,
       statu LIKE ekko-statu,
      END OF headertab.

DATA: BEGIN OF itemtab OCCURS 0,
       ebeln LIKE ekpo-ebeln,
       ebelp LIKE ekpo-ebelp,
       matnr LIKE ekpo-matnr,
       werks LIKE ekpo-werks,
       menge LIKE ekpo-menge,
       netpr LIKE ekpo-netpr,
       peinh LIKE ekpo-peinh,
       netwr LIKE ekpo-netwr,
      END OF itemtab.

DATA: i_fieldcat  TYPE slis_t_fieldcat_alv,
      i_fieldcat1 TYPE slis_t_fieldcat_alv.

DATA: v_repid LIKE sy-repid,
      v_layout TYPE slis_layout_alv,
      v_events TYPE slis_t_event,
      v_print TYPE slis_print_alv.


START-OF-SELECTION.

  v_repid = sy-repid.

  SELECT ebeln bstyp bsart statu
     INTO TABLE headertab
     FROM ekko
     WHERE ebeln IN s_ebeln.
  IF NOT headertab[] IS INITIAL.
    SELECT ebeln ebelp matnr werks menge netpr peinh netwr
       INTO TABLE itemtab
       FROM ekpo
       FOR ALL ENTRIES IN headertab
       WHERE ebeln = headertab-ebeln.
  ENDIF.


  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name               =  v_repid
      i_internal_tabname           = 'HEADERTAB'
*     I_STRUCTURE_NAME             =
*     I_CLIENT_NEVER_DISPLAY       = 'X'
      i_inclname                   = v_repid
      i_bypassing_buffer           = 'X'
      i_buffer_active              = ' '
    CHANGING
      ct_fieldcat                  = i_fieldcat
    EXCEPTIONS
      inconsistent_interface       = 1
      program_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.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name               =  v_repid
      i_internal_tabname           = 'ITEMTAB'
*     I_STRUCTURE_NAME             =
*     I_CLIENT_NEVER_DISPLAY       = 'X'
      i_inclname                   = v_repid
      i_bypassing_buffer           = 'X'
      i_buffer_active              = ' '
    CHANGING
      ct_fieldcat                  = i_fieldcat1
    EXCEPTIONS
      inconsistent_interface       = 1
      program_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.

  CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
    EXPORTING
      i_callback_program             = v_repid
*     I_CALLBACK_PF_STATUS_SET       = ' '
*     I_CALLBACK_USER_COMMAND        = ' '
*     IT_EXCLUDING                   =
         .

  IF NOT headertab[] IS INITIAL.
    CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
      EXPORTING
        is_layout                        = v_layout
        it_fieldcat                      = i_fieldcat
        i_tabname                        = 'HEADERTAB'
        it_events                        = v_events
*       IT_SORT                          =
*       I_TEXT                           = ' '
      TABLES
        t_outtab                         = headertab
      EXCEPTIONS
        program_error                    = 1
        maximum_of_appends_reached       = 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.

  ENDIF.

  IF NOT itemtab[] IS INITIAL.

    CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
      EXPORTING
        is_layout                        = v_layout
        it_fieldcat                      = i_fieldcat1
        i_tabname                        = 'ITEMTAB'
        it_events                        = v_events
*       IT_SORT                          =
*       I_TEXT                           = ' '
      TABLES
        t_outtab                         = itemtab
      EXCEPTIONS
        program_error                    = 1
        maximum_of_appends_reached       = 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.

  ENDIF.

  IF NOT headertab[] IS INITIAL OR
     NOT itemtab[] IS INITIAL.

    CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'
*    EXPORTING
*      I_INTERFACE_CHECK             = ' '
*      IS_PRINT                      =
*      I_SCREEN_START_COLUMN         = 0
*      I_SCREEN_START_LINE           = 0
*      I_SCREEN_END_COLUMN           = 0
*      I_SCREEN_END_LINE             = 0
*    IMPORTING
*      E_EXIT_CAUSED_BY_CALLER       =
*      ES_EXIT_CAUSED_BY_USER        =
     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.

   ENDIF.

xincheng24 发表于 2007-7-25 12:41:50

5. 程序代码: ALV中的交互报表程序(interactive reporting in ALV)
此程序首先显示PO(Purchasing Order)的表头数据,点击PO的Number将展示相应的PO细节(MM模块)。

TABLES : ekko,
         ekpo.

SELECT-OPTIONS: s_ebeln FOR ekko-ebeln.

TYPE-POOLS: slis.

DATA: BEGIN OF headertab OCCURS 0,
       ebeln LIKE ekko-ebeln,
       bstyp LIKE ekko-bstyp,
       bsart LIKE ekko-bsart,
       statu LIKE ekko-statu,
      END OF headertab.

DATA: BEGIN OF itemtab OCCURS 0,
       ebeln LIKE ekpo-ebeln,
       ebelp LIKE ekpo-ebelp,
       matnr LIKE ekpo-matnr,
       werks LIKE ekpo-werks,
       menge LIKE ekpo-menge,
       netpr LIKE ekpo-netpr,
       peinh LIKE ekpo-peinh,
       netwr LIKE ekpo-netwr,
      END OF itemtab.

DATA: BEGIN OF level2 OCCURS 0,
         ebeln LIKE ekpo-ebeln,
         ebelp LIKE ekpo-ebelp,
         matnr LIKE ekpo-matnr,
         werks LIKE ekpo-werks,
         menge LIKE ekpo-menge,
         netpr LIKE ekpo-netpr,
         peinh LIKE ekpo-peinh,
         netwr LIKE ekpo-netwr,
        END OF level2.

DATA: i_fieldcat  TYPE slis_t_fieldcat_alv,
      i_fieldcat1 TYPE slis_t_fieldcat_alv.

DATA: v_repid LIKE sy-repid,
      v_layout TYPE slis_layout_alv,
      v_events TYPE slis_t_event,
      v_print TYPE slis_print_alv,
      l_fieldcat TYPE slis_fieldcat_alv.


START-OF-SELECTION.

  v_repid = sy-repid.


  SELECT ebeln bstyp bsart statu
     INTO TABLE headertab
     FROM ekko
     WHERE ebeln IN s_ebeln.

  IF NOT headertab[] IS INITIAL.
    SELECT ebeln ebelp matnr werks menge netpr peinh netwr
       INTO TABLE itemtab
       FROM ekpo
       FOR ALL ENTRIES IN headertab
       WHERE ebeln = headertab-ebeln.
  ENDIF.


  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name               =  v_repid
      i_internal_tabname           = 'HEADERTAB'
*     I_STRUCTURE_NAME             =
*     I_CLIENT_NEVER_DISPLAY       = 'X'
      i_inclname                   = v_repid
      i_bypassing_buffer           = 'X'
      i_buffer_active              = ' '
    CHANGING
      ct_fieldcat                  = i_fieldcat
    EXCEPTIONS
      inconsistent_interface       = 1
      program_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.

  LOOP AT i_fieldcat INTO l_fieldcat.
    CASE l_fieldcat-fieldname.
      WHEN 'EBELN'.
        l_fieldcat-hotspot = 'X'.
        MODIFY i_fieldcat FROM l_fieldcat.
    ENDCASE.
  ENDLOOP.

  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
    EXPORTING
*     I_INTERFACE_CHECK              = ' '
      i_bypassing_buffer             = 'X'
      i_buffer_active                = ' '
      i_callback_program             = v_repid
*     I_CALLBACK_PF_STATUS_SET       = ' '
      i_callback_user_command        = 'USER_COMMAND'
*     I_STRUCTURE_NAME               =
*     IS_LAYOUT                      =
      it_fieldcat                    = i_fieldcat
*     IT_EXCLUDING                   =
*     IT_SPECIAL_GROUPS              =
*     IT_SORT                        =
*     IT_FILTER                      =
*     IS_SEL_HIDE                    =
*     I_DEFAULT                      = 'X'
      i_save                         = 'A'
*     IS_VARIANT                     =
*     IT_EVENTS                      =
*     IT_EVENT_EXIT                  =
*     IS_PRINT                       =
*     IS_REPREP_ID                   =
*     I_SCREEN_START_COLUMN          = 0
*     I_SCREEN_START_LINE            = 0
*     I_SCREEN_END_COLUMN            = 0
*     I_SCREEN_END_LINE              = 0
*   IMPORTING
*     E_EXIT_CAUSED_BY_CALLER        =
*     ES_EXIT_CAUSED_BY_USER         =
    TABLES
      t_outtab                       = headertab
    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.

*&--------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->R_UCOMM    text
*      -->RS_SELFIELDtext
*---------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
                        rs_selfield TYPE slis_selfield.


  IF rs_selfield-fieldname EQ 'EBELN'.

    CASE r_ucomm.

      WHEN '&IC1'.

        READ TABLE headertab INDEX rs_selfield-tabindex.
        REFRESH level2.
        CLEAR level2.

        LOOP AT itemtab WHERE ebeln = headertab-ebeln.
          APPEND itemtab TO level2.
        ENDLOOP.

        CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
          EXPORTING
             i_program_name               =  v_repid
             i_internal_tabname           = 'LEVEL2'
*            I_STRUCTURE_NAME             =
*            I_CLIENT_NEVER_DISPLAY       = 'X'
             i_inclname                   =  v_repid
             i_bypassing_buffer           = 'X'
             i_buffer_active              = ' '
         CHANGING
             ct_fieldcat                  = i_fieldcat1
         EXCEPTIONS
             inconsistent_interface       = 1
             program_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.


        CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
          EXPORTING
*           I_INTERFACE_CHECK              = ' '
            i_bypassing_buffer             = 'X'
            i_buffer_active                = ' '
            i_callback_program             = v_repid
*           I_CALLBACK_PF_STATUS_SET       = ' '
*           I_CALLBACK_USER_COMMAND        =
*           I_STRUCTURE_NAME               =
*           IS_LAYOUT                      =
            it_fieldcat                    = i_fieldcat1
*           IT_EXCLUDING                   =
*           IT_SPECIAL_GROUPS              =
*           IT_SORT                        =
*           IT_FILTER                      =
*           IS_SEL_HIDE                    =
*           I_DEFAULT                      = 'X'
            i_save                         = 'A'
*           IS_VARIANT                     =
*           IT_EVENTS                      =
*           IT_EVENT_EXIT                  =
*           IS_PRINT                       =
*           IS_REPREP_ID                   =
*           I_SCREEN_START_COLUMN          = 0
*           I_SCREEN_START_LINE            = 0
*           I_SCREEN_END_COLUMN            = 0
*           I_SCREEN_END_LINE              = 0
*         IMPORTING
*           E_EXIT_CAUSED_BY_CALLER        =
*           ES_EXIT_CAUSED_BY_USER         =
          TABLES
            t_outtab                       = level2
          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.

    ENDCASE.

  ENDIF.

ENDFORM.                    "USER_COMMAND

whx1977 发表于 2007-7-25 12:45:44

支持,论坛就是需要这样的精神

lulu1212 发表于 2007-7-25 13:54:47

确实不错 .....

sapimg 发表于 2007-7-25 14:20:09

支持!

mypost888 发表于 2007-7-25 14:43:03

ding
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: ALV 编程实践(全) - ABAP DEMO 系列