一个很有意思漂亮的ABAP程序-采购信息记录查询报表

来源:互联网 发布:jquery ajax提交数据 编辑:程序博客网 时间:2024/06/06 18:15
*&---------------------------------------------------------------------*
*& Report  Z_XYX003
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  z_xyx003.
TYPE-POOLS:slis.
TABLESlfa1,ekpo,eine,eina.

INCLUDE <list>.
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(4TYPE 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.                    "getdata

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


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

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

*&---------------------------------------------------------------------*
*&      Form  user_command
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->I_UCOMM    text
*      -->I_SELFIELD text
*----------------------------------------------------------------------*
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.                    "user_command



*&---------------------------------------------------------------------*
*&      Form  call_tran
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->I_SELFIELD text
*----------------------------------------------------------------------*
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.                    "call_tran
*&---------------------------------------------------------------------*
*&      Form  ALV_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
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(30TYPE c.
  WRITEsy-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.                    "ALV_TOP_OF_PAGE

*&---------------------------------------------------------------------*
*&      Form  ALV_END_OF_LIST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM alv_end_of_list.
  CLEARi_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(30TYPE 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.                    "ALV_END_OF_LIST


*&---------------------------------------------------------------------*
*&      Form  events_build
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
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.                    "events_build
0 0
原创粉丝点击