1 PROGRAM zdemo_dialog.
2
3 INCLUDE zdemo_dialogtop.
4 INCLUDE zdemo_dialogo01.
5 INCLUDE zdemo_dialogi01.
6 INCLUDE zdemo_dialogf01.
7 INCLUDE zdemo_dialoghelp.
*&---------------------------------------------------------------------*
*& 包含 ZDEMO_DIALOGTOP
*&---------------------------------------------------------------------*
"屏幕元素定义
DATA:
"ok_code TYPE sy-ucomm,
input_one
TYPE char10,
input_two TYPE char10,
output_three TYPE char10,
cb_descri TYPE char1.
DATA subinput_one
TYPE char10.
TABLES:t001w,t001l,makt,marc.
*&SPWIZARD: FUNCTION CODES FOR TABSTRIP 'TABSTRIP_01'
CONSTANTS:
BEGIN OF c_tabstrip_01,
tab1 LIKE sy-ucomm VALUE
'TABSTRIP_01_FC1',
"功能代码
tab2
LIKE sy-ucomm VALUE
'TABSTRIP_01_FC2',
tab3 LIKE sy-ucomm VALUE
'TABSTRIP_01_FC3',
END OF c_tabstrip_01.
*&SPWIZARD: DATA FOR TABSTRIP 'TABSTRIP_01'
CONTROLS: tabstrip_01
TYPE TABSTRIP.
DATA:
BEGIN OF g_tabstrip_01,
subscreen LIKE sy-dynnr,
"子屏幕
prog
LIKE sy-repid VALUE
'ZDEMO_DIALOG',
"程序名
pressed_tab
LIKE sy-ucomm VALUE c_tabstrip_01-tab1,
"按下去得按钮
END OF g_tabstrip_01.
DATA: ok_code
LIKE sy-
ucomm.
*排除按钮 EXCLUDING BUTTON
DATA :gt_status
TYPE TABLE OF sy-ucomm,
"EXCLUDING GT_STATUS
gs_status
TYPE sy-ucomm.
"
*标题 TITLE
DATA gv_title
TYPE c LENGTH
10.
"标识 SIGN
DATA gv_sign_01
TYPE c.
*内表 TABLE CTRL 显示 表
TYPES:
BEGIN OF ty_tab,
id TYPE id,
matnr TYPE mard-
matnr,
werks TYPE mard-
werks,
lgort TYPE mard-
lgort,
END OF ty_tab.
DATA: lt_tab
TYPE TABLE OF ty_tab,
ls_tab TYPE ty_tab.
*table control 控制表
TYPES:
BEGIN OF ty_tab_crl,
cbox TYPE checkbox,
id TYPE id,
matnr TYPE mard-
matnr,
werks TYPE mard-
werks,
lgort TYPE mard-
lgort,
END OF ty_tab_crl.
DATA:gt_tab
TYPE TABLE OF ty_tab_crl,
gs_tab TYPE ty_tab_crl.
*TABLE CONTROL 控制表2
DATA :gt_tab_1
TYPE TABLE OF ty_tab_crl,
gs_tab_1 TYPE ty_tab_crl.
*&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_CTRL' ITSELF
CONTROLS: tc_ctrl
TYPE TABLEVIEW
USING SCREEN 0120.
"table control 的控制器
*&SPWIZARD: LINES OF TABLECONTROL 'TC_CTRL'
DATA: g_tc_ctrl_lines
LIKE sy-loopc.
"行数
*DATA: OK_CODE LIKE SY-UCOMM.
*&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_CTRL_TAB' ITSELF
CONTROLS: tc_ctrl_tab
TYPE TABLEVIEW
USING SCREEN 0130.
*&SPWIZARD: LINES OF TABLECONTROL 'TC_CTRL_TAB'
DATA: g_tc_ctrl_tab_lines
LIKE sy-
loopc.
DATA gv_field
TYPE lvc_s_fcat-
fieldname.
DATA gv_lines
TYPE i.
*DATA: OK_CODE LIKE SY-UCOMM.
*创建选择界面
SELECTION-SCREEN BEGIN OF SCREEN 0111 AS SUBSCREEN.
SELECT-OPTIONS s_werks
FOR marc-
werks.
SELECTION-SCREEN END OF SCREEN 0111.
*&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_CTRL_TAB_1' ITSELF
CONTROLS: tc_ctrl_tab_1
TYPE TABLEVIEW
USING SCREEN 0110.
*&SPWIZARD: LINES OF TABLECONTROL 'TC_CTRL_TAB_1'
DATA: g_tc_ctrl_tab_1_lines
LIKE sy-
loopc.
*DATA: OK_CODE LIKE SY-UCOMM.
1 *&---------------------------------------------------------------------*
2 *& 包含 ZDEMO_DIALOGO01
3 *&---------------------------------------------------------------------*
4 *&---------------------------------------------------------------------*
5 *& Module STATUS_0100 OUTPUT
6 *&---------------------------------------------------------------------*
7 *&
8 *&---------------------------------------------------------------------*
9 MODULE status_0100
OUTPUT.
10 SET PF-STATUS 'STATUS_0100' EXCLUDING gt_status.
11 SET TITLEBAR 'TITLE_0100' WITH gv_title.
12 ENDMODULE.
13 *&---------------------------------------------------------------------*
14 *& Module PBO_0100 OUTPUT
15 *&---------------------------------------------------------------------*
16 *&
17 *&---------------------------------------------------------------------*
18 MODULE pbo_0100
OUTPUT.
19 IF input_one
IS NOT INITIAL.
20 output_three =
input_one.
21 ELSE.
22 output_three =
'NONE'.
23 ENDIF.
24
25 IF gv_sign_01 =
abap_off.
26 cb_descri =
'X'.
27 ENDIF.
28
29
30 IF cb_descri
EQ abap_on.
31 LOOP AT SCREEN .
32 IF screen-group1 =
'GP1'.
33 screen-active =
'1'.
34 ENDIF.
35 MODIFY SCREEN.
36 ENDLOOP.
37 ELSE.
38 LOOP AT SCREEN .
39 IF screen-group1 =
'GP1'.
40 screen-active =
'0'.
41 ENDIF.
42 MODIFY SCREEN.
43 ENDLOOP.
44 ENDIF.
45
46
47 ENDMODULE.
48
49 *&SPWIZARD: OUTPUT MODULE FOR TS 'TABSTRIP_01'. DO NOT CHANGE THIS LINE!
50 *&SPWIZARD: SETS ACTIVE TAB
51 MODULE tabstrip_01_active_tab_set
OUTPUT.
52 tabstrip_01-activetab = g_tabstrip_01-
pressed_tab.
53 CASE g_tabstrip_01-pressed_tab.
"根据 按下得页签 来 获取 子屏幕
54 WHEN c_tabstrip_01-
tab1.
55 g_tabstrip_01-subscreen =
'0110'.
56 gv_title =
'-Create'.
57 WHEN c_tabstrip_01-
tab2.
58 g_tabstrip_01-subscreen =
'0120'.
59 gv_title =
'-Modify'.
60 WHEN c_tabstrip_01-
tab3.
61 g_tabstrip_01-subscreen =
'0130'.
62 gv_title =
'-Display'.
63 WHEN OTHERS.
64 *&SPWIZARD: DO NOTHING
65 ENDCASE.
66 ENDMODULE.
67 *&---------------------------------------------------------------------*
68 *& Module STATUS_0110 OUTPUT
69 *&---------------------------------------------------------------------*
70 *&
71 *&---------------------------------------------------------------------*
72 MODULE status_0110
OUTPUT.
73 * SET PF-STATUS 'xxxxxxxx'.
74 * SET TITLEBAR 'xxx'.
75 subinput_one =
input_two.
76
77 ENDMODULE.
78
79 *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_CTRL'. DO NOT CHANGE THIS LINE!
80 *&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
81 MODULE tc_ctrl_change_tc_attr
OUTPUT.
82 DESCRIBE TABLE lt_tab
LINES tc_ctrl-lines.
"获取行数
83 * DESCRIBE TABLE LT_TAB OCCURS LV_LINES."初始化大小
84 DESCRIBE TABLE lt_tab
OCCURS DATA(lv_lines).
"初始化大小
85 DESCRIBE TABLE lt_tab KIND
DATA(lv_type).
"表类型
86
87 ENDMODULE.
88
89 *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_CTRL'. DO NOT CHANGE THIS LINE!
90 *&SPWIZARD: GET LINES OF TABLECONTROL
91 MODULE tc_ctrl_get_lines
OUTPUT.
92 g_tc_ctrl_lines = sy-
loopc.
93 CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
94 EXPORTING
95 input = ls_tab-
matnr
96 IMPORTING
97 output = ls_tab-
matnr.
98
99 * CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
100 * EXPORTING
101 * input = ls_tab-id
102 * IMPORTING
103 * output = ls_tab-id.
104 ENDMODULE.
105 *&---------------------------------------------------------------------*
106 *& Module GET_TABLE_DATA OUTPUT
107 *&---------------------------------------------------------------------*
108 *&
109 *&---------------------------------------------------------------------*
110 MODULE get_table_data
OUTPUT.
111
112 IF lt_tab[]
IS INITIAL.
113 SELECT matnr werks lgort
FROM mard
INTO CORRESPONDING FIELDS OF TABLE lt_tab
114 UP
TO 50 ROWS
115 ORDER
BY werks lgort.
116 LOOP AT lt_tab ASSIGNING
FIELD-SYMBOL(<fs>
).
117 <fs>-id = sy-
tabix.
118 ENDLOOP.
119 ENDIF.
120
121 ENDMODULE.
122
123 *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_CTRL_TAB'. DO NOT CHANGE THIS LINE!
124 *&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
125 MODULE tc_ctrl_tab_change_tc_attr
OUTPUT.
126 DESCRIBE TABLE gt_tab
LINES tc_ctrl_tab-
lines.
127 ENDMODULE.
128
129 *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_CTRL_TAB'. DO NOT CHANGE THIS LINE!
130 *&SPWIZARD: GET LINES OF TABLECONTROL
131 MODULE tc_ctrl_tab_get_lines
OUTPUT.
132 g_tc_ctrl_tab_lines = sy-
loopc.
133 CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
134 EXPORTING
135 input = gs_tab-
matnr
136 IMPORTING
137 output = gs_tab-
matnr.
138
139 * CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
140 * EXPORTING
141 * input = gs_tab-id
142 * IMPORTING
143 * output = gs_tab-id.
144 ENDMODULE.
145 *&---------------------------------------------------------------------*
146 *& Module GET_TABLE_DATA_130 OUTPUT
147 *&---------------------------------------------------------------------*
148 *&
149 *&---------------------------------------------------------------------*
150 MODULE get_table_data_130
OUTPUT.
151 IF gt_tab[]
IS INITIAL.
152 SELECT matnr werks lgort
FROM mard
INTO CORRESPONDING FIELDS OF TABLE gt_tab
153 UP
TO 50 ROWS
154 ORDER
BY werks lgort.
155 LOOP AT gt_tab ASSIGNING
FIELD-SYMBOL(<fs1>
).
156 <fs1>-id = sy-
tabix.
157 ENDLOOP.
158 ENDIF.
159 ENDMODULE.
160
161 *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_CTRL_TAB_1'. DO NOT CHANGE THIS LIN
162 *&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
163 MODULE tc_ctrl_tab_1_change_tc_attr
OUTPUT.
164 DESCRIBE TABLE gt_tab_1
LINES tc_ctrl_tab_1-
lines.
165 ENDMODULE.
166
167 *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_CTRL_TAB_1'. DO NOT CHANGE THIS LIN
168 *&SPWIZARD: GET LINES OF TABLECONTROL
169 MODULE tc_ctrl_tab_1_get_lines
OUTPUT.
170 g_tc_ctrl_tab_1_lines = sy-
loopc.
171 ENDMODULE.
172 *&---------------------------------------------------------------------*
173 *& Module GET_TABLE_DATA_110 OUTPUT
174 *&---------------------------------------------------------------------*
175 *&
176 *&---------------------------------------------------------------------*
177 MODULE get_table_data_110
OUTPUT.
178 IF gt_tab_1[]
IS INITIAL.
179 APPEND INITIAL LINE TO gt_tab_1.
180 ENDIF.
181 ENDMODULE.
182 *&---------------------------------------------------------------------*
183 *& Module TC_CTRL_TAB_CHANGE_FIELD_ATTR OUTPUT
184 *&---------------------------------------------------------------------*
185 *&
186 *&---------------------------------------------------------------------*
187 MODULE tc_ctrl_tab_change_field_attr
OUTPUT.
188 * IF gs_tab-cbox = 'X'.
189 * LOOP AT SCREEN."控制摸个单元格可输入 可输出
190 * IF screen-name = 'GS_TAB-ID'.
191 * screen-input = '1'.
192 * MODIFY SCREEN.
193 * ENDIF.
194 * ENDLOOP.
195 * ENDIF.
196 "光标处回车 可编辑
197 IF tc_ctrl_tab-current_line = gv_lines + tc_ctrl_tab-top_line -
1.
198 LOOP AT SCREEN.
199 IF screen-name =
gv_field.
200 screen-input =
'1'.
201 MODIFY SCREEN.
202 ENDIF.
203 ENDLOOP.
204 ENDIF.
205 ENDMODULE.
1 *&---------------------------------------------------------------------*
2 *& 包含 ZDEMO_DIALOGI01
3 *&---------------------------------------------------------------------*
4 *&---------------------------------------------------------------------*
5 *& Module USER_COMMAND_0100 INPUT
6 *&---------------------------------------------------------------------*
7 * text
8 *----------------------------------------------------------------------*
9 MODULE user_command_0100 INPUT.
10
11 ok_code = sy-
ucomm.
12
13 CASE ok_code.
14 WHEN
'BACK' OR 'CANC'.
15 LEAVE TO SCREEN 0.
16 WHEN
'EXIT'.
17 LEAVE PROGRAM.
18 WHEN
'BT_BACK'.
19 LEAVE TO SCREEN 0.
20 * WHEN 'BT_EXIT'.
21 * LEAVE PROGRAM.
22 ENDCASE.
23
24 "滚轮和回车都会触发 PBO 和 PAI 所以需要在function code 使用过后清空
25 CLEAR ok_code.
26 CLEAR sy-
ucomm.
27 ENDMODULE.
28 *&---------------------------------------------------------------------*
29 *& Module EXIT_COMMAND INPUT
30 *&---------------------------------------------------------------------*
31 * text
32 *----------------------------------------------------------------------*
33 MODULE exit_command INPUT.
34 ok_code = sy-
ucomm.
35 CASE ok_code.
36 * WHEN 'BACK' OR 'CANC'.
37 * LEAVE TO SCREEN 0.
38 * WHEN 'EXIT'.
39 * LEAVE PROGRAM.
40 * WHEN 'BT_BACK'.
41 * LEAVE TO SCREEN 0.
42 WHEN
'BT_EXIT'.
43 LEAVE PROGRAM.
44 ENDCASE.
45
46 CLEAR ok_code.
47 CLEAR sy-
ucomm.
48 ENDMODULE.
49 *&---------------------------------------------------------------------*
50 *& Module CHECK_PLANT INPUT
51 *&---------------------------------------------------------------------*
52 * text
53 *----------------------------------------------------------------------*
54 MODULE check_plant INPUT.
55
56 SELECT SINGLE name1
INTO t001w-name1
FROM t001w
57 WHERE werks = t001w-
werks.
58 IF sy-subrc
NE 0.
59 CLEAR :t001w-werks,t001w-
name1.
60 ENDIF.
61
62
63 ENDMODULE.
64 *&---------------------------------------------------------------------*
65 *& Module CHECK_WAREHOUSE INPUT
66 *&---------------------------------------------------------------------*
67 * text
68 *----------------------------------------------------------------------*
69 MODULE check_warehouse INPUT.
70
71 IF t001w-werks
IS NOT INITIAL.
72 SELECT SINGLE lgobe
INTO t001l-lgobe
FROM t001l
73 WHERE werks = t001w-werks
AND lgort = t001l-
lgort.
74 IF sy-subrc
NE 0.
75 CLEAR: t001l-lgort,t001l-
lgobe.
76 ENDIF.
77 ELSE.
78 CLEAR: t001l-lgort,t001l-
lgobe.
79 ENDIF.
80 ENDMODULE.
81 *&---------------------------------------------------------------------*
82 *& Module CHECK_MATERIAL INPUT
83 *&---------------------------------------------------------------------*
84 * text
85 *----------------------------------------------------------------------*
86 MODULE check_material INPUT.
87 IF t001w-werks
IS NOT INITIAL
88 AND t001l-lgort
IS NOT INITIAL.
89 SELECT SINGLE maktx
INTO makt-maktx
FROM makt
90 WHERE matnr = makt-matnr
AND spras = sy-
langu.
91 ELSE.
92 CLEAR:makt-matnr,makt-
maktx.
93 ENDIF.
94 ENDMODULE.
95
96 *&SPWIZARD: INPUT MODULE FOR TS 'TABSTRIP_01'. DO NOT CHANGE THIS LINE!
97 *&SPWIZARD: GETS ACTIVE TAB
98 MODULE tabstrip_01_active_tab_get INPUT.
99 ok_code = sy-
ucomm.
100 CASE ok_code.
101 WHEN c_tabstrip_01-
tab1.
102 g_tabstrip_01-pressed_tab = c_tabstrip_01-
tab1.
103 REFRESH gt_status.
104 * gs_status = 'SAVE'."隐藏按钮
105 * APPEND gs_status TO gt_status.
106 * CLEAR gs_status.
107 WHEN c_tabstrip_01-
tab2.
108 g_tabstrip_01-pressed_tab = c_tabstrip_01-
tab2.
109 REFRESH gt_status.
110 WHEN c_tabstrip_01-
tab3.
111 g_tabstrip_01-pressed_tab = c_tabstrip_01-
tab3.
112 REFRESH gt_status.
113 gs_status =
'SAVE'.
"隐藏按钮
114 APPEND gs_status
TO gt_status.
115 CLEAR gs_status.
116 WHEN OTHERS.
117 *&SPWIZARD: DO NOTHING
118 ENDCASE.
119 ENDMODULE.
120 *&---------------------------------------------------------------------*
121 *& Module SET_SIGNAL INPUT
122 *&---------------------------------------------------------------------*
123 * text
124 *----------------------------------------------------------------------*
125 MODULE set_signal INPUT.
126 gv_sign_01 =
'X'.
127 ENDMODULE.
128 *&---------------------------------------------------------------------*
129 *& Module USER_COMMAND_0110 INPUT
130 *&---------------------------------------------------------------------*
131 * text
132 *----------------------------------------------------------------------*
133 MODULE user_command_0110 INPUT.
134
135 ok_code = sy-
ucomm.
136
137 CASE ok_code.
138 WHEN
'SUBCK'.
139 IF subinput_one =
input_one.
140 MESSAGE 'Data is right' TYPE 'I' DISPLAY
LIKE 'S'.
141 g_tabstrip_01-pressed_tab = c_tabstrip_01-
tab2.
142 REFRESH gt_status.
143 ELSE.
144 MESSAGE 'No match' TYPE 'I' DISPLAY
LIKE 'E'.
145 RETURN.
146 ENDIF.
147 ENDCASE.
148
149
150 ENDMODULE.
151
152 *&SPWIZARD: INPUT MODULE FOR TC 'TC_CTRL'. DO NOT CHANGE THIS LINE!
153 *&SPWIZARD: PROCESS USER COMMAND
154 MODULE tc_ctrl_user_command INPUT.
155 ok_code = sy-
ucomm.
156 PERFORM user_ok_tc
USING 'TC_CTRL'
157 'LT_TAB'
158 ' '
159 CHANGING ok_code.
160 sy-ucomm =
ok_code.
161 ENDMODULE.
162
163 *&SPWIZARD: INPUT MODULE FOR TC 'TC_CTRL_TAB'. DO NOT CHANGE THIS LINE!
164 *&SPWIZARD: MODIFY TABLE
165 MODULE tc_ctrl_tab_modify INPUT.
166 MODIFY gt_tab
167 FROM gs_tab
168 INDEX tc_ctrl_tab-current_line.
"只能修改不能新增
169 ENDMODULE.
170
171 *&SPWIZARD: INPUT MODUL FOR TC 'TC_CTRL_TAB'. DO NOT CHANGE THIS LINE!
172 *&SPWIZARD: MARK TABLE
173 MODULE tc_ctrl_tab_mark INPUT.
174 DATA: g_tc_ctrl_tab_wa2
LIKE LINE OF gt_tab.
175 IF tc_ctrl_tab-line_sel_mode =
1
176 AND gs_tab-cbox =
'X'.
177 LOOP AT gt_tab
INTO g_tc_ctrl_tab_wa2
178 WHERE cbox =
'X'.
179 g_tc_ctrl_tab_wa2-cbox =
''.
180 MODIFY gt_tab
181 FROM g_tc_ctrl_tab_wa2
182 TRANSPORTING cbox.
183 ENDLOOP.
184 ENDIF.
185 MODIFY gt_tab
186 FROM gs_tab
187 INDEX tc_ctrl_tab-
current_line
188 TRANSPORTING cbox.
"修改选中的行
189 ENDMODULE.
190
191 *&SPWIZARD: INPUT MODULE FOR TC 'TC_CTRL_TAB'. DO NOT CHANGE THIS LINE!
192 *&SPWIZARD: PROCESS USER COMMAND
193 MODULE tc_ctrl_tab_user_command INPUT.
194 ok_code = sy-
ucomm.
195 PERFORM user_ok_tc
USING 'TC_CTRL_TAB'
196 'GT_TAB'
197 'CBOX'
198 CHANGING ok_code.
199 sy-ucomm =
ok_code.
200 ENDMODULE.
201
202 *&SPWIZARD: INPUT MODULE FOR TC 'TC_CTRL_TAB_1'. DO NOT CHANGE THIS LINE
203 *&SPWIZARD: MODIFY TABLE
204 MODULE tc_ctrl_tab_1_modify INPUT.
205 MODIFY gt_tab_1
206 FROM gs_tab_1
207 INDEX tc_ctrl_tab_1-
current_line.
208 ENDMODULE.
209
210 *&SPWIZARD: INPUT MODUL FOR TC 'TC_CTRL_TAB_1'. DO NOT CHANGE THIS LINE!
211 *&SPWIZARD: MARK TABLE
212 MODULE tc_ctrl_tab_1_mark INPUT.
213 DATA: g_tc_ctrl_tab_1_wa2
LIKE LINE OF gt_tab_1.
214 IF tc_ctrl_tab_1-line_sel_mode =
1
215 AND gs_tab_1-cbox =
'X'.
216 LOOP AT gt_tab_1
INTO g_tc_ctrl_tab_1_wa2
217 WHERE cbox =
'X'.
218 g_tc_ctrl_tab_1_wa2-cbox =
''.
219 MODIFY gt_tab_1
220 FROM g_tc_ctrl_tab_1_wa2
221 TRANSPORTING cbox.
222 ENDLOOP.
223 ENDIF.
224 MODIFY gt_tab_1
225 FROM gs_tab_1
226 INDEX tc_ctrl_tab_1-
current_line
227 TRANSPORTING cbox.
228 ENDMODULE.
229
230 *&SPWIZARD: INPUT MODULE FOR TC 'TC_CTRL_TAB_1'. DO NOT CHANGE THIS LINE
231 *&SPWIZARD: PROCESS USER COMMAND
232 MODULE tc_ctrl_tab_1_user_command INPUT.
233 ok_code = sy-
ucomm.
234 PERFORM user_ok_tc
USING 'TC_CTRL_TAB_1'
235 'GT_TAB_1'
236 'CBOX'
237 CHANGING ok_code.
238 sy-ucomm =
ok_code.
239 ENDMODULE.
240 *&---------------------------------------------------------------------*
241 *& Module USER_COMMAND_0130 INPUT
242 *&---------------------------------------------------------------------*
243 * text
244 *----------------------------------------------------------------------*
245 MODULE user_command_0130 INPUT.
246 ok_code = sy-
ucomm.
247
248 CASE ok_code.
249 WHEN
'ID_BT'.
"modify table control lines
250 PERFORM frm_modify_lines.
251 WHEN OTHERS.
252 ENDCASE.
253
254 CLEAR ok_code.
255 CLEAR sy-
ucomm.
256 ENDMODULE.
257 *&---------------------------------------------------------------------*
258 *& Module GET_CURSOR INPUT
259 *&---------------------------------------------------------------------*
260 * text
261 *----------------------------------------------------------------------*
262 MODULE get_cursor INPUT.
263 GET CURSOR FIELD gv_field
LINE gv_lines.
264 ENDMODULE.
1 *&---------------------------------------------------------------------*
2 *& 包含 ZDEMO_DIALOGF01
3 *&---------------------------------------------------------------------*
4
5 *----------------------------------------------------------------------*
6 * INCLUDE TABLECONTROL_FORMS *
7 *----------------------------------------------------------------------*
8
9 *&---------------------------------------------------------------------*
10 *& Form USER_OK_TC
11 *& 标准FORM 标准按钮 引导自动创建 *
12 *&---------------------------------------------------------------------*
13 *&---------------------------------------------------------------------*
14 FORM user_ok_tc
USING p_tc_name
TYPE dynfnam
15 p_table_name
16 p_mark_name
17 CHANGING p_ok
LIKE sy-
ucomm.
18
19 *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
20 DATA: l_ok
TYPE sy-
ucomm,
21 l_offset
TYPE i.
22 *&SPWIZARD: END OF LOCAL DATA------------------------------------------*
23
24 *&SPWIZARD: Table control specific operations *
25 *&SPWIZARD: evaluate TC name and operations *
26 SEARCH p_ok
FOR p_tc_name.
27 IF sy-subrc <>
0.
28 EXIT.
29 ENDIF.
30 l_offset = strlen( p_tc_name ) +
1.
31 l_ok = p_ok+
l_offset.
32 *&SPWIZARD: execute general and TC specific operations *
33 CASE l_ok.
34 WHEN
'INSR'.
"insert row
35 PERFORM fcode_insert_row
USING p_tc_name
36 p_table_name.
37 CLEAR p_ok.
38
39 WHEN
'DELE'.
"delete row
40 PERFORM fcode_delete_row
USING p_tc_name
41 p_table_name
42 p_mark_name.
43 CLEAR p_ok.
44
45 WHEN
'P--' OR "top of list
46 'P-' OR "previous page
47 'P+' OR "next page
48 'P++'.
"bottom of list
49 PERFORM compute_scrolling_in_tc
USING p_tc_name
50 l_ok.
51 CLEAR p_ok.
52 * WHEN 'L--'. "total left
53 * PERFORM FCODE_TOTAL_LEFT USING P_TC_NAME.
54 *
55 * WHEN 'L-'. "column left
56 * PERFORM FCODE_COLUMN_LEFT USING P_TC_NAME.
57 *
58 * WHEN 'R+'. "column right
59 * PERFORM FCODE_COLUMN_RIGHT USING P_TC_NAME.
60 *
61 * WHEN 'R++'. "total right
62 * PERFORM FCODE_TOTAL_RIGHT USING P_TC_NAME.
63 *
64 WHEN
'MARK'.
"mark all filled lines
65 PERFORM fcode_tc_mark_lines
USING p_tc_name
66 p_table_name
67 p_mark_name .
68 CLEAR p_ok.
69
70 WHEN
'DMRK'.
"demark all filled lines
71 PERFORM fcode_tc_demark_lines
USING p_tc_name
72 p_table_name
73 p_mark_name .
74 CLEAR p_ok.
75
76 * WHEN 'SASCEND' OR
77 * 'SDESCEND'. "sort column
78 * PERFORM FCODE_SORT_TC USING P_TC_NAME
79 * l_ok.
80
81 ENDCASE.
82
83 ENDFORM.
" USER_OK_TC
84
85 *&---------------------------------------------------------------------*
86 *& Form FCODE_INSERT_ROW *
87 *&---------------------------------------------------------------------*
88 FORM fcode_insert_row
89 USING p_tc_name
TYPE dynfnam
90 p_table_name .
91
92 *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
93 DATA l_lines_name
LIKE feld-
name.
94 DATA l_selline
LIKE sy-
stepl.
95 DATA l_lastline
TYPE i.
96 DATA l_line
TYPE i.
97 DATA l_table_name
LIKE feld-
name.
98 FIELD-SYMBOLS <tc>
TYPE cxtab_control.
99 FIELD-SYMBOLS <table>
TYPE STANDARD
TABLE.
100 FIELD-SYMBOLS <lines>
TYPE i.
101 *&SPWIZARD: END OF LOCAL DATA------------------------------------------*
102
103 ASSIGN (p_tc_name)
TO <tc>
.
104
105 *&SPWIZARD: get the table, which belongs to the tc *
106 CONCATENATE p_table_name
'[]' INTO l_table_name.
"table body
107 ASSIGN (l_table_name)
TO <table>.
"not headerline
108
109 *&SPWIZARD: get looplines of TableControl *
110 CONCATENATE 'G_' p_tc_name
'_LINES' INTO l_lines_name.
111 ASSIGN (l_lines_name)
TO <lines>
.
112
113 *&SPWIZARD: get current line *
114 GET CURSOR LINE l_selline.
115 IF sy-subrc <>
0.
" append line to table
116 l_selline = <tc>-lines +
1.
117 *&SPWIZARD: set top line *
118 IF l_selline > <lines>
.
119 <tc>-top_line = l_selline - <lines> +
1 .
120 ELSE.
121 <tc>-top_line =
1.
122 ENDIF.
123 ELSE.
" insert line into table
124 l_selline = <tc>-top_line + l_selline -
1.
125 l_lastline = <tc>-top_line + <lines> -
1.
126 ENDIF.
127 *&SPWIZARD: set new cursor line *
128 l_line = l_selline - <tc>-top_line +
1.
129
130 *&SPWIZARD: insert initial line *
131 INSERT INITIAL LINE INTO <table>
INDEX l_selline.
132 <tc>-lines = <tc>-lines +
1.
133 *&SPWIZARD: set cursor *
134 SET CURSOR LINE l_line.
135
136 ENDFORM.
" FCODE_INSERT_ROW
137
138 *&---------------------------------------------------------------------*
139 *& Form FCODE_DELETE_ROW *
140 *&---------------------------------------------------------------------*
141 FORM fcode_delete_row
142 USING p_tc_name
TYPE dynfnam
143 p_table_name
144 p_mark_name .
145
146 *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
147 DATA l_table_name
LIKE feld-
name.
148
149 FIELD-SYMBOLS <tc>
TYPE cxtab_control.
150 FIELD-SYMBOLS <table>
TYPE STANDARD
TABLE.
151 FIELD-SYMBOLS <wa>
.
152 FIELD-SYMBOLS <mark_field>
.
153 *&SPWIZARD: END OF LOCAL DATA------------------------------------------*
154
155 ASSIGN (p_tc_name)
TO <tc>
.
156
157 *&SPWIZARD: get the table, which belongs to the tc *
158 CONCATENATE p_table_name
'[]' INTO l_table_name.
"table body
159 ASSIGN (l_table_name)
TO <table>.
"not headerline
160
161 *&SPWIZARD: delete marked lines *
162 DESCRIBE TABLE <table>
LINES <tc>-
lines.
163
164 LOOP AT <table> ASSIGNING <wa>
.
165
166 *&SPWIZARD: access to the component 'FLAG' of the table header *
167 ASSIGN COMPONENT p_mark_name
OF STRUCTURE <wa>
TO <mark_field>
.
168
169 IF <mark_field> =
'X'.
170 DELETE <table> INDEX syst-
tabix.
171 IF sy-subrc =
0.
172 <tc>-lines = <tc>-lines -
1.
173 ENDIF.
174 ENDIF.
175 ENDLOOP.
176
177 ENDFORM.
" FCODE_DELETE_ROW
178
179 *&---------------------------------------------------------------------*
180 *& Form COMPUTE_SCROLLING_IN_TC
181 *&---------------------------------------------------------------------*
182 * text
183 *----------------------------------------------------------------------*
184 * -->P_TC_NAME name of tablecontrol
185 * -->P_OK ok code
186 *----------------------------------------------------------------------*
187 FORM compute_scrolling_in_tc
USING p_tc_name
188 p_ok.
189 *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
190 DATA l_tc_new_top_line
TYPE i.
191 DATA l_tc_name
LIKE feld-
name.
192 DATA l_tc_lines_name
LIKE feld-
name.
193 DATA l_tc_field_name
LIKE feld-
name.
194
195 FIELD-SYMBOLS <tc>
TYPE cxtab_control.
196 FIELD-SYMBOLS <lines>
TYPE i.
197 *&SPWIZARD: END OF LOCAL DATA------------------------------------------*
198
199 ASSIGN (p_tc_name)
TO <tc>
.
200 *&SPWIZARD: get looplines of TableControl *
201 CONCATENATE 'G_' p_tc_name
'_LINES' INTO l_tc_lines_name.
202 ASSIGN (l_tc_lines_name)
TO <lines>
.
203
204
205 *&SPWIZARD: is no line filled? *
206 IF <tc>-lines =
0.
207 *&SPWIZARD: yes, ... *
208 l_tc_new_top_line =
1.
209 ELSE.
210 *&SPWIZARD: no, ... *
211 CALL FUNCTION 'SCROLLING_IN_TABLE'
212 EXPORTING
213 entry_act = <tc>-
top_line
214 entry_from =
1
215 entry_to = <tc>-
lines
216 last_page_full =
'X'
217 loops = <lines>
218 ok_code =
p_ok
219 overlapping =
'X'
220 IMPORTING
221 entry_new =
l_tc_new_top_line
222 EXCEPTIONS
223 * NO_ENTRY_OR_PAGE_ACT = 01
224 * NO_ENTRY_TO = 02
225 * NO_OK_CODE_OR_PAGE_GO = 03
226 OTHERS =
0.
227 ENDIF.
228
229 *&SPWIZARD: get actual tc and column *
230 GET CURSOR FIELD l_tc_field_name
231 AREA l_tc_name.
232
233 IF syst-subrc =
0.
234 IF l_tc_name =
p_tc_name.
235 *&SPWIZARD: et actual column *
236 SET CURSOR FIELD l_tc_field_name
LINE 1.
237 ENDIF.
238 ENDIF.
239
240 *&SPWIZARD: set the new top line *
241 <tc>-top_line =
l_tc_new_top_line.
242
243
244 ENDFORM.
" COMPUTE_SCROLLING_IN_TC
245
246 *&---------------------------------------------------------------------*
247 *& Form FCODE_TC_MARK_LINES
248 *&---------------------------------------------------------------------*
249 * marks all TableControl lines
250 *----------------------------------------------------------------------*
251 * -->P_TC_NAME name of tablecontrol
252 *----------------------------------------------------------------------*
253 FORM fcode_tc_mark_lines
USING p_tc_name
254 p_table_name
255 p_mark_name.
256 *&SPWIZARD: EGIN OF LOCAL DATA-----------------------------------------*
257 DATA l_table_name
LIKE feld-
name.
258
259 FIELD-SYMBOLS <tc>
TYPE cxtab_control.
260 FIELD-SYMBOLS <table>
TYPE STANDARD
TABLE.
261 FIELD-SYMBOLS <wa>
.
262 FIELD-SYMBOLS <mark_field>
.
263 *&SPWIZARD: END OF LOCAL DATA------------------------------------------*
264
265 ASSIGN (p_tc_name)
TO <tc>
.
266
267 *&SPWIZARD: get the table, which belongs to the tc *
268 CONCATENATE p_table_name
'[]' INTO l_table_name.
"table body
269 ASSIGN (l_table_name)
TO <table>.
"not headerline
270
271 *&SPWIZARD: mark all filled lines *
272 LOOP AT <table> ASSIGNING <wa>
.
273
274 *&SPWIZARD: access to the component 'FLAG' of the table header *
275 ASSIGN COMPONENT p_mark_name
OF STRUCTURE <wa>
TO <mark_field>
.
276
277 <mark_field> =
'X'.
278 ENDLOOP.
279 ENDFORM.
"fcode_tc_mark_lines
280
281 *&---------------------------------------------------------------------*
282 *& Form FCODE_TC_DEMARK_LINES
283 *&---------------------------------------------------------------------*
284 * demarks all TableControl lines
285 *----------------------------------------------------------------------*
286 * -->P_TC_NAME name of tablecontrol
287 *----------------------------------------------------------------------*
288 FORM fcode_tc_demark_lines
USING p_tc_name
289 p_table_name
290 p_mark_name .
291 *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
292 DATA l_table_name
LIKE feld-
name.
293
294 FIELD-SYMBOLS <tc>
TYPE cxtab_control.
295 FIELD-SYMBOLS <table>
TYPE STANDARD
TABLE.
296 FIELD-SYMBOLS <wa>
.
297 FIELD-SYMBOLS <mark_field>
.
298 *&SPWIZARD: END OF LOCAL DATA------------------------------------------*
299
300 ASSIGN (p_tc_name)
TO <tc>
.
301
302 *&SPWIZARD: get the table, which belongs to the tc *
303 CONCATENATE p_table_name
'[]' INTO l_table_name.
"table body
304 ASSIGN (l_table_name)
TO <table>.
"not headerline
305
306 *&SPWIZARD: demark all filled lines *
307 LOOP AT <table> ASSIGNING <wa>
.
308
309 *&SPWIZARD: access to the component 'FLAG' of the table header *
310 ASSIGN COMPONENT p_mark_name
OF STRUCTURE <wa>
TO <mark_field>
.
311
312 <mark_field> =
space.
313 ENDLOOP.
314 ENDFORM.
"fcode_tc_mark_lines
315 *&---------------------------------------------------------------------*
316 *& Form FRM_MODIFY_LINES
317 *&---------------------------------------------------------------------*
318 *& text
319 *&---------------------------------------------------------------------*
320 *& --> p1 text
321 *& <-- p2 text
322 *&---------------------------------------------------------------------*
323 FORM frm_modify_lines .
324 DATA ls_cols
LIKE LINE OF tc_ctrl_tab-
cols.
325
326 LOOP AT tc_ctrl_tab-cols
INTO ls_cols.
327 IF ls_cols-index =
'1'.
328 IF ls_cols-screen-input =
'0'.
329 ls_cols-screen-input =
'1'.
330 ELSE.
331 ls_cols-screen-input =
'0'.
332 ENDIF.
333 MODIFY tc_ctrl_tab-cols
FROM ls_cols.
334 ENDIF.
335 ENDLOOP .
336 ENDFORM.
1 *----------------------------------------------------------------------*
2 ***INCLUDE ZDEMO_DIALOGHELP.
3 *----------------------------------------------------------------------*
4 *&---------------------------------------------------------------------*
5 *& Module F4_HELP_WAREHOUSE INPUT
6 *&---------------------------------------------------------------------*
7 * text
8 *----------------------------------------------------------------------*
9 MODULE f4_help_warehouse INPUT.
10 TYPES:
BEGIN OF lty_lgort,
11 werks
TYPE t001l-
werks,
12 lgort
TYPE t001l-
lgort,
13 lgobe
TYPE t001l-
lgobe,
14 END OF lty_lgort.
15
16 DATA:lt_lgort
TYPE TABLE OF lty_lgort.
17
18 IF t001w-werks
IS NOT INITIAL.
19 SELECT werks lgort lgobe
INTO TABLE lt_lgort
FROM t001l
WHERE werks = t001w-
werks.
20
21 CHECK sy-subrc
EQ 0.
22 CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
23 EXPORTING
24 * DDIC_STRUCTURE = ' '
25 retfield =
'LGORT'
26 * PVALKEY = ' '
27 dynpprog = sy-
cprog
28 dynpnr = sy-
dynnr
29 dynprofield =
'T001L-LGORT'
30 * STEPL = 0
31 window_title =
'WAREHOUSE SELECTION'
32 * VALUE = ' '
33 value_org =
'S'
34 * MULTIPLE_CHOICE = ' '
35 * DISPLAY = ' '
36 * CALLBACK_PROGRAM = ' '
37 * CALLBACK_FORM = ' '
38 * CALLBACK_METHOD =
39 * MARK_TAB =
40 * IMPORTING
41 * USER_RESET =
42 TABLES
43 value_tab =
lt_lgort
44 * FIELD_TAB =
45 * RETURN_TAB =
46 * DYNPFLD_MAPPING =
47 * EXCEPTIONS
48 * PARAMETER_ERROR = 1
49 * NO_VALUES_FOUND = 2
50 * OTHERS = 3
51 .
52 IF sy-subrc <>
0.
53 * Implement suitable error handling here
54 ENDIF.
55
56 ELSE.
57 CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
58 EXPORTING
59 tabname =
'T001L'
60 fieldname =
'LGORT'
61 * SEARCHHELP = ' '
62 * SHLPPARAM = ' '
63 dynpprog = sy-
repid
64 dynpnr = sy-
dynnr
65 dynprofield =
'T001L-LGORT'
66 * STEPL = 0
67 * VALUE = ' '
68 * MULTIPLE_CHOICE = ' '
69 * DISPLAY = ' '
70 * SUPPRESS_RECORDLIST = ' '
71 * CALLBACK_PROGRAM = ' '
72 * CALLBACK_FORM = ' '
73 * CALLBACK_METHOD =
74 * SELECTION_SCREEN = ' '
75 * IMPORTING
76 * USER_RESET =
77 * TABLES
78 * RETURN_TAB =
79 * EXCEPTIONS
80 * FIELD_NOT_FOUND = 1
81 * NO_HELP_FOR_FIELD = 2
82 * INCONSISTENT_HELP = 3
83 * NO_VALUES_FOUND = 4
84 * OTHERS = 5
85 .
86 IF sy-subrc <>
0.
87 * Implement suitable error handling here
88 ENDIF.
89
90
91 ENDIF.
92 ENDMODULE.
93 *&---------------------------------------------------------------------*
94 *& Module F4_HELP_MATERIAL INPUT
95 *&---------------------------------------------------------------------*
96 * text
97 *----------------------------------------------------------------------*
98 MODULE f4_help_material INPUT.
99 TYPES:
BEGIN OF lty_matnr,
100 werks
TYPE mard-
werks,
101 lgort
TYPE mard-
lgort,
102 matnr
TYPE mard-
matnr,
103 maktx
TYPE makt-
maktx,
104 END OF lty_matnr.
105
106 DATA:lt_matnr
TYPE TABLE OF lty_matnr.
107
108 IF t001w-werks
IS NOT INITIAL
109 AND t001l-lgort
IS NOT INITIAL.
110 SELECT a~werks a~lgort a~matnr b~maktx
111 INTO TABLE lt_matnr
112 FROM mard AS a
113 INNER JOIN makt AS b
ON b~matnr = a~matnr
AND b~spras = sy-
langu
114 WHERE a~werks = t001w-
werks
115 AND a~lgort = t001l-
lgort.
116
117 CHECK sy-subrc
EQ 0.
118 CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
119 EXPORTING
120 * DDIC_STRUCTURE = ' '
121 retfield =
'MATNR'
122 * PVALKEY = ' '
123 dynpprog = sy-
cprog
124 dynpnr = sy-
dynnr
125 dynprofield =
'MAKT-MATNR'
126 * STEPL = 0
127 window_title =
'MATERIAL SELECTION'
128 * VALUE = ' '
129 value_org =
'S'
130 * MULTIPLE_CHOICE = ' '
131 * DISPLAY = ' '
132 * CALLBACK_PROGRAM = ' '
133 * CALLBACK_FORM = ' '
134 * CALLBACK_METHOD =
135 * MARK_TAB =
136 * IMPORTING
137 * USER_RESET =
138 TABLES
139 value_tab =
lt_matnr
140 * FIELD_TAB =
141 * RETURN_TAB =
142 * DYNPFLD_MAPPING =
143 * EXCEPTIONS
144 * PARAMETER_ERROR = 1
145 * NO_VALUES_FOUND = 2
146 * OTHERS = 3
147 .
148 IF sy-subrc <>
0.
149 * Implement suitable error handling here
150 ENDIF.
151
152 ELSE.
153 CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
154 EXPORTING
155 tabname =
'MAKT'
156 fieldname =
'MATNR'
157 * SEARCHHELP = ' '
158 * SHLPPARAM = ' '
159 dynpprog = sy-
repid
160 dynpnr = sy-
dynnr
161 dynprofield =
'MAKT-MATNR'
162 * STEPL = 0
163 * VALUE = ' '
164 * MULTIPLE_CHOICE = ' '
165 * DISPLAY = ' '
166 * SUPPRESS_RECORDLIST = ' '
167 * CALLBACK_PROGRAM = ' '
168 * CALLBACK_FORM = ' '
169 * CALLBACK_METHOD =
170 * SELECTION_SCREEN = ' '
171 * IMPORTING
172 * USER_RESET =
173 * TABLES
174 * RETURN_TAB =
175 * EXCEPTIONS
176 * FIELD_NOT_FOUND = 1
177 * NO_HELP_FOR_FIELD = 2
178 * INCONSISTENT_HELP = 3
179 * NO_VALUES_FOUND = 4
180 * OTHERS = 5
181 .
182 IF sy-subrc <>
0.
183 * Implement suitable error handling here
184 ENDIF.
185
186
187 ENDIF.
188 ENDMODULE.
DEMO 得效果图如下,屏幕就自己画下哈, TABLE Control he tablstrip 都是用引导功能画得