天天看點

一個極好的ALV例子

  在網上找了個不錯的ALV例子,學習并整理了一下貼出具體的程式。

  REPORT  ZZWEI_ALV_EXAMPLE.

  TABLES:LFA1,"供應商主資料 (一般地區)

         EKPO,"采購憑證項目

         EINE,"采購資訊記錄 - 采購組織資料

         EINA."采購資訊記錄 - 一般資料

  INCLUDE <LIST>.

  TYPE-POOLS:SLIS.

  DATA:i_fieldcat_alv TYPE SLIS_T_FIELDCAT_ALV,"定義列标題(屬性資訊)

       i_layout TYPE SLIS_LAYOUT_ALV,

       i_fieldcat TYPE SLIS_FIELDCAT_ALV,"定義對象

       i_events TYPE SLIS_T_EVENT,"alv事件

       w_events LIKE LINE OF i_events,

       i_list_comments TYPE SLIS_T_LISTHEADER,"alv表單标題區域設定

       w_list_comments LIKE LINE OF i_list_comments,

       w_repid LIKE SY-REPID."目前程式

  *定義内表字段

  DATA:BEGIN OF hd_itab OCCURS 0,

        infnr LIKE EINE-INFNR,"采購資訊記錄

        ekorg LIKE EINE-EKORG,"采購組織

        matnr LIKE EINA-MATNR,"物料編号

        lifnr LIKE EINA-LIFNR,"供應商

        erdat LIKE EINE-ERDAT,"建立日期

        loekz LIKE EINE-LOEKZ,"删除标記

        urznr LIKE EINA-URZNR,"準許号

        color(4) TYPE C, "定義顔色

        aplfz LIKE EINE-APLFZ,"計劃交貨時間

        netpr LIKE EINE-NETPR,"淨價

        peinh LIKE EINE-PEINH,"機關價格

        dwjj LIKE EINE-NETPR,"機關淨價

        bprme LIKE EINE-BPRME,"訂單價格機關

        maktx LIKE MAKT-MAKTX,"物料名稱

        name1 LIKE LFA1-NAME1,"供應商名稱

        iicon LIKE ICON-NAME, "ICON 圖示

       END OF hd_itab.

  *選擇螢幕

  SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE t1.

    SELECT-OPTIONS:s_infnr FOR EINE-INFNR MEMORY ID INF."資訊記錄号碼

    PARAMETERS:PR_LOEKZ TYPE C AS CHECKBOX DEFAULT ''."顯示有删除标志的資訊記錄

    SELECT-OPTIONS:s_ekorg FOR EINE-EKORG MEMORY ID EKO."采購組織

    SELECT-OPTIONS:s_matnr FOR EINA-MATNR MEMORY ID MAT."物料編号

    SELECT-OPTIONS:s_lifnr FOR EINA-LIFNR MEMORY ID LIF."供應商編号

    SELECT-OPTIONS:s_erdat FOR EINA-ERDAT MEMORY ID erd."建立日期

    SELECT-OPTIONS:s_urznr FOR EINA-URZNR MEMORY ID urz."準許号

  SELECTION-SCREEN END OF BLOCK block1.

  *初始化事件

  INITIALIZATION.

        t1 = '采購查詢'.

  *螢幕開始事件

  START-OF-SELECTION.

     PERFORM getdata.

     PERFORM events_build.

     PERFORM layout_build.

     PERFORM fieldcat_build.

     PERFORM alv_display_data.

  *&--------------------------------------------------------------------*

  *&      Form  getdata

  FORM getdata.

    CLEAR hd_itab.

    CLEAR hd_itab[].

    IF PR_LOEKZ = ''.

      SELECT * FROM EINE INNER JOIN EINA ON EINE~INFNR = EINA~INFNR INTO CORRESPONDING FIELDS OF hd_itab

    WHERE EINE~INFNR IN s_infnr AND EINE~EKORG IN s_ekorg AND EINA~MATNR IN s_matnr AND EINA~LIFNR IN s_lifnr AND EINA~LOEKZ <> 'X' AND EINE~ERDAT IN s_erdat AND EINA~URZNR IN s_urznr

      ORDER BY EINE~INFNR DESCENDING.

        SELECT SINGLE MAKTX FROM MAKT INTO CORRESPONDING FIELDS OF hd_itab WHERE matnr = hd_itab-matnr.

        SELECT SINGLE NAME1 FROM LFA1 INTO CORRESPONDING FIELDS OF hd_itab WHERE lifnr = hd_itab-lifnr.

        APPEND hd_itab.

        CLEAR hd_itab.

      ENDSELECT.

    ELSE.

    WHERE EINE~INFNR IN s_infnr AND EINE~EKORG IN s_ekorg AND EINA~MATNR IN s_matnr AND EINA~LIFNR IN s_lifnr AND EINE~ERDAT IN s_erdat AND EINA~URZNR IN s_urznr

      ORDER BY EINE~INFNR DESCENDING.

        SELECT SINGLE MAKTX FROM MAKT INTO CORRESPONDING FIELDS OF hd_itab WHERE matnr = hd_itab-matnr.

        APPEND hd_itab.

      ENDSELECT.

   ENDIF.

   LOOP AT hd_itab.

     IF hd_itab-loekz = 'X'.

       hd_itab-color = 'C610'.

       hd_itab-iicon = ICON_INCOMPLETE. "ICON圖標資訊

     ELSE.

       hd_itab-iicon = ICON_CHECKED. "ICON圖標資訊

     ENDIF.

     hd_itab-dwjj = hd_itab-netpr / hd_itab-peinh.  "淨價/價格機關

     MODIFY hd_itab."更新

     CLEAR hd_itab."CLEAR HEADER LINE

   ENDLOOP.

  ENDFORM.

  *&---------------------------------------------------------------------------*

  *&    FORM LAYOUT BUILD

  FORM layout_build.

    i_layout-ZEBRA = 'X'. "ALV表格按斑馬線條紋顯示

    "i_layout-NO_VLINE = 'X'. "ALV表格顯示時無堅向線

    i_layout-COLWIDTH_OPTIMIZE = 'X'. "将ALV字段寬度設定為最優化

