您的位置:首页 > 其它

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

2014-09-11 09:53 579 查看
*&---------------------------------------------------------------------*

*& Report Z_XYX003

*&

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

*&

*&

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

REPORT z_xyx003.

TYPE-POOLS:slis.

TABLES: lfa1,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(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.

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

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(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. "ALV_TOP_OF_PAGE

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

*& Form ALV_END_OF_LIST

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

* text

*----------------------------------------------------------------------*

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. "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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: