zoukankan      html  css  js  c++  java
  • 一个极好的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 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.
          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 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.

       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.
      ENDFORM.



      *&---------------------------------------------------------------------------*
      *&    FORM FIELDCAT BUILD
      *&---------------------------------------------------------------------------*
      FORM fieldcat_build.
        REFRESH i_fieldcat_alv.
        CLEAR i_fieldcat.
        DATA column TYPE 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.
        CLEAR i_fieldcat.

        column = column + 1.
        i_fieldcat-COL_POS = column.
        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-KEY = 'X'.
        i_fieldcat-HOTSPOT = 'X'.
        APPEND i_fieldcat TO i_fieldcat_alv.
        CLEAR i_fieldcat.

        column = column + 1.
        i_fieldcat-COL_POS = column.
        i_fieldcat-FIELDNAME = 'NAME1'.
        i_fieldcat-SELTEXT_S = '供应商名称'.
        i_fieldcat-SELTEXT_M = '供应商名称'.
        i_fieldcat-SELTEXT_L = '供应商名称'.
        "i_fieldcat-reptext_ddic = '供应商名称'.
        i_fieldcat-LZERO = 'X'.
        i_fieldcat-KEY = 'X'.
        APPEND i_fieldcat TO i_fieldcat_alv.
        CLEAR i_fieldcat.

        column = column + 1.
        i_fieldcat-COL_POS = column.
        i_fieldcat-FIELDNAME = 'MATNR'.
        i_fieldcat-SELTEXT_S = '物料编号'.
        i_fieldcat-SELTEXT_M = '物料编号'.
        i_fieldcat-SELTEXT_L = '物料编号'.
        "i_fieldcat-reptext_ddic = '物料编号'.
        i_fieldcat-LZERO = 'X'.
        i_fieldcat-KEY = 'X'.
        APPEND i_fieldcat TO i_fieldcat_alv.
        CLEAR i_fieldcat.

        column = column + 1.
        i_fieldcat-COL_POS = column.
        i_fieldcat-FIELDNAME = 'MAKTX'.
        i_fieldcat-SELTEXT_S = '物料名称'.
        i_fieldcat-SELTEXT_M = '物料名称'.
        i_fieldcat-SELTEXT_L = '物料名称'.
        "i_fieldcat-reptext_ddic = '物料名称'.
        i_fieldcat-LZERO = 'X'.
        i_fieldcat-KEY = 'X'.
        APPEND i_fieldcat TO i_fieldcat_alv.
        CLEAR i_fieldcat.

        column = column + 1.
        i_fieldcat-COL_POS = column.
        i_fieldcat-FIELDNAME = 'NETPR'.
        i_fieldcat-SELTEXT_S = '净价'.
        i_fieldcat-SELTEXT_M = '净价'.
        i_fieldcat-SELTEXT_L = '净价'.
        "i_fieldcat-reptext_ddic = '净价'.
        i_fieldcat-LZERO = 'X'.
        i_fieldcat-KEY = 'X'.
        APPEND i_fieldcat TO i_fieldcat_alv.
        CLEAR i_fieldcat.

        column = column + 1.
        i_fieldcat-COL_POS = column.
        i_fieldcat-FIELDNAME = 'PEINH'.
        i_fieldcat-SELTEXT_S = '价格单位'.
        i_fieldcat-SELTEXT_M = '价格单位'.
        i_fieldcat-SELTEXT_L = '价格单位'.
        "i_fieldcat-reptext_ddic = '价格单位'.
        i_fieldcat-LZERO = 'X'.
        i_fieldcat-KEY = 'X'.
        APPEND i_fieldcat TO i_fieldcat_alv.
        CLEAR i_fieldcat.

        column = column + 1.
        i_fieldcat-COL_POS = column.
        i_fieldcat-FIELDNAME = 'DWJJ'.
        i_fieldcat-SELTEXT_S = '单位净价'.
        i_fieldcat-SELTEXT_M = '单位净价'.
        i_fieldcat-SELTEXT_L = '单位净价'.
        "i_fieldcat-reptext_ddic = '单位净价'.
        i_fieldcat-LZERO = 'X'.
        i_fieldcat-KEY = 'X'.
        APPEND i_fieldcat TO i_fieldcat_alv.
        CLEAR i_fieldcat.

        column = column + 1.
        i_fieldcat-COL_POS = column.
        i_fieldcat-FIELDNAME = 'BPRME'.
        i_fieldcat-SELTEXT_S = '计量单位'.
        i_fieldcat-SELTEXT_M = '计量单位'.
        i_fieldcat-SELTEXT_L = '计量单位'.
        "i_fieldcat-reptext_ddic = '计量单位'.
        i_fieldcat-LZERO = 'X'.
        i_fieldcat-KEY = 'X'.
        APPEND i_fieldcat TO i_fieldcat_alv.
        CLEAR i_fieldcat.

        column = column + 1.
        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-LZERO = 'X'.
        i_fieldcat-KEY = 'X'.
        APPEND i_fieldcat TO i_fieldcat_alv.
        CLEAR i_fieldcat.

        column = column + 1.
        i_fieldcat-COL_POS = column.
        i_fieldcat-FIELDNAME = 'APLFZ'.
        i_fieldcat-SELTEXT_S = '计划交货时间'.
        i_fieldcat-SELTEXT_M = '计划交货时间'.
        i_fieldcat-SELTEXT_L = '计划交货时间'.
        "i_fieldcat-reptext_ddic = '计划交货时间'.
        i_fieldcat-LZERO = 'X'.
        i_fieldcat-KEY = 'X'.
        i_fieldcat-Emphasize = 'C211'.
        APPEND i_fieldcat TO i_fieldcat_alv.
        CLEAR i_fieldcat.

        column = column + 1.
        i_fieldcat-COL_POS = column.
        i_fieldcat-FIELDNAME = 'ERDAT'.
        i_fieldcat-SELTEXT_S = '创建日期'.
        i_fieldcat-SELTEXT_M = '创建日期'.
        i_fieldcat-SELTEXT_L = '创建日期'.
        "i_fieldcat-reptext_ddic = '创建日期'.
        i_fieldcat-LZERO = 'X'.
        i_fieldcat-KEY = 'X'.
        APPEND i_fieldcat TO i_fieldcat_alv.
        CLEAR i_fieldcat.

        column = column + 1.
        i_fieldcat-COL_POS = column.
        i_fieldcat-FIELDNAME = 'LOEKZ'.
        i_fieldcat-SELTEXT_S = '删除标志'.
        i_fieldcat-SELTEXT_M = '删除标志'.
        i_fieldcat-SELTEXT_L = '删除标志'.
        "i_fieldcat-reptext_ddic = '删除标志'.
        i_fieldcat-LZERO = 'X'.
        i_fieldcat-KEY = 'X'.
        APPEND i_fieldcat TO i_fieldcat_alv.
        CLEAR i_fieldcat.

        column = column + 1.
        i_fieldcat-COL_POS = column.
        i_fieldcat-FIELDNAME = 'URZNR'.
        i_fieldcat-SELTEXT_S = '批准标记'.
        i_fieldcat-SELTEXT_M = '批准标记'.
        i_fieldcat-SELTEXT_L = '批准标记'.
        "i_fieldcat-reptext_ddic = '批准标记'.
        i_fieldcat-LZERO = 'X'.
        i_fieldcat-KEY = 'X'.
        i_fieldcat-Emphasize = 'C211'.
        APPEND i_fieldcat TO i_fieldcat_alv.
        CLEAR i_fieldcat.

        column = column + 1.
        i_fieldcat-COL_POS = column.
        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-reptext_ddic = '批准标记'.
        "i_fieldcat-LZERO = 'X'.
        "i_fieldcat-KEY = 'X'.
        "i_fieldcat-Emphasize = 'C211'.
        APPEND i_fieldcat TO i_fieldcat_alv.
        CLEAR i_fieldcat.

      ENDFORM.


      *&---------------------------------------------------------------------------*
      *&    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.

      ENDFORM.

      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.
      ENDFORM.



      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是我们要调用的事务
        ENDIF.
      ENDFORM.


      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-key = ''.
        w_list_comments-info = date_temp.
        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               =
                  .
      ENDFORM.

      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               =
    *            .

        CLEAR:i_list_comments.
        w_list_comments-typ = 'S'.
        w_list_comments-info = '确认:________采购申请人:___________________'.
        APPEND w_list_comments TO i_list_comments.
        CLEAR w_list_comments.

        w_list_comments-typ = 'S'.
        w_list_comments-info = 'Create By Information Department'.
        APPEND w_list_comments TO i_list_comments.
        CLEAR w_list_comments.
     
        DATA:data_temp(30) TYPE C.
        CONCATENATE '打印者:' SY-UNAME INTO data_temp.
        w_list_comments-typ = 'S'.
        w_list_comments-info = data_temp.
        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               =
                .
      ENDFORM.


      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.
        IF SY-SUBRC = 0.
          MOVE 'ALV_TOP_OF_PAGE' TO w_events-form.
          MODIFY i_events FROM w_events INDEX SY-TABIX.
        ENDIF.

        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.
        ENDIF.

        READ TABLE i_events WITH KEY NAME = 'END_OF_LIST' INTO w_events.
        IF SY-SUBRC = 0.
          MOVE 'ALV_END_OF_LIST' TO w_events-form.
          MODIFY i_events FROM w_events INDEX SY-TABIX.
        ENDIF.

      ENDFORM.

    *&---------------------------------------------------------------------*
    *& 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 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.
        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 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.

     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.
    ENDFORM.



    *&---------------------------------------------------------------------------*
    *&    FORM FIELDCAT BUILD
    *&---------------------------------------------------------------------------*
    FORM fieldcat_build.
      REFRESH i_fieldcat_alv.
      CLEAR i_fieldcat.
      DATA column TYPE 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.
      CLEAR i_fieldcat.

      column = column + 1.
      i_fieldcat-COL_POS = column.
      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-KEY = 'X'.
      i_fieldcat-HOTSPOT = 'X'.
      APPEND i_fieldcat TO i_fieldcat_alv.
      CLEAR i_fieldcat.

      column = column + 1.
      i_fieldcat-COL_POS = column.
      i_fieldcat-FIELDNAME = 'NAME1'.
      i_fieldcat-SELTEXT_S = '供应商名称'.
      i_fieldcat-SELTEXT_M = '供应商名称'.
      i_fieldcat-SELTEXT_L = '供应商名称'.
      "i_fieldcat-reptext_ddic = '供应商名称'.
      i_fieldcat-LZERO = 'X'.
      i_fieldcat-KEY = 'X'.
      APPEND i_fieldcat TO i_fieldcat_alv.
      CLEAR i_fieldcat.

      column = column + 1.
      i_fieldcat-COL_POS = column.
      i_fieldcat-FIELDNAME = 'MATNR'.
      i_fieldcat-SELTEXT_S = '物料编号'.
      i_fieldcat-SELTEXT_M = '物料编号'.
      i_fieldcat-SELTEXT_L = '物料编号'.
      "i_fieldcat-reptext_ddic = '物料编号'.
      i_fieldcat-LZERO = 'X'.
      i_fieldcat-KEY = 'X'.
      APPEND i_fieldcat TO i_fieldcat_alv.
      CLEAR i_fieldcat.

      column = column + 1.
      i_fieldcat-COL_POS = column.
      i_fieldcat-FIELDNAME = 'MAKTX'.
      i_fieldcat-SELTEXT_S = '物料名称'.
      i_fieldcat-SELTEXT_M = '物料名称'.
      i_fieldcat-SELTEXT_L = '物料名称'.
      "i_fieldcat-reptext_ddic = '物料名称'.
      i_fieldcat-LZERO = 'X'.
      i_fieldcat-KEY = 'X'.
      APPEND i_fieldcat TO i_fieldcat_alv.
      CLEAR i_fieldcat.

      column = column + 1.
      i_fieldcat-COL_POS = column.
      i_fieldcat-FIELDNAME = 'NETPR'.
      i_fieldcat-SELTEXT_S = '净价'.
      i_fieldcat-SELTEXT_M = '净价'.
      i_fieldcat-SELTEXT_L = '净价'.
      "i_fieldcat-reptext_ddic = '净价'.
      i_fieldcat-LZERO = 'X'.
      i_fieldcat-KEY = 'X'.
      APPEND i_fieldcat TO i_fieldcat_alv.
      CLEAR i_fieldcat.

      column = column + 1.
      i_fieldcat-COL_POS = column.
      i_fieldcat-FIELDNAME = 'PEINH'.
      i_fieldcat-SELTEXT_S = '价格单位'.
      i_fieldcat-SELTEXT_M = '价格单位'.
      i_fieldcat-SELTEXT_L = '价格单位'.
      "i_fieldcat-reptext_ddic = '价格单位'.
      i_fieldcat-LZERO = 'X'.
      i_fieldcat-KEY = 'X'.
      APPEND i_fieldcat TO i_fieldcat_alv.
      CLEAR i_fieldcat.

      column = column + 1.
      i_fieldcat-COL_POS = column.
      i_fieldcat-FIELDNAME = 'DWJJ'.
      i_fieldcat-SELTEXT_S = '单位净价'.
      i_fieldcat-SELTEXT_M = '单位净价'.
      i_fieldcat-SELTEXT_L = '单位净价'.
      "i_fieldcat-reptext_ddic = '单位净价'.
      i_fieldcat-LZERO = 'X'.
      i_fieldcat-KEY = 'X'.
      APPEND i_fieldcat TO i_fieldcat_alv.
      CLEAR i_fieldcat.

      column = column + 1.
      i_fieldcat-COL_POS = column.
      i_fieldcat-FIELDNAME = 'BPRME'.
      i_fieldcat-SELTEXT_S = '计量单位'.
      i_fieldcat-SELTEXT_M = '计量单位'.
      i_fieldcat-SELTEXT_L = '计量单位'.
      "i_fieldcat-reptext_ddic = '计量单位'.
      i_fieldcat-LZERO = 'X'.
      i_fieldcat-KEY = 'X'.
      APPEND i_fieldcat TO i_fieldcat_alv.
      CLEAR i_fieldcat.

      column = column + 1.
      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-LZERO = 'X'.
      i_fieldcat-KEY = 'X'.
      APPEND i_fieldcat TO i_fieldcat_alv.
      CLEAR i_fieldcat.

      column = column + 1.
      i_fieldcat-COL_POS = column.
      i_fieldcat-FIELDNAME = 'APLFZ'.
      i_fieldcat-SELTEXT_S = '计划交货时间'.
      i_fieldcat-SELTEXT_M = '计划交货时间'.
      i_fieldcat-SELTEXT_L = '计划交货时间'.
      "i_fieldcat-reptext_ddic = '计划交货时间'.
      i_fieldcat-LZERO = 'X'.
      i_fieldcat-KEY = 'X'.
      i_fieldcat-Emphasize = 'C211'.
      APPEND i_fieldcat TO i_fieldcat_alv.
      CLEAR i_fieldcat.

      column = column + 1.
      i_fieldcat-COL_POS = column.
      i_fieldcat-FIELDNAME = 'ERDAT'.
      i_fieldcat-SELTEXT_S = '创建日期'.
      i_fieldcat-SELTEXT_M = '创建日期'.
      i_fieldcat-SELTEXT_L = '创建日期'.
      "i_fieldcat-reptext_ddic = '创建日期'.
      i_fieldcat-LZERO = 'X'.
      i_fieldcat-KEY = 'X'.
      APPEND i_fieldcat TO i_fieldcat_alv.
      CLEAR i_fieldcat.

      column = column + 1.
      i_fieldcat-COL_POS = column.
      i_fieldcat-FIELDNAME = 'LOEKZ'.
      i_fieldcat-SELTEXT_S = '删除标志'.
      i_fieldcat-SELTEXT_M = '删除标志'.
      i_fieldcat-SELTEXT_L = '删除标志'.
      "i_fieldcat-reptext_ddic = '删除标志'.
      i_fieldcat-LZERO = 'X'.
      i_fieldcat-KEY = 'X'.
      APPEND i_fieldcat TO i_fieldcat_alv.
      CLEAR i_fieldcat.

      column = column + 1.
      i_fieldcat-COL_POS = column.
      i_fieldcat-FIELDNAME = 'URZNR'.
      i_fieldcat-SELTEXT_S = '批准标记'.
      i_fieldcat-SELTEXT_M = '批准标记'.
      i_fieldcat-SELTEXT_L = '批准标记'.
      "i_fieldcat-reptext_ddic = '批准标记'.
      i_fieldcat-LZERO = 'X'.
      i_fieldcat-KEY = 'X'.
      i_fieldcat-Emphasize = 'C211'.
      APPEND i_fieldcat TO i_fieldcat_alv.
      CLEAR i_fieldcat.

      column = column + 1.
      i_fieldcat-COL_POS = column.
      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-reptext_ddic = '批准标记'.
      "i_fieldcat-LZERO = 'X'.
      "i_fieldcat-KEY = 'X'.
      "i_fieldcat-Emphasize = 'C211'.
      APPEND i_fieldcat TO i_fieldcat_alv.
      CLEAR i_fieldcat.

    ENDFORM.


    *&---------------------------------------------------------------------------*
    *&    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.

    ENDFORM.

    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.
    ENDFORM.



    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是我们要调用的事务
      ENDIF.
    ENDFORM.


    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-key = ''.
      w_list_comments-info = date_temp.
      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               =
                .

    ENDFORM.

    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               =
    *            .

      CLEAR:i_list_comments.
      w_list_comments-typ = 'S'.
      w_list_comments-info = '确认:________采购申请人:___________________'.
      APPEND w_list_comments TO i_list_comments.
      CLEAR w_list_comments.

      w_list_comments-typ = 'S'.
      w_list_comments-info = 'Create By Information Department'.
      APPEND w_list_comments TO i_list_comments.
      CLEAR w_list_comments.
     
      DATA:data_temp(30) TYPE C.
      CONCATENATE '打印者:' SY-UNAME INTO data_temp.
      w_list_comments-typ = 'S'.
      w_list_comments-info = data_temp.
      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               =
                .

    ENDFORM.


    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.

      IF SY-SUBRC = 0.
        MOVE 'ALV_TOP_OF_PAGE' TO w_events-form.
        MODIFY i_events FROM w_events INDEX SY-TABIX.
      ENDIF.

      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.
      ENDIF.

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

      IF SY-SUBRC = 0.
        MOVE 'ALV_END_OF_LIST' TO w_events-form.
        MODIFY i_events FROM w_events INDEX SY-TABIX.
      ENDIF.

    ENDFORM.

  • 相关阅读:
    ActiveMQ之Topic
    ActiveMQ之Queue
    ActiveMQ.xml文件的主要配置
    koa/redux middleware 深入解析
    js在工作中遇到的一些问题
    rxjs-流式编程
    端到端测试工具--testcafe
    js match函数注意
    深入js正则
    滚动联动-单独滚动与文档滚动
  • 原文地址:https://www.cnblogs.com/foxting/p/2674753.html
Copyright © 2011-2022 走看看