*    i_layout-detail_initial_lines = 'X'.

*    i_layout-detail_titlebar = '詳細内容'.

*    i_layout-box_fieldname  = 'LINE'.

    i_layout-INFO_FIELDNAME = 'COLOR'. "設置顏色FIELD

    i_layout-NO_COLHEAD = ''.

    w_repid = SY-REPID.

  *&    FORM FIELDCAT BUILD

  FORM fieldcat_build.

    REFRESH i_fieldcat_alv.

    CLEAR i_fieldcat.

    DATA column TYPE I VALUE 1.

    i_fieldcat-COL_POS = column.

    i_fieldcat-FIELDNAME = 'INFNR'.

    i_fieldcat-SELTEXT_S = '采購資訊記錄'.

    i_fieldcat-SELTEXT_M = '采購資訊記錄'.

    i_fieldcat-SELTEXT_L = '采購資訊記錄'.

    "i_fieldcat-reptext_ddic = '采購資訊記錄号'.

    i_fieldcat-LZERO = 'X'. "字義字段前導以"0"的形式顯示

    i_fieldcat-KEY = 'X'.

    i_fieldcat-HOTSPOT = 'X'."設定字段是否有熱點(熱點字段顯示有下劃線)

    i_fieldcat-EMPHASIZE = 'C300'."設定字段顔色

    APPEND i_fieldcat TO i_fieldcat_alv.

    column = column + 1.

    i_fieldcat-FIELDNAME = 'LIFNR'.

    i_fieldcat-SELTEXT_S = '供應商号碼'.

    i_fieldcat-SELTEXT_M = '供應商号碼'.

    i_fieldcat-SELTEXT_L = '供應商号碼'.

    "i_fieldcat-reptext_ddic = '供應商号碼'.

    i_fieldcat-LZERO = 'X'.

    i_fieldcat-HOTSPOT = 'X'.

    i_fieldcat-FIELDNAME = 'NAME1'.

    i_fieldcat-SELTEXT_S = '供應商名稱'.

    i_fieldcat-SELTEXT_M = '供應商名稱'.

    i_fieldcat-SELTEXT_L = '供應商名稱'.

    "i_fieldcat-reptext_ddic = '供應商名稱'.

    i_fieldcat-LZERO = 'X'.

    APPEND i_fieldcat TO i_fieldcat_alv.

    CLEAR i_fieldcat.

    i_fieldcat-FIELDNAME = 'MATNR'.

    i_fieldcat-SELTEXT_S = '物料編号'.

    i_fieldcat-SELTEXT_M = '物料編号'.

    i_fieldcat-SELTEXT_L = '物料編号'.

    "i_fieldcat-reptext_ddic = '物料編号'.

    i_fieldcat-KEY = 'X'.

    i_fieldcat-FIELDNAME = 'MAKTX'.

    i_fieldcat-SELTEXT_S = '物料名稱'.

    i_fieldcat-SELTEXT_M = '物料名稱'.

    i_fieldcat-SELTEXT_L = '物料名稱'.

    "i_fieldcat-reptext_ddic = '物料名稱'.

    i_fieldcat-FIELDNAME = 'NETPR'.

    i_fieldcat-SELTEXT_S = '淨價'.

    i_fieldcat-SELTEXT_M = '淨價'.

    i_fieldcat-SELTEXT_L = '淨價'.

    "i_fieldcat-reptext_ddic = '淨價'.

    i_fieldcat-FIELDNAME = 'PEINH'.

    i_fieldcat-SELTEXT_S = '價格機關'.

    i_fieldcat-SELTEXT_M = '價格機關'.

    i_fieldcat-SELTEXT_L = '價格機關'.

    "i_fieldcat-reptext_ddic = '價格機關'.

    i_fieldcat-FIELDNAME = 'DWJJ'.

    i_fieldcat-SELTEXT_S = '機關淨價'.

    i_fieldcat-SELTEXT_M = '機關淨價'.

    i_fieldcat-SELTEXT_L = '機關淨價'.

    "i_fieldcat-reptext_ddic = '機關淨價'.

    i_fieldcat-FIELDNAME = 'BPRME'.

    i_fieldcat-SELTEXT_S = '計量機關'.

    i_fieldcat-SELTEXT_M = '計量機關'.

    i_fieldcat-SELTEXT_L = '計量機關'.

    "i_fieldcat-reptext_ddic = '計量機關'.

    i_fieldcat-COL_POS = column.

    i_fieldcat-FIELDNAME = 'EKORG'.

    i_fieldcat-SELTEXT_S = '采購組織'.

    i_fieldcat-SELTEXT_M = '采購組織'.

    i_fieldcat-SELTEXT_L = '采購組織'.

    "i_fieldcat-reptext_ddic = '采購組織'.

    i_fieldcat-FIELDNAME = 'APLFZ'.

    i_fieldcat-SELTEXT_S = '計劃交貨時間'.

    i_fieldcat-SELTEXT_M = '計劃交貨時間'.

    i_fieldcat-SELTEXT_L = '計劃交貨時間'.

    "i_fieldcat-reptext_ddic = '計劃交貨時間'.

    i_fieldcat-Emphasize = 'C211'.

    i_fieldcat-FIELDNAME = 'ERDAT'.

    i_fieldcat-SELTEXT_S = '建立日期'.

    i_fieldcat-SELTEXT_M = '建立日期'.

    i_fieldcat-SELTEXT_L = '建立日期'.

    "i_fieldcat-reptext_ddic = '建立日期'.

    i_fieldcat-FIELDNAME = 'LOEKZ'.

    i_fieldcat-SELTEXT_S = '删除标志'.

    i_fieldcat-SELTEXT_M = '删除标志'.

    i_fieldcat-SELTEXT_L = '删除标志'.

    "i_fieldcat-reptext_ddic = '删除标志'.

    i_fieldcat-FIELDNAME = 'URZNR'.

    i_fieldcat-SELTEXT_S = '準許标記'.

    i_fieldcat-SELTEXT_M = '準許标記'.

    i_fieldcat-SELTEXT_L = '準許标記'.

    "i_fieldcat-reptext_ddic = '準許标記'.

    i_fieldcat-FIELDNAME = 'IICON'.

