SAP ABAP 下拉框多级联动代码分享

该代码示例展示了一种在SAPABAP中创建多级联动下拉框的方法。通过遍历数据库表T179获取产品层级信息,并根据用户在选择屏幕上的选择动态填充下一级别的列表。利用VRM_SET_VALUES函数设置下拉框的值,实现一级、二级和三级类别的联动效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 LIKE T179T OCCURS 0 WITH HEADER LINE.
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:ITAB LIKE T179T OCCURS 0 WITH HEADER LINE.
DATA: PS_T(15) TYPE C.
SELECTION-SCREEN BEGIN OF BLOCK T1 WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) TEXT-003.
PARAMETERS: PL1 LIKE PS_T AS LISTBOX VISIBLE LENGTH 15 USER-COMMAND P1.
"一级类
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
 
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) TEXT-004.
PARAMETERS: PL2 LIKE PS_T AS LISTBOX VISIBLE LENGTH 15 USER-COMMAND P2.
"二级类
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) TEXT-005.
PARAMETERS: PL3 LIKE PS_T AS LISTBOX VISIBLE LENGTH 15.
"三级类
SELECTION-SCREEN END OF LINE.
 
SELECTION-SCREEN END OF BLOCK T1.
 
INITIALIZATION.
 
 
AT SELECTION-SCREEN OUTPUT.
  NAME = 'PL1'.
  IF LOADED  IS INITIAL.
  SELECT *  FROM T179T INTO TABLE GT  WHERE SPRAS = 1.
  LOADED = 'X'.
  LOOP AT GT.
    NUM = STRLEN( GT-PRODH ).
    IF NUM = 5.
      WA1-TEXT  = GT-VTEXT."Description
      WA1-KEY   = GT-PRODH."Product hierarchy   key field
      APPEND: WA1.
    ENDIF.
    CLEAR: GT,NUM,WA1."CLEAR 清空WA1工作区,不清空WA1[]内表
  ENDLOOP.
  ENDIF.
  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      ID     = NAME
      VALUES = WA1[].
AT SELECTION-SCREEN.
  CASE SY-UCOMM.
    WHEN 'P1'.
      CLEAR: PL2,PL3.
      "清空2、3级下拉空默认值,当用户在选择屏幕上重新选择时需要清除
      CLEAR:WA2,WA2[].
      "清空2级下拉内表对应的值,当用户在选择屏幕上重新选择时需要清除
      CLEAR NUM.
      LOOP AT GT .
        NUM = STRLEN( GT-PRODH ).
        IF NUM = 10 AND GT-PRODH+0(5) = PL1.
          WA2-TEXT  = GT-VTEXT.
          WA2-KEY   = GT-PRODH.
          APPEND: WA2.
        ENDIF.
        CLEAR:GT,NUM,WA2.
      ENDLOOP.
      CALL FUNCTION 'VRM_SET_VALUES'
        EXPORTING
          ID     = 'PL2'
          VALUES = WA2[].
      CLEAR PL2.
    WHEN 'P2'.
      CLEAR PL3.
      "清空3级下拉空默认值,当用户在选择屏幕上重新选择时需要清除
      CLEAR:WA3,WA3[].
      "清空3级下拉内表对应的值,当用户在选择屏幕上重新选择时需要清除
      CLEAR NUM.
      LOOP AT GT .
        NUM = STRLEN( GT-PRODH ).
        IF NUM = 18 AND GT-PRODH+0(10) = PL2.
          WA3-TEXT  = GT-VTEXT.
          WA3-KEY   = GT-PRODH.
          APPEND: WA3.
        ENDIF.
        CLEAR:GT,NUM,WA3.
      ENDLOOP.
      CALL FUNCTION 'VRM_SET_VALUES'
        EXPORTING
          ID     = 'PL3'
          VALUES = WA3[].
      CLEAR PL3.
  ENDCASE.

此方法可实现下拉框多级联动的效果。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值