ABAP 选择屏幕多级联动
首先,要在表里维护对应数据,数据在各级的下拉框中必须有相应标识,比如一级下拉框的数据为AAA和BBB,二级下拉框的数据应为AAABBB,BBBCCC……以此类推。在ABAP中,根据一级下拉框的内容,那么二级下拉框的内容的前三位和一级的一样,那么即可联动。
下面放出demo表和代码:
REPORT ZMYDEMO019.
TYPE-POOLS VRM.
DATA:NAME TYPE VRM_ID.
DATA:NUM TYPE I. "根据PRODH字段长度判断 某行属于哪一级
DATA:LOADED TYPE C LENGTH 1."控制不重复查询数据库和不反复append数据 to WA1[]
TYPES: BEGIN OF WA,
KEY(40),
TEXT(80) TYPE C,
END OF WA.
DATA:GT TYPE TABLE OF ZT179T,
GS TYPE ZT179T.
DATA:WA1 TYPE TABLE OF WA WITH HEADER LINE."111
DATA:WA2 TYPE TABLE OF WA WITH HEADER LINE."111222
DATA:WA3 TYPE TABLE OF WA WITH HEADER LINE."111222333
DATA: PS_T(15) TYPE C.
DATA: PS_T2(15) TYPE C.
DATA: PS_T3(15) TYPE C.
DATA: PS_T4(40) TYPE C.
SELECTION-SCREEN:BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN COMMENT 1(31) TEXT-003.
PARAMETERS:
P_WERKS LIKE PS_T AS LISTBOX VISIBLE LENGTH 20 USER-COMMAND US1, "工厂
P_ZQMCJ LIKE PS_T2 AS LISTBOX VISIBLE LENGTH 20 USER-COMMAND US2, "车间
P_VLSCH LIKE PS_T3 AS LISTBOX VISIBLE LENGTH 20 USER-COMMAND US3, "工序
P_WSDJ LIKE PS_T4 AS LISTBOX VISIBLE LENGTH 20. "温湿度计位置
SELECTION-SCREEN:END OF BLOCK B1.
INITIALIZATION.
*AT SELECTION-SCREEN OUTPUT.
NAME = 'P_WERKS'.
IF LOADED IS INITIAL.
SELECT * FROM ZT179T INTO CORRESPONDING FIELDS OF TABLE GT .
LOADED = 'X'.
LOOP AT GT INTO GS.
NUM = STRLEN( GS-PRODH ).
IF NUM = 4.
WA1-TEXT = GS-VTEXT."Description
WA1-KEY = GS-PRODH."Product hierarchy key field
APPEND: WA1.
ENDIF.
CLEAR: GS,NUM,WA1."CLEAR 清空WA1工作区,不清空WA1[]内表
ENDLOOP.
ENDIF.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = NAME
VALUES = WA1[].
AT SELECTION-SCREEN.
CASE SY-UCOMM.
WHEN 'US1'.
CLEAR: P_ZQMCJ,P_WSDJ.
"清空2、3级下拉空默认值,当用户在选择屏幕上重新选择时需要清除
CLEAR:WA2,WA2[].
"清空2级下拉内表对应的值,当用户在选择屏幕上重新选择时需要清除
CLEAR NUM.
LOOP AT GT INTO GS .
NUM = STRLEN( GS-PRODH ).
IF NUM = 10 AND GS-PRODH+0(4) = P_WERKS.
WA2-TEXT = GS-VTEXT.
WA2-KEY = GS-PRODH.
APPEND: WA2.
ENDIF.
CLEAR:GS,NUM,WA2.
ENDLOOP.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = 'P_ZQMCJ'
VALUES = WA2[].
CLEAR P_ZQMCJ.
WHEN 'US2'.
CLEAR P_VLSCH.
"清空3级下拉空默认值,当用户在选择屏幕上重新选择时需要清除
CLEAR:WA3,WA3[].
"清空3级下拉内表对应的值,当用户在选择屏幕上重新选择时需要清除
CLEAR NUM.
LOOP AT GT INTO GS .
NUM = STRLEN( GS-PRODH ).
IF NUM = 14 AND GS-PRODH+0(10) = P_ZQMCJ.
WA3-TEXT = GS-VTEXT.
WA3-KEY = GS-PRODH.
APPEND: WA3.
ENDIF.
CLEAR:GS,NUM,WA3.
ENDLOOP.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = 'P_VLSCH'
VALUES = WA3[].
CLEAR P_VLSCH.
WHEN 'US3'.
CLEAR P_WSDJ.
"清空3级下拉空默认值,当用户在选择屏幕上重新选择时需要清除
CLEAR:WA3,WA3[].
"清空3级下拉内表对应的值,当用户在选择屏幕上重新选择时需要清除
CLEAR NUM.
LOOP AT GT INTO GS .
NUM = STRLEN( GS-PRODH ).
IF NUM = 15 AND GS-PRODH+13(2) = P_VLSCH+12(2) AND GS-PRODH+0(10) = P_ZQMCJ.
WA3-TEXT = GS-VTEXT.
WA3-KEY = GS-PRODH.
APPEND: WA3.
ENDIF.
CLEAR:GS,NUM,WA3.
ENDLOOP.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = 'P_WSDJ'
VALUES = WA3[].
CLEAR P_WSDJ.
ENDCASE.
START-OF-SELECTION.
PERFORM FRM_GET_DATA.
PERFORM FRM_DIS_DATA.
END-OF-SELECTION.
FORM FRM_GET_DATA.
ENDFORM.
FORM FRM_DIS_DATA.
ENDFORM.
"GUI状态
FORM FRM_STATUS USING LT_EXTAB.
SET PF-STATUS 'STANDARD'.
ENDFORM.
表内容:
1101 1101
1101000001 205
110100000100103 温湿度计 1 - 细纱14#-15#机之间
110100000100104 温湿度计 1 - 倍捻17#-18#机之间
110100000100203 温湿度计 2 - 细纱26#-27#机之间
110100000100204 温湿度计 2 - 倍捻26#-27#机之间
11010000010103 FS0005 细纱
11010000010204 FS0012 倍捻
1101000002 206
110100000200103 温湿度计 1 - 细纱40#-41#机旁
110100000200104 温湿度计 1 - 倍捻4#-5#机之间
110100000200203 温湿度计 2 - 细纱53#-54#机旁
110100000200204 温湿度计 2 - 倍捻39#-40#机之间
11010000020103 FS0005 细纱
11010000020204 FS0012 倍捻
1101000003 207
110100000300103 温湿度计 1 - 细纱31#-32#机之间
110100000300104 温湿度计 1 - 倍捻12#-13#机之间
110100000300203 温湿度计 2 - 细纱46#-47#机之间
110100000300204 温湿度计 2 - 倍捻44#-45#机之间
11010000030103 FS0005 细纱
11010000030204 FS0012 倍捻
1101000004 208
110100000400203 温湿度计 1 - 细纱14#-15#机之间
110100000400204 温湿度计 1 - 倍捻19#-20#机之间
110100000400205 温湿度计 1 - 并纱1#-2#机之间
11010000040103 FS0005 细纱
11010000040204 FS0012 倍捻
11010000040305 FS0007 自络
1101000005 106
110100000500106 温湿度计 1 - 梳棉4#机旁
110100000500107 温湿度计 1 - 并条4#-5#机旁
110100000500206 温湿度计 2 - 梳棉12#机旁
11010000050106 FS0002 清梳联
11010000050207 FS0003 并条
1101000006 107
110100000600106 温湿度计 1 - 梳棉3#-8#机之间
110100000600107 温湿度计 1 - 并条2#-3#机之间
11010000060106 FS0002 清梳联
11010000060207 FS0003 并条
1101000007 108
110100000700207 温湿度计 1 - 头并和末并之间
11010000070107 FS0003 并条
1102 1102
1102000001 201
110200000100103 温湿度计 1 - 细纱10#-11#机之间
110200000100104 温湿度计 1 - 倍捻3#-5#机之间
110200000100108 温湿度计 1 - 捻线12#-13#机之间
110200000100203 温湿度计 2 - 细纱24#-25#机之间
11020000010103 FS0005 细纱
11020000010208 FS0009 捻线
11020000010304 FS0012 倍捻
1102000002 202
110200000200103 温湿度计 1 - 细纱5#-6#机之间
110200000200108 温湿度计 1 - 捻线5#-6#机之间
110200000200109 温湿度计 1 - 并纱1#-槽筒3#机之间
110200000200203 温湿度计 2 - 细纱14#-15#机之间
110200000200208 温湿度计 2 - 捻线21#-22#机之间
110200000200303 温湿度计 3 - 细纱24#-25#机之间
110200000200403 温湿度计 4 - 细纱33#-34#机之间
11020000020103 FS0005 细纱
11020000020209 FS0008 并纱
11020000020308 FS0009 捻线
1102000003 203
110200000300103 温湿度计 1 - 细纱5#-6#机之间
110200000300108 温湿度计 1 - 捻线6#-7#机之间
110200000300109 温湿度计 1 - 并纱1#-2#机之间
110200000300203 温湿度计 2 - 细纱14#-15#机之间
110200000300208 温湿度计 2 - 捻线18#-19#机之间
110200000300303 温湿度计 3 - 细纱24#-25#机之间
110200000300403 温湿度计 4 - 细纱33#-34#机之间
11020000030103 FS0005 细纱
11020000030209 FS0008 并纱
11020000030308 FS0009 捻线
1102000004 204
110200000400103 温湿度计 1 - 细纱5#-6#机之间
110200000400104 温湿度计 1 - 倍捻5#-6#机之间
110200000400203 温湿度计 2 - 细纱25#-26#机之间
110200000400204 温湿度计 2 - 倍捻25#-26#机之间
110200000400303 温湿度计 3 - 细纱34#-35#机之间
110200000400304 温湿度计 3 - 倍捻36#-37#机之间
110200000400403 温湿度计 4 - 细纱53#-54#机之间
110200000400404 温湿度计 4 - 倍捻59#-60#机之间
11020000040103 FS0005 细纱
11020000040204 FS0012 倍捻
1102000005 102
110200000500106 温湿度计 1 - 抓棉机与总控柜之间
110200000500107 温湿度计 1 - 并条2#-3#机之间
110200000500206 温湿度计 2 - 梳棉2#-7#机之间
11020000050106 FS0002 清梳联
11020000050207 FS0003 并条
1102000006 103
110200000600106 温湿度计 1 - 梳棉11#-12#机之间
110200000600107 温湿度计 1 - 并条2#-3#机之间
110200000600110 温湿度计 1 - 粗纱3#-并条1#之间
11020000060106 FS0002 清梳联
11020000060207 FS0003 并条
11020000060310 FS0004 粗纱
1102000007 104
110200000700106 温湿度计 1 - 多仓-粗纱6#机之间
110200000700107 温湿度计 1 - 并条1#-2#机之间
110200000700110 温湿度计 1 - 粗纱更衣室处
110200000700206 温湿度计 2 - 梳棉7#-8#机之间
11020000070106 FS0002 清梳联
11020000070207 FS0003 并条
11020000070310 FS0004 粗纱
创建表ZT179T,维护上述数据之后即可看到效果~
文章来自于网络,如果侵犯了您的权益,请联系站长删除!