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

REPORT TEST .

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



TYPES BEGIN  OF wa ,
          key ( 40 ) ,
          text ( 80 TYPE  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 .
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 .

     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  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
发出的红包

打赏作者

ChampaignWolf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值