*    i_fieldcat-SELTEXT_S = '圖示'.

*    i_fieldcat-SELTEXT_M = 'ICON'.

    i_fieldcat-SELTEXT_L = 'ICON'.

    i_fieldcat-HOTSPOT = 'X'.

    i_fieldcat-ICON = 'X'.

    "i_fieldcat-LZERO = 'X'.

    "i_fieldcat-KEY = 'X'.

    "i_fieldcat-Emphasize = 'C211'.

  *&    FORM ALV DISPLAY DATA

  FORM alv_display_data.

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

     EXPORTING

        I_CALLBACK_PROGRAM                = w_repid

        I_GRID_TITLE                      = '采購資訊記錄彙總查詢'

        IS_LAYOUT                         = i_layout

        IT_FIELDCAT                       = i_fieldcat_alv[]

        IT_EVENTS                         = i_events[]

        "I_SAVE  = 'A'

        I_CALLBACK_USER_COMMAND           = 'USER_COMMAND' "USER_COMMAND EVENT

      TABLES

        T_OUTTAB                          = hd_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 user_command USING i_ucomm TYPE SY-UCOMM i_selfield TYPE SLIS_SELFIELD.

    CASE i_ucomm.

      WHEN '&IC1'.  "對于熱點連結,所對應的動作碼為"&IC1"

        IF i_selfield-FIELDNAME EQ 'INFNR'. "判斷使用者目前單擊的是哪列

          PERFORM call_tran USING i_selfield. "調用自定義事務

        ENDIF.

    ENDCASE.

  FORM call_tran USING i_selfield TYPE SLIS_SELFIELD.

    "SET SCREEN 0.  "傳回主螢幕

    READ TABLE hd_itab INDEX i_selfield-tabindex.  "i_selfield-tabindex 當擊行索引,從内表中提取資料

    IF SY-SUBRC = 0.

       SET PARAMETER ID 'MAT' FIELD hd_itab-MATNR. "MAT指參數ID

       SET PARAMETER ID 'LIF' FIELD hd_itab-LIFNR.

       SET PARAMETER ID 'EKO' FIELD hd_itab-EKORG.

       SET PARAMETER ID 'INF' FIELD hd_itab-INFNR.

       CALL TRANSACTION 'ME13'."AND SKIP FIRST SCREEN "調用其它事務 ME13是我們要調用的事務

  FORM ALV_TOP_OF_PAGE. "ALV表頭資訊

    CLEAR:i_list_comments.

    w_list_comments-typ = 'H'.

    w_list_comments-key = ''.

    w_list_comments-info = '采購資訊記錄查詢報表'.

    APPEND w_list_comments TO i_list_comments.

    CLEAR w_list_comments.

    DATA:date_temp(30) TYPE C.

    WRITE: SY-DATUM TO date_temp MM/DD/YYYY.

    CONCATENATE '日期:' date_temp INTO date_temp.

    CONCATENATE date_temp  '.   IT部' INTO date_temp.

    w_list_comments-typ = 'S'.

    w_list_comments-info = date_temp.

    APPEND w_list_comments TO i_list_comments.

    CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'  "輸出注釋

      EXPORTING

        IT_LIST_COMMENTARY       = i_list_comments

        I_LOGO                   = 'ENJOYSAP_LOGO'

        I_END_OF_LIST_GRID       = 'X'

