選擇螢幕動態隱藏欄位(SELECT-OPT…
阿新 • • 發佈:2019-01-02
申明:部落格針對初級顧問
選擇螢幕,比如查詢報表,有時候需要根據使用者選擇動態隱藏篩選條件
如果僅僅是灰掉不可顯示,直接screen-input = 0.就行,(1可編輯0不可編輯)
如果需要不顯示,screen-invisible = '1'.
如果使用了SELECT-OPTIONS:而且沒有設定NO-EXTENSION
後面會多出一個選擇值的按鈕來。
其實想去掉很簡單,直接debug看這個對應的名稱就行了。
一般前面lab頁籤是 %_定義欄位名稱_%_APP_%-TEXT
後面的值選擇按鈕是 '%_定義欄位名稱_%_APP_%-VALU_PUSH'
案例如下:
TABLES: bsid,vbak,vbrk,vbrp,knc1.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE
text-001.
PARAMETERS p_r RADIOBUTTON GROUP g1
USER-COMMAND select DEFAULT 'X'. "日模式
PARAMETERS p_y RADIOBUTTON GROUP g1
.
"月模式
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE t1 .
SELECT-OPTIONS:
s_bukrs FOR
bsid-bukrs ,
" 公司程式碼
s_vkorg FOR
vbak-vkorg ,
" 銷售組織
s_fkdat FOR
vbrk-fkdat ,
" 發票日期
s_kkber FOR
vbrk-kkber ,
" 信貸範圍
s_kunag FOR
vbrk-kunag ,
" 售達方
s_gsber FOR
vbrp-gsber ,
" 業務範圍
s_gjahr FOR
knc1-gjahr .
"
會計年度
PARAMETERS:
p_budat TYPE bsid-budat
,
" 記賬日期
p_span TYPE
num1 .
" 期間
SELECTION-SCREEN END OF BLOCK b2.
AT SELECTION-SCREEN OUTPUT .
PERFORM frm_modify_screen.
START-OF-SELECTION.
FORM frm_modify_screen .
LOOP AT SCREEN.
IF p_r IS NOT INITIAL. "如果是日模式,隱藏會計年底和期間
t1 = text-002.
IF screen-name = 'S_GJAHR' OR
screen-name = 'P_SPAN' OR
screen-name = '%_P_SPAN_%_APP_%-TEXT'.
CLEAR p_span.
CLEAR s_gjahr[].
screen-input = 0.
screen-invisible = '1'.
ENDIF.
ELSE. "如果是月模式,隱藏業務範圍和記賬日期
t1 = text-003.
IF screen-name = 'S_GSBER-LOW'
OR screen-name = 'P_BUDAT'
OR screen-name = 'S_GSBER-HIGH'
OR screen-name = '%_S_GSBER_%_APP_%-TEXT' "前面描述 lab籤
OR screen-name = '%_S_GSBER_%_APP_%-VALU_PUSH' "select options 後面的值選擇按鈕
OR screen-name = '%_P_BUDAT_%_APP_%-TEXT'.
CLEAR p_budat.
CLEAR s_gsber[].
screen-active = '1'.
screen-invisible = '1'.
screen-input = 0.
ENDIF.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDFORM. " FRM_MODIFY_SCREEN
LOOP AT SCREEN.
IF p_r IS NOT INITIAL. "如果是日模式,隱藏會計年底和期間
t1 = text-002.
IF screen-name = 'S_GJAHR' OR
screen-name = 'P_SPAN' OR
screen-name = '%_P_SPAN_%_APP_%-TEXT'.
CLEAR p_span.
CLEAR
screen-input = 0.
screen-invisible = '1'.
ENDIF.
ELSE. "如果是月模式,隱藏業務範圍和記賬日期
t1 = text-003.
IF screen-name = 'S_GSBER-LOW'
OR screen-name = 'P_BUDAT'
OR screen-name = 'S_GSBER-HIGH'
OR screen-name = '%_S_GSBER_%_APP_%-TEXT' "前面描述 lab籤
OR screen-name = '%_S_GSBER_%_APP_%-VALU_PUSH' "select options 後面的值選擇按鈕
OR screen-name = '%_P_BUDAT_%_APP_%-TEXT'.
CLEAR p_budat.
CLEAR s_gsber[].
screen-active = '1'.
screen-invisible = '1'.
screen-input = 0.
ENDIF.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDFORM. " FRM_MODIFY_SCREEN