
1 REPORT y4_b4_test4.
2
3 TABLES:mara .
4
5 TYPES:BEGIN OF ty_data,
6 checkbox TYPE char1,
7 style TYPE lvc_t_styl,
8 num TYPE i.
9 INCLUDE TYPE mara.
10 TYPES: END OF ty_data.
11
12 DATA:gt_data TYPE TABLE OF ty_data,
13 gs_data TYPE ty_data.
14
15 DATA:gt_fieldcat TYPE lvc_t_fcat, "字段目录
16 gs_fieldcat TYPE lvc_s_fcat, "字段目录
17 gs_layout TYPE lvc_s_layo. "布局结构
18
19 ************************************************事件定义
20
21 DATA: ls_edit TYPE lvc_s_styl.
22
23 DATA:gt_event TYPE slis_t_event,
24 gs_event LIKE LINE OF gt_event,
25 gs_variant TYPE disvariant. "格式
26
27 DATA: gv_grid TYPE REF TO cl_gui_alv_grid.
28
29 CLASS lcl_event_receiver DEFINITION.
30 PUBLIC SECTION.
31 METHODS:
32 handle_data_changed FOR EVENT data_changed_finished OF cl_gui_alv_grid
33 IMPORTING e_modified et_good_cells.
34 ENDCLASS.
35
36 CLASS lcl_event_receiver IMPLEMENTATION.
37 METHOD handle_data_changed.
38 PERFORM frm_data_changed USING et_good_cells.
39 ENDMETHOD.
40 ENDCLASS.
41
42 DATA: gv_event_receiver TYPE REF TO lcl_event_receiver.
43
44 FIELD-SYMBOLS: <fs_data> LIKE gs_data,
45 <fs_event> TYPE ty_data.
46
47 ***************************************************************
48
49 SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE TEXT-001.
50
51 SELECT-OPTIONS s_matnr FOR mara-matnr . "物料
52
53 SELECTION-SCREEN END OF BLOCK bk1.
54
55 START-OF-SELECTION.
56 PERFORM frm_layout.
57 PERFORM frm_set_event."监听事件
58 PERFORM frm_fieldcat CHANGING gt_fieldcat . "获取字段
59 PERFORM frm_getdata.
60
61 END-OF-SELECTION.
62 PERFORM frm_display.
63
64 FORM frm_getdata .
65
66 SELECT *
67 INTO CORRESPONDING FIELDS OF TABLE gt_data
68 FROM mara
69 WHERE matnr IN s_matnr .
70
71 ENDFORM .
72
73 FORM frm_num .
74
75 IF <fs_event>-num > 20 .
76
77 <fs_event>-checkbox = 'X' .
78
79 ELSE .
80
81 <fs_event>-checkbox = '' .
82
83 ENDIF .
84
85 IF <fs_event>-num = 10 .
86
87 CLEAR ls_edit.
88 ls_edit-fieldname = 'CHECKBOX'.
89 ls_edit-style = cl_gui_alv_grid=>mc_style_disabled.
90 INSERT ls_edit INTO TABLE <fs_event>-style.
91
92 ELSEIF <fs_event>-num = 20 .
93
94 CLEAR <fs_event>-style .
95
96 ENDIF .
97
98 ENDFORM .
99
100 FORM frm_data_changed USING et_good_cells TYPE lvc_t_modi.
101
102 DATA: ls_mod_data TYPE lvc_s_modi.
103 DATA: stbl1 TYPE lvc_s_stbl.
104 LOOP AT et_good_cells INTO ls_mod_data.
105 READ TABLE gt_data ASSIGNING <fs_event> INDEX ls_mod_data-row_id.
106 CASE ls_mod_data-fieldname.
107 WHEN 'NUM'.
108 PERFORM frm_num .
109 ENDCASE.
110
111 stbl1-row = 'X'.
112 stbl1-col = 'X'.
113 CALL METHOD gv_grid->refresh_table_display
114 EXPORTING
115 is_stable = stbl1.
116
117 ENDLOOP.
118
119 ENDFORM.
120
121 FORM frm_set_event.
122
123 gs_event-name = 'CALLER_EXIT'.
124 gs_event-form = 'FRM_BUTTON'.
125 APPEND gs_event TO gt_event.
126
127 ENDFORM.
128
129 FORM frm_button USING e_grid TYPE slis_data_caller_exit .
130
131 CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
132 IMPORTING
133 e_grid = gv_grid.
134 CALL METHOD gv_grid->set_ready_for_input
135 EXPORTING
136 i_ready_for_input = 1.
137 CALL METHOD gv_grid->check_changed_data.
138 "光标移动事件
139 CALL METHOD gv_grid->register_edit_event
140 EXPORTING
141 i_event_id = cl_gui_alv_grid=>mc_evt_modified
142 EXCEPTIONS
143 error = 1
144 OTHERS = 2.
145 "设置ENTER事件
146 CALL METHOD gv_grid->register_edit_event
147 EXPORTING
148 i_event_id = cl_gui_alv_grid=>mc_evt_enter
149 EXCEPTIONS
150 error = 1
151 OTHERS = 2.
152 "数据修改事件
153 CREATE OBJECT gv_event_receiver.
154 SET HANDLER gv_event_receiver->handle_data_changed FOR gv_grid.
155
156 ENDFORM.
157
158 FORM frm_layout.
159
160 CLEAR gs_layout.
161 gs_layout-zebra = 'X'. "斑马线显示
162 gs_layout-cwidth_opt = 'X'. "自适应宽度
163 gs_layout-sel_mode = 'A'. "选择模式:多选/单选
164 gs_layout-stylefname = 'STYLE'.
165
166 ENDFORM.
167
168 FORM frm_display.
169 gs_variant-report = sy-repid.
170 gs_variant-handle = 1.
171 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' "调用函数
172 EXPORTING
173 i_callback_program = sy-repid
174 is_layout_lvc = gs_layout "布局
175 it_fieldcat_lvc = gt_fieldcat "字段
176 * i_callback_pf_status_set = 'SET_PF_STATUS' "按钮
177 * i_callback_user_command = 'ALV_USER_COMMAND' "按钮事件
178 i_save = 'A'
179 it_events = gt_event
180 is_variant = gs_variant
181 TABLES
182 t_outtab = gt_data "数据
183 EXCEPTIONS "抛出异常
184 program_error = 1
185 OTHERS = 2.
186 ENDFORM.
187
188 FORM frm_fieldcat CHANGING VALUE(ot_fieldcat) TYPE lvc_t_fcat.
189
190 DATA:l_pos TYPE i VALUE 2,
191 ls_fieldcat TYPE lvc_s_fcat.
192 DEFINE alv_append_field.
193 CLEAR ls_fieldcat.
194 ls_fieldcat-col_pos = l_pos.
195 ls_fieldcat-fieldname = &1 .
196 ls_fieldcat-reptext = &2 .
197 ls_fieldcat-no_zero = &3.
198 ls_fieldcat-key = &4 . "状态灯
199 ls_fieldcat-scrtext_l = &2.
200 ls_fieldcat-scrtext_m = &2.
201 ls_fieldcat-scrtext_s = &2.
202 ls_fieldcat-edit = &5.
203 ls_fieldcat-ref_table = &6.
204 ls_fieldcat-ref_field = &7.
205 ls_fieldcat-outputlen = &8 .
206 APPEND ls_fieldcat TO ot_fieldcat.
207 l_pos = l_pos + 1 .
208 END-OF-DEFINITION.
209 REFRESH ot_fieldcat.
210
211 CLEAR gs_fieldcat.
212 ls_fieldcat-fieldname = 'CHECKBOX'."多选框字段名
213 ls_fieldcat-reptext = '选项'."文本
214 ls_fieldcat-edit = 'X'."能够修改
215 ls_fieldcat-checkbox = 'X'. "多选框
216 ls_fieldcat-intlen = 1.
217 APPEND ls_fieldcat TO ot_fieldcat.
218
219 alv_append_field 'NUM' '状态' 'X' '' 'X' '' '' ''.
220 alv_append_field 'MATNR' '物料' 'X' '' '' '' '' ''.
221 alv_append_field 'MTART' '物料类型' 'X' '' '' '' '' ''.
222 alv_append_field 'MBRSH' '行业领域' 'X' '' '' '' '' ''.
223 alv_append_field 'MATKL' '物料组' 'X' '' '' '' '' ''.
224
225 ENDFORM.

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!