*       I_ALV_FORM               =

              .

  FORM ALV_END_OF_LIST.

    CLEAR: i_list_comments.

*    w_list_comments-typ = 'S'.

*    w_list_comments-info = 'Create By IT DEPARTMENT'.

*    APPEND w_list_comments TO i_list_comments.

*    CLEAR w_list_comments.

*

*    CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

*      EXPORTING

*        IT_LIST_COMMENTARY       = i_list_comments

**        I_LOGO                   = 'ENJOYSAP_LOGO'

*        I_END_OF_LIST_GRID       = 'X'

**       I_ALV_FORM               =

*            .

    w_list_comments-info = '确認:________采購申請人:___________________'.

    w_list_comments-info = 'Create By Information Department'.

    DATA:data_temp(30) TYPE C.

    CONCATENATE '列印者:' SY-UNAME INTO data_temp.

    w_list_comments-info = data_temp.

    CLEAR w_list_comments.

    CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

        I_END_OF_LIST_GRID       = 'X'

            .

  FORM events_build.

    CALL FUNCTION 'REUSE_ALV_EVENTS_GET' "輸出一個内表類型是SLIS_T_EVENT,行項為SLIS_ALV_EVENT,包含兩個字段,一個是事件名稱,另一個是處理事件的FORM名稱 

     EXPORTING

       I_LIST_TYPE           = 0

     IMPORTING

       ET_EVENTS             = i_events

     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 i_events WITH KEY NAME = 'TOP_OF_PAGE' INTO w_events.

      MOVE 'ALV_TOP_OF_PAGE' TO w_events-form.

      MODIFY i_events FROM w_events INDEX SY-TABIX.

    READ TABLE i_events INTO w_events WITH KEY NAME = 'USER_COMMAND'.

    IF SY-SUBRC EQ 0.

      w_events-name = 'USER_COMMAND'.

      MODIFY i_events FROM w_events INDEX SY-TABIX.

    READ TABLE i_events WITH KEY NAME = 'END_OF_LIST' INTO w_events.

      MOVE 'ALV_END_OF_LIST' TO w_events-form.

