SAP选择屏幕中实现三级联动下拉框效果

来源:互联网 发布:淘宝开店时长查询 编辑:程序博客网 时间:2024/06/18 17:50
REPORT TEST.

TYPE-POOLS:vrm.
DATAname TYPE vrm_id.
DATA:num TYPE i"根据PRODH字段长度判断 某行属于哪一级
DATA:loaded TYPE LENGTH 1."控制不重复查询数据库和不反复append数据 to WA1[]



TYPESBEGIN OF wa,
         key(40),
         text(80TYPE c,
       END OF wa.
DATA:gt LIKE t179t OCCURS 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 WITH HEADER LINE.
DATAps_t(15TYPE c.
SELECTION-SCREEN BEGIN OF BLOCK t1 WITH FRAME TITLE TEXT-001.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31TEXT-003.
PARAMETERSpl1 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(31TEXT-004.
PARAMETERSpl2 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(31TEXT-005.
PARAMETERSpl3 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.

    gt-prodh '00001'.
    gt-vtext '服务器'.
    append gt.
    clear gt.

    gt-prodh '0000100001'.
    gt-vtext '服务器00001'.
    append gt.
    clear gt.


    gt-prodh '000010000100000001'.
    gt-vtext '服务器0000100000001'.
    append gt.
    clear gt.

    gt-prodh '000010000100000002'.
    gt-vtext '服务器0000100000002'.
    append gt.
    clear gt.



    gt-prodh '00002'.
    gt-vtext 'PC'.
    append gt.
    clear gt.

    gt-prodh '0000200001'.
    gt-vtext 'PC0000200001'.
    append gt.
    clear gt.


    gt-prodh '000020000100000001'.
    gt-vtext 'PC000020000100000001'.
    append gt.
    clear gt.

    gt-prodh '000020000100000002'.
    gt-vtext 'PC000020000100000002'.
    append gt.
    clear gt.



    loaded 'X'.
    LOOP AT gt.
      num strlengt-prodh ).
      IF num 5.
        wa1-text  gt-vtext."Description
        wa1-key   gt-prodh."Product hierarchy   key field
        APPENDwa1.
      ENDIF.
      CLEARgt,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'.
      CLEARpl2,pl3.
      "清空2、3级下拉空默认值,当用户在选择屏幕上重新选择时需要清除
      CLEAR:wa2,wa2[].
      "清空2级下拉内表对应的值,当用户在选择屏幕上重新选择时需要清除
      CLEAR num.
      LOOP AT gt .
        num strlengt-prodh ).
        IF num 10 AND gt-prodh+0(5pl1.

          wa2-text  gt-vtext.
          wa2-key   gt-prodh.
          APPENDwa2.

        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 strlengt-prodh ).
        IF num 18 AND gt-prodh+0(10pl2.

          wa3-text  gt-vtext.
          wa3-key   gt-prodh.
          APPENDwa3.

        ENDIF.
        CLEAR:gt,num,wa3.
      ENDLOOP.

      CALL FUNCTION 'VRM_SET_VALUES'
        EXPORTING
          id     'PL3'
          values wa3[].
      CLEAR pl3.
  ENDCASE.
原创粉丝点击