傳回到上一螢幕
leave to screen 0.
報表事件塊
LOAD-OF-PROGRAM
INITIALIZATION
SELECTION-SCREEN OUTPUT (選擇螢幕PBO)
AT SELECTION SCREEN (ON XXX) (選擇螢幕PAI)
START-OF-SELECTION
END-OF-SELECTION
選擇螢幕元素屬性
required:0可選,1必輸且有錯誤檢查,2必輸但無檢查
invisible = 1,變*号
active = 0,不可見
傳回到選擇螢幕
LEAVE LIST-PROCESSING AND RETURN TO SCREEN 0.
調用選擇螢幕作為子螢幕 增加搜尋幫助
tables pa0001.
data:begin of itab OCCURS 0,
pernr like pa0001-pernr,
ename like pa0001-ename,
end of itab.
DATA SUB(4) VALUE '2001'.
data it_return type table of DDSHRETVAL WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF SCREEN 2001 as SUBSCREEN.
SELECT-OPTIONS pernr for pa0001-pernr no INTERVALS.
SELECTION-SCREEN END OF SCREEN 2001.
at SELECTION-SCREEN on VALUE-REQUEST FOR pernr-low.
SELECT pernr ename into table itab from pa0001.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'PERNR'
DYNPPROG = sy-REPID
DYNPNR = sy-dynnr
DYNPROFIELD = 'PERNR-low'
VALUE_ORG = 'S'
MULTIPLE_CHOICE = 'X'
TABLES
VALUE_TAB = ITAB
* FIELD_TAB =
RETURN_TAB = it_return.
if sy-subrc = 0.
loop at it_return.
* pernr-sign = 'i'.
* pernr-option = 'eq'.
pernr-low = it_return-fieldval.
append pernr.
ENDLOOP.
endif.
read table pernr index 1.
DIALOG調用選擇螢幕作為子螢幕
DATA gv_sub(4) value '0201' .
PROCESS BEFORE OUTPUT.
call subscreen sub1 including sy-repid gv_sub. "其中SUB1是子螢幕區域名,SUB是子螢幕名
MODULE STATUS_0100.
PROCESS AFTER INPUT.
CALL SUBSCREEN SUB1.
MODULE USER_COMMAND_0100.
其中選擇螢幕的處理直接寫在主程式中(可以寫在定義子螢幕語句後面),而不是寫在主螢幕的螢幕流中
at selection-screen output.
if sy-dynnr = '0201'.
*修改
loop at gt_qup where kbstat = 'Z1' or kbstat = 'Z3'.
loop at screen.
screen-input = 0.
modify screen.
endloop.
exit.
endloop.
endif.
選擇螢幕元素屬性修改(MODIF ID)
SELECTION-SCREEN BEGIN OF BLOCK B1.
SELECT-OPTIONS:
ZNAMC FOR AFRU-ZNAMC MATCHCODE OBJECT ZH_BGRYMD MODIF ID G1,
ERSDA FOR AFRU-ERSDA MODIF ID G1.
PARAMETERS P1(128).
SELECTION-SCREEN SKIP.
SELECTION-SCREEN COMMENT 1(62) TEXT-001.
SELECTION-SCREEN PUSHBUTTON 63(10) TEXT-002 USER-COMMAND PB1. "SELECTION-SCREEN PUSHBUTTON表示按鈕,63(10)位置和長度,TEXT-002按鈕顯示文本,USER-COMMAND PB1功能碼“PB1”
SELECTION-SCREEN END OF BLOCK B1.
loop at screen.
if screen-group1 = 'G1'.
if p_create = 'X'.
screen-active = 0.
else.
screen-active = 1.
endif.
modify screen.
endif.
endloop.
注:使用modify id 把screen屬性改為active時,螢幕這一行會自動沒了,如果使用screen-name,螢幕上會留下空行。
選擇螢幕字段顔色(藍色)
REPORT ZLAN.
PARAMETERS P1 MODIF ID P.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'P'.
SCREEN-INTENSIFIED = '1'. "增強的
MODIFY SCREEN.
ENDIF.
ENDLOOP.
選擇螢幕文本
SELECTION-SCREEN ULINE /1(72).
SELECTION-SCREEN COMMENT /1(72) TEXT1. "其中 / 就有了SKIP的效果
SELECTION-SCREEN COMMENT /1(72) TEXT-002.
SELECTION-SCREEN COMMENT /1(72) TEXT-003.
選擇螢幕字段自定義文本描述和可見長度
selection-screen begin of line.
selection-screen comment (10) text-001 . "此時描述和字段之間是沒有橫線的
selection-screen comment (10) text-001 for field pernr. "使用了FOR FIELD之後就有橫線了
select-options pernr for pa0001-pernr no intervals.
selection-screen end of line.
選擇螢幕字段動态描述文本
SELECTION-SCREEN COMMENT 1(12) TEXT_001 FOR FIELD ZPZT.
INITIALIZATION.
text_001 = '查詢條件'.
選擇螢幕字段密碼顯示效果(DIALOG則在屬性中勾選“不可見的”)
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF screen-name = 'SPWD' .
screen-invisible = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
選擇螢幕字段搜尋幫助
SELECT-OPTIONS ZNAMC FOR AFRU-ZNAMC MATCHCODE OBJECT ZH_BGRYMD.
多頁簽螢幕
SELECTION-SCREEN BEGIN OF TABBED BLOCK BL1 FOR 5 LINES. "FOR N LINES :指明螢幕有幾行
SELECTION-SCREEN TAB (10) TEXT1 USER-COMMAND SCREEN1 DEFAULT SCREEN 2001.
SELECTION-SCREEN TAB (10) TEXT2 USER-COMMAND SCREEN2 DEFAULT SCREEN 2002.
SELECTION-SCREEN END OF BLOCK BL1.
SELECTION-SCREEN BEGIN OF SCREEN 2001 AS SUBSCREEN.
PARAMETERS P1.
SELECTION-SCREEN BEGIN OF SCREEN 2002 AS SUBSCREEN.
PARAMETER P2.
SELECTION-SCREEN END OF SCREEN 2002.
其中BL1是一個對象(結構),有各種屬性,例如BL1-DYNNR(目前螢幕号)
調用選擇螢幕做為彈出視窗
SELECTION-SCREEN BEGIN OF SCREEN 9001 AS WINDOW.
PARAMETERS:
P_BUDAT LIKE ZMM005-BUDAT DEFAULT SY-DATUM,
P_STGRD LIKE BKPF-STGRD. "沖銷原因
SELECTION-SCREEN END OF SCREEN 9001.
call selection-screen 9001 starting at 30 10 ending at 120 20.
check sy-subrc = 0.
starting at 列 行 ending at 列 行.
選擇螢幕功能按鈕(在執行按鈕右邊 FUNCTION KEY)
TABLES SSCRFIELDS.
SELECTION-SCREEN FUNCTION KEY 1.
PARAMETERS P1.
SSCRFIELDS-FUNCTXT_01 = '開發說明'.
AT SELECTION-SCREEN. "選擇螢幕的AT SELECTION-SCREEN相當于DIALOG的PAI
IF SY-UCOMM = 'FC01'.
CALL TRANSACTION 'ZMM103_02'.
ENDIF.
隐藏function key
data lt_exclude type table of rsexfcode with header line.
if p_appro = ''.
lt_exclude-fcode = 'FC01'.
append lt_exclude.
call function 'RS_SET_SELSCREEN_STATUS'
exporting
p_status = '%_00'
p_program = 'RSSYSTDB'
tables
p_exclude = lt_exclude[].
SELECT-OPTION(RANGE表)
隻要輸入了HIGH字段,OPTION就會變成BETWEEN,BETWEEN時“*”不代表通配符,如輸入1*, 2*,SELECT效果等同于WHERE XX >= '1*' AND XX <='2*';即隻有在LOW輸入“*”且HIGH為空時“*”才表示通配符(此時OPTION為CP)
SIGN: I: 包含 E: 排除;注意隻有low單值的時候要輸入EQ,不能輸入BT
OPTION: NE不等于,EQ等于。可以EQ多個值,但不能NE多個值(是以如果要在I中NE多個值,可以寫成E中EQ多個值)
輸入起始日期的例子
if sdate is not initial or edate is not initial.
clear lv_char.
if sdate is not initial.
lv_char = 'IEQ'.
lr_erdat = lv_char.
if edate is not initial.
lv_char = 'IBT'.
lr_erdat-high = edate.
lr_erdat-low = sdate.
append lr_erdat.
動态RANGE類型
RSDSSELOPT
下拉框
選擇螢幕下拉框
使用函數
PARAMETERS P_ZFHZT(10) AS LISTBOX VISIBLE LENGTH 10.
*添加下拉框内表值
DATA GT_VALUES TYPE VRM_VALUES WITH HEADER LINE.
GT_VALUES-KEY = '1'. "KEY值才是傳回到螢幕字段的值,TEXT為其顯示文本
GT_VALUES-TEXT = '未完成'.
APPEND GT_VALUES.
GT_VALUES-KEY = '2'.
GT_VALUES-TEXT = '已完成'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_ZFHZT.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = 'P_ZFHZT' "螢幕字段名(不能亂填,否則有下拉效果但是沒值)
VALUES = GT_VALUES[].
直接在域中輸入VALUE RANGE,螢幕字段參考這個域
下拉框最底下的空行可以通過設定字段必輸取消