*&---------------------------------------------------------------------*

*& Report  ZZWEI_ALV_EXAMPLE

*&

REPORT  ZZWEI_ALV_EXAMPLE.

TABLES:LFA1,"供應商主資料 (一般地區)

       EKPO,"采購憑證項目

       EINE,"采購資訊記錄 - 采購組織資料

       EINA."采購資訊記錄 - 一般資料

INCLUDE <LIST>.

TYPE-POOLS:SLIS.

DATA:i_fieldcat_alv TYPE SLIS_T_FIELDCAT_ALV,"定義列标題(屬性資訊)

     i_layout TYPE SLIS_LAYOUT_ALV,

     i_fieldcat TYPE SLIS_FIELDCAT_ALV,"定義對象

     i_events TYPE SLIS_T_EVENT,"alv事件

     w_events LIKE LINE OF i_events,

     i_list_comments TYPE SLIS_T_LISTHEADER,"alv表單标題區域設定

     w_list_comments LIKE LINE OF i_list_comments,

     w_repid LIKE SY-REPID."目前程式

*定義内表字段

DATA:BEGIN OF hd_itab OCCURS 0,

      infnr LIKE EINE-INFNR,"采購資訊記錄

      ekorg LIKE EINE-EKORG,"采購組織

      matnr LIKE EINA-MATNR,"物料編号

      lifnr LIKE EINA-LIFNR,"供應商

      erdat LIKE EINE-ERDAT,"建立日期

      loekz LIKE EINE-LOEKZ,"删除标記

      urznr LIKE EINA-URZNR,"準許号

      color(4) TYPE C, "定義顔色

      aplfz LIKE EINE-APLFZ,"計劃交貨時間

      netpr LIKE EINE-NETPR,"淨價

      peinh LIKE EINE-PEINH,"機關價格

      dwjj LIKE EINE-NETPR,"機關淨價

      bprme LIKE EINE-BPRME,"訂單價格機關

      maktx LIKE MAKT-MAKTX,"物料名稱

      name1 LIKE LFA1-NAME1,"供應商名稱

      iicon LIKE ICON-NAME, "ICON 圖示

     END OF hd_itab.

*選擇螢幕

SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE t1.

  SELECT-OPTIONS:s_infnr FOR EINE-INFNR MEMORY ID INF."資訊記錄号碼

  PARAMETERS:PR_LOEKZ TYPE C AS CHECKBOX DEFAULT ''."顯示有删除标志的資訊記錄

  SELECT-OPTIONS:s_ekorg FOR EINE-EKORG MEMORY ID EKO."采購組織

  SELECT-OPTIONS:s_matnr FOR EINA-MATNR MEMORY ID MAT."物料編号

  SELECT-OPTIONS:s_lifnr FOR EINA-LIFNR MEMORY ID LIF."供應商編号

  SELECT-OPTIONS:s_erdat FOR EINA-ERDAT MEMORY ID erd."建立日期

  SELECT-OPTIONS:s_urznr FOR EINA-URZNR MEMORY ID urz."準許号

SELECTION-SCREEN END OF BLOCK block1.

*初始化事件

INITIALIZATION.

      t1 = '采購查詢'.

*螢幕開始事件

START-OF-SELECTION.

   PERFORM getdata.

   PERFORM events_build.

   PERFORM layout_build.

   PERFORM fieldcat_build.

   PERFORM alv_display_data.

*&--------------------------------------------------------------------*

*&      Form  getdata

