壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13077|回复: 55

[ABAP资料区] ALV 编程实践(全)- ABAP DEMO 系列

    [复制链接]
发表于 2007/7/26 10:00:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

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

今天我将给出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)

ALV.doc

129.5 KB, 下载次数: 369, 下载积分: 努力值 -5 点

ALV

 楼主| 发表于 2007/7/26 10:15:20 | 显示全部楼层
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
 楼主| 发表于 2007/7/26 10:15:41 | 显示全部楼层
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.
 楼主| 发表于 2007/7/26 10:16:00 | 显示全部楼层
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.
 楼主| 发表于 2007/7/26 10:16:28 | 显示全部楼层
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.
 楼主| 发表于 2007/7/26 10:17:06 | 显示全部楼层
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
发表于 2007/7/27 09:03:42 | 显示全部楼层
谢谢.楼主.
辛苦了.
加油..
 楼主| 发表于 2007/7/27 10:11:12 | 显示全部楼层
总算有人回复了,无比欣慰:02526g2
发表于 2007/8/23 16:18:45 | 显示全部楼层
楼主辛苦啊 ! 贴了这么多 !!!
一定下来看看
发表于 2007/9/8 21:45:33 | 显示全部楼层

33

33333333
发表于 2007/9/22 13:32:25 | 显示全部楼层

辛苦了

多谢楼主分享,收藏学习
发表于 2007/9/24 15:01:05 | 显示全部楼层
分享是一种美德,我也准备把比较常用的程序放在上面供大家分享
发表于 2007/9/24 16:28:25 | 显示全部楼层
顶顶顶顶
发表于 2007/9/25 09:29:46 | 显示全部楼层
楼主辛苦啊 ! 贴了这么多 !!!
发表于 2007/9/27 16:51:46 | 显示全部楼层
非常感谢搂主!!
发表于 2007/10/16 09:49:01 | 显示全部楼层
hao hao hao hao hao hao
发表于 2007/10/16 21:01:30 | 显示全部楼层
楼主辛苦啊 ! 贴了这么多 !!! 也希望大家也把好东西贴上去啊
发表于 2007/10/27 22:28:42 | 显示全部楼层
楼主真牛 懂得 这么多
发表于 2007/11/1 08:50:19 | 显示全部楼层
谢谢楼主! 希望能有更基础的ALV资料
发表于 2007/11/1 20:32:04 | 显示全部楼层
好东西, 谢谢啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 01:53 , Processed in 0.028317 second(s), 17 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表