此代码是转自老白博客。
*&--------------------------------------------------------------
*& Report ZTEST_NYJ3
*&
*&--------------------------------------------------------------
*&
*&
*&--------------------------------------------------------------
REPORT ZTEST_NYJ3.
TABLES: ekko.
DATA: BEGIN OF itab OCCURS 0 ,
flag ,
werks LIKE ekpo-werks,
ebeln LIKE ekko-ebeln,
lifnr LIKE ekko-lifnr,
name1 LIKE lfa1-name1,
telf1 LIKE lfa1-telf1,
aedat LIKE ekko-aedat,
* zzreagree LIKE ekko-zzreagree,
* zzredate LIKE ekko-zzredate,
* zzrereason LIKE ekko-zzrereason,
* zzreperson LIKE ekko-zzreperson,
* zzremode LIKE ekko-zzremode,
* zzpostatus LIKE ekko-zzpostatus,
END OF itab .
DATA: ok_code LIKE sy-ucomm .
DATA: l_valid(1) TYPE c.
DATA: go_grid TYPE REF TO cl_gui_alv_grid,
go_custom_container TYPE REF TO cl_gui_custom_container.
DATA: wa_container TYPE scrfname VALUE 'ALVDATA'.
"屏幕上的控件名称,不用定义也可以自己创建,下有说明
DATA:TEST LIKE ekko-ebeln.
DATA: gt_fieldcat TYPE lvc_t_fcat,
gs_fieldcat TYPE lvc_s_fcat,
gs_variant TYPE disvariant ,
gt_sort TYPE lvc_t_sort,
gs_sort TYPE lvc_s_sort,
gt_filt TYPE lvc_t_filt,
gs_filt TYPE lvc_s_filt,
ls_cell TYPE lvc_s_styl,
sla TYPE lvc_s_layo,
gt_f4 TYPE lvc_t_f4,
gs_f4 TYPE lvc_s_f4.
DATA: lt_exclude TYPE ui_functions.
PARAMETERS p_werks LIKE ekpo-werks OBLIGATORY.
SELECT-OPTIONS:
s_ebeln FOR ekko-ebeln ,
s_lifnr FOR ekko-lifnr,
s_aedat FOR ekko-aedat ."OBLIGATORY.
*DATA cl_gui_alv_grid.
*---------------------------------------------------------------
* CLASS lcl_event_receiver DEFINITION
*---------------------------------------------------------------
CLASS lcl_event_receiver DEFINITION."定义事件类包括F4和双击两种事件
PUBLIC SECTION.
METHODS handle_f4
FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
es_row_no
er_event_data
et_bad_cells.
METHODS catch_doubleclick
FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row
e_column
es_row_no .
ENDCLASS. "lcl_event_receiver DEFINITION
*---------------------------------------------------------------
* CLASS lcl_event_receiver IMPLEMENTATION
*---------------------------------------------------------------
CLASS lcl_event_receiver IMPLEMENTATION."事件的执行调用相应的处理过程
METHOD handle_f4.
PERFORM f4 USING e_fieldname
es_row_no
er_event_data
et_bad_cells.
ENDMETHOD. "handle_f4
METHOD catch_doubleclick."双击
PERFORM atdoubleclick USING e_row
e_column
es_row_no.
ENDMETHOD.
ENDCLASS. "lcl_event_receiver IMPLEMENTATION
DATA: event_receiver TYPE REF TO lcl_event_receiver.
INITIALIZATION.
* gd_repid = sy-repid.
PERFORM fieldcat_init USING gt_fieldcat[]."初始化标题格式
START-OF-SELECTION.
CALL SCREEN '100'.
*&--------------------------------------------------------------
*& Module USER_COMMAND_0100 INPUT
*&--------------------------------------------------------------
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN 'EXIT' OR 'BACK'.
LEAVE PROGRAM.
WHEN 'SAVE'.
PERFORM save.
WHEN 'ALL'.
PERFORM all.
WHEN 'NONE'.
PERFORM none.
WHEN 'CHANGE'.
PERFORM CHANGE.
ENDCASE.
CLEAR ok_code .
ENDMODULE. " USER_COMMAND_0100 INPUT
*&--------------------------------------------------------------
*& Form load_data_into_grid
*&--------------------------------------------------------------
FORM load_data_into_grid.
SELECT ekko~ebeln
ekko~lifnr
ekko~aedat
* ekko~zzreagree
* ekko~zzredate
* ekko~zzrereason
* ekko~zzreperson
* ekko~zzremode
* ekko~zzpostatus
lfa1~name1
lfa1~telf1
ekpo~werks
FROM ekko INNER JOIN ekpo ON ekko~ebeln = ekpo~ebeln AND
ekpo~ebelp = '00010'
INNER JOIN lfa1 ON ekko~lifnr = lfa1~lifnr
INTO CORRESPONDING FIELDS OF TABLE itab
WHERE ekko~ebeln IN s_ebeln AND
ekko~lifnr IN s_lifnr AND
ekko~aedat IN s_aedat AND
ekpo~werks = p_werks.
sla-cwidth_opt = 'X'."列的宽度是否自动
sla-zebra = 'X'."斑马线显示
* sla-no_toolbar = 'X'."不显示工具条
* sla-edit = 'X' ."编辑模式
* sla-FRONTEND = 'x'.
SLA-EDIT_MODE = 'X'.
SLA-SMALLTITLE = ''.
SLA-GRID_TITLE = 'DDDDDDDDDDDDDDDDDDDD'.
* SLA-SGL_CLK_HD = 'X'."当点击列标题的时候可以自动排序
CALL METHOD go_grid->set_table_for_first_display"调用ALV的显示方法
EXPORTING
is_variant = gs_variant
i_save = 'A'"显示格式保存按钮
is_layout = sla
* IT_TOOLBAR_EXCLUDING =
CHANGING
it_outtab = itab[]"数据
it_fieldcatalog = gt_fieldcat[]
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
CALL METHOD go_grid->set_ready_for_input "设置为不是只读
EXPORTING
i_ready_for_input = 1.
ENDFORM. " load_data_into_grid
*&--------------------------------------------------------------
*& Form fieldcat_init
*&--------------------------------------------------------------
FORM fieldcat_init USING rt_fieldcat TYPE lvc_t_fcat.
DATA: ls_fieldcat TYPE lvc_s_fcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'FLAG'.
ls_fieldcat-scrtext_l = 'Flag'.
ls_fieldcat-checkbox = 'X'.
ls_fieldcat-edit = 'X'.
ls_fieldcat-key = 'X'.
APPEND ls_fieldcat TO rt_fieldcat .
CLEAR ls_fieldcat.
PERFORM frm_catlg_set USING:
'WERKS' '' '门店' '' 'WERKS' 'EKPO' rt_fieldcat,
'EBELN' '' 'PO号码' '' 'EBELN' 'EKKO' rt_fieldcat,
'AEDAT' '' 'PO日期' '' 'AEDAT' 'EKKO' rt_fieldcat,
'LIFNR' '' '供应商' '' 'LIFNR' 'EKKO' rt_fieldcat, "
'NAME1' '' '供应商名称' '' 'NAME1' 'LFA1' rt_fieldcat,
'TELF1' '' '供应商电话' '' 'TELF1' 'LFA1' rt_fieldcat,
'ZZREAGREE' '' '是否同意' 'X' 'ZZREAGREE' 'EKKO' rt_fieldcat,
'ZZREDATE' '' '日期' 'X' 'ZZREDATE' 'EKKO' rt_fieldcat,
'ZZREPERSON' '' '回复人' 'X' 'ZZREPERSON' 'EKKO' rt_fieldcat,
'ZZREMODE' '' '退货方式' 'X' 'ZZREMODE' 'EKKO' rt_fieldcat,
'ZZPOSTATUS' '' 'PO状态' 'X' 'ZZPOSTATUS' 'EKKO' rt_fieldcat,
'ZZREREASON' '' '不同意原因' '' 'ZZREREASON' 'EKKO' rt_fieldcat.
gs_f4-fieldname = 'ZZREPERSON'.
gs_f4-register = 'X'.
gs_f4-getbefore = 'X'.
gs_f4-chngeafter = 'X'.
INSERT gs_f4 INTO TABLE gt_f4.
ENDFORM. "fieldcat_init
*---------------------------------------------------------------
* FORM frm_catlg_set *
*---------------------------------------------------------------
FORM frm_catlg_set USING p_field p_key p_text p_edit ref_f ref_t
rt_fieldcat TYPE lvc_t_fcat .
DATA: tmp_fieldcat TYPE lvc_s_fcat.
tmp_fieldcat-fieldname = p_field.
tmp_fieldcat-key = p_key .
tmp_fieldcat-scrtext_l = p_text.
tmp_fieldcat-edit = p_edit.
tmp_fieldcat-f4availabl = 'X'.
tmp_fieldcat-ref_field = ref_f.
tmp_fieldcat-ref_table = ref_t.
APPEND tmp_fieldcat TO rt_fieldcat .
CLEAR tmp_fieldcat .
ENDFORM. " FRM_CATLG_SET
*&--------------------------------------------------------------
*& Form change
*&--------------------------------------------------------------
FORM change .
IF go_grid->is_ready_for_input( ) = 0.
CALL METHOD go_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
ELSE.
CALL METHOD go_grid->check_changed_data "????????????
IMPORTING
e_valid = l_valid.
CALL METHOD go_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 0.
CALL METHOD go_grid->refresh_table_display.
ENDIF.
ENDFORM. " change
*&--------------------------------------------------------------
*& Form f4
*&--------------------------------------------------------------
FORM f4 USING r_fieldname TYPE lvc_fname
rs_row_no TYPE lvc_s_roid
rr_event_data TYPE REF TO cl_alv_event_data
rt_bad_cells TYPE lvc_t_modi.
rr_event_data->m_event_handled = 'X'.
ENDFORM. " F4
*&--------------------------------------------------------------
*& Module STATUS_0100 OUTPUT
*&--------------------------------------------------------------
MODULE status_0100 OUTPUT.
SET PF-STATUS 'MAIN100'.
gs_variant-report = sy-repid.
IF go_grid IS INITIAL.
CREATE OBJECT go_custom_container"按照屏幕上定义的空间名称来创建ALV的容器
EXPORTING
container_name = wa_container.
CREATE OBJECT go_grid"创建ALV
EXPORTING
i_parent = go_custom_container .
* CREATE OBJECT go_grid"直接在屏幕上创建ALV
* EXPORTING
* i_parent = cl_gui_container=>screen0.
*
CREATE OBJECT event_receiver.
SET HANDLER event_receiver->handle_f4 FOR go_grid."向ALV创建F4事件
CALL METHOD go_grid->register_f4_for_fields
EXPORTING
it_f4 = gt_f4.
SET HANDLER event_receiver->catch_doubleclick FOR go_grid."向ALV创建双击事件
IF sy-batch IS INITIAL.
CALL METHOD go_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
ENDIF.
PERFORM load_data_into_grid."加载数据
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*&--------------------------------------------------------------
*& Form save
*&--------------------------------------------------------------
FORM save.
CALL METHOD go_grid->check_changed_data
IMPORTING
e_valid = l_valid.
IF l_valid = 'X'.
LOOP AT itab WHERE flag = 'X'.
* UPDATE ekko SET
* zzreagree = itab-zzreagree
* zzredate = itab-zzredate
* zzrereason = itab-zzrereason
* zzreperson = itab-zzreperson
* zzremode = itab-zzremode
* zzpostatus = itab-zzpostatus
* WHERE ebeln = itab-ebeln .
IF sy-subrc NE 0.
MESSAGE e000(z900) WITH 'Update Error!'.
ENDIF.
ENDLOOP.
IF sy-subrc = 0.
MESSAGE i000(z900) WITH 'Update Success!'.
ENDIF.
ELSE.
MESSAGE e000(z900) WITH 'Data Error'.
ENDIF.
ENDFORM. " save
*&--------------------------------------------------------------
*& Form all
*&--------------------------------------------------------------
FORM all.
LOOP AT itab.
itab-flag = 'X'.
MODIFY itab.
ENDLOOP.
CALL METHOD go_grid->refresh_table_display.
ENDFORM. " all
*&--------------------------------------------------------------
*& Form none
*&--------------------------------------------------------------
FORM none.
LOOP AT itab.
itab-flag = ' '.
MODIFY itab.
ENDLOOP.
CALL METHOD go_grid->refresh_table_display.
ENDFORM. " none
*&--------------------------------------------------------------
*& Form atdoubleclick
*&--------------------------------------------------------------
FORM atdoubleclick USING p_e_row
p_e_column
p_es_row_no.
READ TABLE itab INDEX p_e_row.
IF p_e_column = 'EBELN'.
TEST = itab-ebeln."可以传递数据,为什么不能显示
SET PARAMETER ID 'BES' FIELD itab-ebeln.
CALL FUNCTION 'ME_DISPLAY_PURCHASE_DOCUMENT'
EXPORTING
i_ebeln = itab-ebeln
i_enjoy = 'X'.
ELSEIF p_e_column = 'LIFNR'.
CALL FUNCTION 'MMPUR_VENDOR_DISPLAY'
EXPORTING
im_lifnr = itab-lifnr
im_ekorg = '1000'.
ENDIF.
ENDFORM. " atdoubleclick
阅读(2449) | 评论(2) | 转发(0) |