FORM getdata.

  CLEAR hd_itab.

  CLEAR hd_itab[].

  IF PR_LOEKZ = ''.

    SELECT * FROM EINE INNER JOIN EINA ON EINE~INFNR = EINA~INFNR INTO CORRESPONDING FIELDS OF hd_itab

    ORDER BY EINE~INFNR DESCENDING.

      SELECT SINGLE MAKTX FROM MAKT INTO CORRESPONDING FIELDS OF hd_itab WHERE matnr = hd_itab-matnr.

      SELECT SINGLE NAME1 FROM LFA1 INTO CORRESPONDING FIELDS OF hd_itab WHERE lifnr = hd_itab-lifnr.

      APPEND hd_itab.

      CLEAR hd_itab.

    ENDSELECT.

  ELSE.

 ENDIF.

 LOOP AT hd_itab.

   IF hd_itab-loekz = 'X'.

     hd_itab-color = 'C610'.

     hd_itab-iicon = ICON_INCOMPLETE. "ICON圖標資訊

   ELSE.

     hd_itab-iicon = ICON_CHECKED. "ICON圖標資訊

   ENDIF.

   hd_itab-dwjj = hd_itab-netpr / hd_itab-peinh.  "淨價/價格機關

   MODIFY hd_itab."更新

   CLEAR hd_itab."CLEAR HEADER LINE

 ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------------*

*&    FORM LAYOUT BUILD

FORM layout_build.

  i_layout-ZEBRA = 'X'. "ALV表格按斑馬線條紋顯示

  "i_layout-NO_VLINE = 'X'. "ALV表格顯示時無堅向線

  i_layout-COLWIDTH_OPTIMIZE = 'X'. "将ALV字段寬度設定為最優化

*  i_layout-detail_initial_lines = 'X'.

*  i_layout-detail_titlebar = '詳細内容'.

*  i_layout-box_fieldname  = 'LINE'.

  i_layout-INFO_FIELDNAME = 'COLOR'. "設置顏色FIELD

  i_layout-NO_COLHEAD = ''.

  w_repid = SY-REPID.

*&    FORM FIELDCAT BUILD

FORM fieldcat_build.

  REFRESH i_fieldcat_alv.

  CLEAR i_fieldcat.

  DATA column TYPE I VALUE 1.

  i_fieldcat-COL_POS = column.

  i_fieldcat-FIELDNAME = 'INFNR'.

  i_fieldcat-SELTEXT_S = '采購資訊記錄'.

  i_fieldcat-SELTEXT_M = '采購資訊記錄'.

  i_fieldcat-SELTEXT_L = '采購資訊記錄'.

  "i_fieldcat-reptext_ddic = '采購資訊記錄号'.

  i_fieldcat-LZERO = 'X'. "字義字段前導以"0"的形式顯示

  i_fieldcat-KEY = 'X'.

  i_fieldcat-HOTSPOT = 'X'."設定字段是否有熱點(熱點字段顯示有下劃線)

  i_fieldcat-EMPHASIZE = 'C300'."設定字段顔色

  APPEND i_fieldcat TO i_fieldcat_alv.

  column = column + 1.

  i_fieldcat-FIELDNAME = 'LIFNR'.

  i_fieldcat-SELTEXT_S = '供應商号碼'.

  i_fieldcat-SELTEXT_M = '供應商号碼'.

  i_fieldcat-SELTEXT_L = '供應商号碼'.

  "i_fieldcat-reptext_ddic = '供應商号碼'.

  i_fieldcat-LZERO = 'X'.

  i_fieldcat-HOTSPOT = 'X'.

  i_fieldcat-FIELDNAME = 'NAME1'.

  i_fieldcat-SELTEXT_S = '供應商名稱'.

  i_fieldcat-SELTEXT_M = '供應商名稱'.

  i_fieldcat-SELTEXT_L = '供應商名稱'.

  "i_fieldcat-reptext_ddic = '供應商名稱'.

  i_fieldcat-FIELDNAME = 'MATNR'.

  i_fieldcat-SELTEXT_S = '物料編号'.

  i_fieldcat-SELTEXT_M = '物料編号'.

  i_fieldcat-SELTEXT_L = '物料編号'.

  "i_fieldcat-reptext_ddic = '物料編号'.

  i_fieldcat-FIELDNAME = 'MAKTX'.

  i_fieldcat-SELTEXT_S = '物料名稱'.

  i_fieldcat-SELTEXT_M = '物料名稱'.

  i_fieldcat-SELTEXT_L = '物料名稱'.

  "i_fieldcat-reptext_ddic = '物料名稱'.

  i_fieldcat-FIELDNAME = 'NETPR'.

  i_fieldcat-SELTEXT_S = '淨價'.

  i_fieldcat-SELTEXT_M = '淨價'.

  i_fieldcat-SELTEXT_L = '淨價'.

  "i_fieldcat-reptext_ddic = '淨價'.

  i_fieldcat-FIELDNAME = 'PEINH'.

  i_fieldcat-SELTEXT_S = '價格機關'.

  i_fieldcat-SELTEXT_M = '價格機關'.

  i_fieldcat-SELTEXT_L = '價格機關'.

  "i_fieldcat-reptext_ddic = '價格機關'.

  i_fieldcat-FIELDNAME = 'DWJJ'.

  i_fieldcat-SELTEXT_S = '機關淨價'.

  i_fieldcat-SELTEXT_M = '機關淨價'.

  i_fieldcat-SELTEXT_L = '機關淨價'.

  "i_fieldcat-reptext_ddic = '機關淨價'.

  i_fieldcat-FIELDNAME = 'BPRME'.

  i_fieldcat-SELTEXT_S = '計量機關'.

  i_fieldcat-SELTEXT_M = '計量機關'.

  i_fieldcat-SELTEXT_L = '計量機關'.

  "i_fieldcat-reptext_ddic = '計量機關'.

  i_fieldcat-FIELDNAME = 'EKORG'.

  i_fieldcat-SELTEXT_S = '采購組織'.

  i_fieldcat-SELTEXT_M = '采購組織'.

  i_fieldcat-SELTEXT_L = '采購組織'.

  "i_fieldcat-reptext_ddic = '采購組織'.

  i_fieldcat-FIELDNAME = 'APLFZ'.

  i_fieldcat-SELTEXT_S = '計劃交貨時間'.

  i_fieldcat-SELTEXT_M = '計劃交貨時間'.

  i_fieldcat-SELTEXT_L = '計劃交貨時間'.

  "i_fieldcat-reptext_ddic = '計劃交貨時間'.

  i_fieldcat-Emphasize = 'C211'.

  i_fieldcat-FIELDNAME = 'ERDAT'.

  i_fieldcat-SELTEXT_S = '建立日期'.

  i_fieldcat-SELTEXT_M = '建立日期'.

  i_fieldcat-SELTEXT_L = '建立日期'.

  "i_fieldcat-reptext_ddic = '建立日期'.

  i_fieldcat-FIELDNAME = 'LOEKZ'.

  i_fieldcat-SELTEXT_S = '删除标志'.

  i_fieldcat-SELTEXT_M = '删除标志'.

  i_fieldcat-SELTEXT_L = '删除标志'.

  "i_fieldcat-reptext_ddic = '删除标志'.

  i_fieldcat-FIELDNAME = 'URZNR'.

  i_fieldcat-SELTEXT_S = '準許标記'.

  i_fieldcat-SELTEXT_M = '準許标記'.

  i_fieldcat-SELTEXT_L = '準許标記'.

  "i_fieldcat-reptext_ddic = '準許标記'.

  i_fieldcat-FIELDNAME = 'IICON'.

*  i_fieldcat-SELTEXT_S = '圖示'.

*  i_fieldcat-SELTEXT_M = 'ICON'.

  i_fieldcat-SELTEXT_L = 'ICON'.

  i_fieldcat-ICON = 'X'.

  "i_fieldcat-LZERO = 'X'.

  "i_fieldcat-KEY = 'X'.

  "i_fieldcat-Emphasize = 'C211'.

*&    FORM ALV DISPLAY DATA

