天天看点

一个极好的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.

继续阅读