FORM alv_display_data.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

   EXPORTING

      I_CALLBACK_PROGRAM                = w_repid

      I_GRID_TITLE                      = '采購資訊記錄彙總查詢'

      IS_LAYOUT                         = i_layout

      IT_FIELDCAT                       = i_fieldcat_alv[]

      IT_EVENTS                         = i_events[]

      "I_SAVE  = 'A'

      I_CALLBACK_USER_COMMAND           = 'USER_COMMAND' "USER_COMMAND EVENT

    TABLES

      T_OUTTAB                          = hd_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 user_command USING i_ucomm TYPE SY-UCOMM i_selfield TYPE SLIS_SELFIELD.

  CASE i_ucomm.

    WHEN '&IC1'.  "對于熱點連結,所對應的動作碼為"&IC1"

      IF i_selfield-FIELDNAME EQ 'INFNR'. "判斷使用者目前單擊的是哪列

        PERFORM call_tran USING i_selfield. "調用自定義事務

      ENDIF.

  ENDCASE.

FORM call_tran USING i_selfield TYPE SLIS_SELFIELD.

  "SET SCREEN 0.  "傳回主螢幕

  READ TABLE hd_itab INDEX i_selfield-tabindex.  "i_selfield-tabindex 當擊行索引,從内表中提取資料

  IF SY-SUBRC = 0.

     SET PARAMETER ID 'MAT' FIELD hd_itab-MATNR. "MAT指參數ID

     SET PARAMETER ID 'LIF' FIELD hd_itab-LIFNR.

     SET PARAMETER ID 'EKO' FIELD hd_itab-EKORG.

     SET PARAMETER ID 'INF' FIELD hd_itab-INFNR.

     CALL TRANSACTION 'ME13'."AND SKIP FIRST SCREEN "調用其它事務 ME13是我們要調用的事務

FORM ALV_TOP_OF_PAGE. "ALV表頭資訊

  CLEAR:i_list_comments.

  w_list_comments-typ = 'H'.

  w_list_comments-key = ''.

  w_list_comments-info = '采購資訊記錄查詢報表'.

  APPEND w_list_comments TO i_list_comments.

  CLEAR w_list_comments.

  DATA:date_temp(30) TYPE C.

  WRITE: SY-DATUM TO date_temp MM/DD/YYYY.

  CONCATENATE '日期:' date_temp INTO date_temp.

  CONCATENATE date_temp  '.   IT部' INTO date_temp.

  w_list_comments-typ = 'S'.

  w_list_comments-info = date_temp.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'  "輸出注釋

    EXPORTING

      IT_LIST_COMMENTARY       = i_list_comments

      I_LOGO                   = 'ENJOYSAP_LOGO'

      I_END_OF_LIST_GRID       = 'X'

*     I_ALV_FORM               =

FORM ALV_END_OF_LIST.

  CLEAR: i_list_comments.

*  w_list_comments-typ = 'S'.

*  w_list_comments-info = 'Create By IT DEPARTMENT'.

*  APPEND w_list_comments TO i_list_comments.

*  CLEAR w_list_comments.

*  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

*    EXPORTING

*      IT_LIST_COMMENTARY       = i_list_comments

**      I_LOGO                   = 'ENJOYSAP_LOGO'

*      I_END_OF_LIST_GRID       = 'X'

**     I_ALV_FORM               =

  w_list_comments-info = '确認:________采購申請人:___________________'.

  w_list_comments-info = 'Create By Information Department'.

  DATA:data_temp(30) TYPE C.

  CONCATENATE '列印者:' SY-UNAME INTO data_temp.

  w_list_comments-info = data_temp.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

FORM events_build.

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET' "輸出一個内表類型是SLIS_T_EVENT,行項為SLIS_ALV_EVENT,包含兩個字段,一個是事件名稱,另一個是處理事件的FORM名稱 

     I_LIST_TYPE           = 0

   IMPORTING

     ET_EVENTS             = i_events

     LIST_TYPE_WRONG       = 1

     OTHERS                = 2

    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  READ TABLE i_events WITH KEY NAME = 'TOP_OF_PAGE' INTO w_events.

    MOVE 'ALV_TOP_OF_PAGE' TO w_events-form.

    MODIFY i_events FROM w_events INDEX SY-TABIX.

  READ TABLE i_events INTO w_events WITH KEY NAME = 'USER_COMMAND'.

  IF SY-SUBRC EQ 0.

    w_events-name = 'USER_COMMAND'.

  READ TABLE i_events WITH KEY NAME = 'END_OF_LIST' INTO w_events.

    MOVE 'ALV_END_OF_LIST' TO w_events-form.

繼續閱讀