选择屏幕
讀者從ABAP開發幫助文檔能了解選擇屏幕的使用,有本英文教材是<<21天學會ABAP>>,同樣本書的
目的是讓有一定程序基礎的讀者在三個月內成為ABAP顧問,故本書重點將放在實際業務分析上,因
此在此只是匯總下選擇屏幕的使用.
下面是一個典型的選擇屏幕的典型例子.
1.設置選擇屏幕參數.
***begin(end) of block使用屏幕元素邏輯塊.
SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME TITLE TITLE1.
***定義選擇標準,比如那些屏幕子段使用范圍,設置為必選或使用內存ID等.
SELECT-OPTIONS <seltab> FOR <f> DEFAULT│NO INTERVALS│OBLIGATORY│NO-DISPLAY│MEMORY
ID...
***要在選擇屏幕上書寫文本使用屏幕注釋并在屏幕初始化時賦值.
SELECTION-SCREEN COMMENT ...
***在屏幕上畫線.
SELECTION-SCREEN ULINE ...
***Begind(end)of line包含的屏幕參數將在同一條直線上.
SELECTION-SCREEN BEGIN OF LINE...
SELECTION-SCREEN END OF LINE...
***設置屏幕位置.
SELECTION-SCREEN POSITION...
***在應用工具條上創建按鈕響應事件
SELECTION-SCREEN FUNCTION KEY...
***在屏幕上創建按鈕.
SELECTION SCREEN PUSHBUTTON ...
SELECTION-SCREEN END OF BLOCK BK1.
INITIALIZATION.
***初始化屏幕參數,類似VB的Form_load事件***
AT SELECTION-SCREEN <on help(value)-request for field│>.
***系統選擇屏幕時的過程處理,比如需要判斷一些屏幕字段的條件限制如為某些值則***顯示
error message,程序沒有必要浪費時間繼續執行下去.
***on help-request 可為屏幕字段顯示自定義幫助
***on value-request可顯示建議列表值
***可這樣理解AT selection-screen相當于 PBO.
***PERFORM sub_validate_FieldXXX .
***選屏后按Enter或F8運行時都會執行.
START-OF-SELECTION .
***設置內表值,處理沒有附加關鍵字的所有語句.
***通常包含在此的Form是在按F8后才開始執行.
END-OF_SELECTION .
AT USER-COMMAND.
***處理用戶請求事件,如報表使用ALV格式,通常在call function exporting
*** I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
***再建立一個子程序form USER_COMMAND USING UCOMM LIKE SY-UCOMM
AT LINE-SELECTION.
***通常此事件在報表顯示后用戶在列表中在選擇行時觸發.如報表使用的是write
***就可使用此事件.
*** SET PARAMETER ID 'XXX' FIELD XXX.
*** call transACtion 'XXX' AND SKIP FIRST SCREEN.
TOP-OF-PAGE.
*** 顯示數據,使用TOP-OF-PAGE是在分頁時可將定義的頁頭頁尾在每頁顯示.
*** PERFORM write_page_header(page header在每頁都顯示).
*** PERFORM DISPLAY_ALV_DATA.
END-OF-PAGE.
下面一個簡單的會計憑證顯示的實例說明選擇屏幕的使用.
***這程序只是做演示用,但是包含了常用的選擇屏幕技術.
將下面的程序copy就可跑.
REPORT ZSELECTION NO STANDARD PAGE HEADING
MESSAGE-ID zFIMSG "MEssage Class
LINE-SIZE 255
LINE-COUNT 32(3).
tables :BKPF,BSEG,S070.
DATA:ZBKPF like bkpf occurs 0 ,
zwa_bkpf like bkpf.
CONSTANTS:P_variant(2) TYPE c VALUE 'WL'.
***下面這些屏幕參數和事件沒有關系,只是參數集而已.
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE Cond1.
SELECT-OPTIONS S_bukrs FOR bkpf-bukrs MEMORY ID BUK.
SELECT-OPTIONS S_blart FOR bkpf-blart NO INTERVALS .
SELECT-OPTIONS S_belnr FOR bkpf-belnr .
SELECT-OPTIONS S_budat FOR bkpf-budat DEFAULT sy-datum.
SELECT-OPTIONS S_bldat FOR bkpf-bldat NO INTERVALS NO-EXTENSION.
SELECT-OPTIONS S_gjahr FOR bkpf-gjahr MEMORY ID GJR DEFAULT sy-datum(4).
SELECT-OPTIONS weekran for s070-SPBUP NO-EXTENSION .
SELECTION-SCREEN END OF BLOCK bk1.
SELECTION-SCREEN BEGIN OF BLOCK bk2 WITH FRAME TITLE Cond2.
SELECTION-SCREEN COMMENT /1(30) COMM1 . "使用屏幕注釋
SELECTION-SCREEN BEGIN OF LINE ."兩單選框將在同一條線上.
PARAMETERS pnor RADIOBUTTON GROUP grp1 DEFAULT 'X'."Print normal doc
PARAMETERS ppark RADIOBUTTON GROUP grp1. "Print parked doc
SELECTION-SCREEN END OF LINE .
SELECTION-SCREEN END OF BLOCK bk2.
***1 初始化參數.
INITIALIZATION.
Cond1 = '【Condition】'.
Cond2 = '【Normal Doc│Parked Doc】'.
COMM1 = 'Choose Doc. Type:'. "注釋賦初值.
***初始公司值,這在有些需要后臺跑的程序非常有用,除了使用variant外,在此也可賦初
***下面的例子在初始化后公司代碼選擇了1000和3000排除了2000
S_bukrs-low = '1000'.
S_bukrs-sign = 'I'. "I->包含,E->排除
S_bukrs-option = 'EQ'. "NE
APPEND S_bukrs.
S_bukrs-low = '2000'.
S_bukrs-sign = 'E'.
S_bukrs-option = 'EQ'.
APPEND S_bukrs.
S_bukrs-low = '3000'.
S_bukrs-sign = 'E'.
S_bukrs-option = 'EQ'.
APPEND S_bukrs.
***初始化doc range 從0100000000到1000000000
s_belnr-low = '0100000000'.
s_belnr-high = '1000000000'.
s_belnr-sign = 'I' .
s_belnr-option = 'BT'.
append s_belnr.
***2 使用sug_get_week后得到所選日期的當前周數,在選擇weekrag字段時才觸發.
***當你選擇weekran字段時.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR weekran-low.
PERFORM sub_get_week CHANGING weekran-low.
AT SELECTION-SCREEN.
***判斷所選擇的公司代碼是否有效,通常并不是必須的.
***當然你也可將此步省略,直接在START-OF-SELECTION判斷.
***根據需要可做很多vaid字段的判斷.
PERFORM SUB_VALIDATE_COMP.
***3開始選屏
START-OF-SELECTION.
Perform SUB_GET_DOC.
PERFORM SUB_WRT_DOC.
END-OF-SELECTION.
***4.分頁時顯示page header或page footer.
TOP-OF-PAGE.
perform sub_WRT_HEADER.
end-of-page.
***5.當點擊行并且是點到Document NO.CAll FB03.
AT line-selection.
Perform sub_line_response.
form sub_line_response.
Data: ZFLDNAME like DD01L-DOMNAME,
ZFLDVALUE like TTREET-TEXT,
zwa_bkpf like bkpf.
GET CURSOR FIELD ZFLDNAME VALUE ZFLDVALUE .
if ZFLDNAME = 'ZWA_BKPF-BELNR' .
* READ TABLE Zbkpf into zwa_bkpf WITH KEY BELNR = ZFLDVALUE.
* SET PARAMETER ID 'BUK' FIELD zwa_bkpf-BUKRS.
* SET PARAMETER ID 'GJR' FIELD zwa_bkpf-GJAHR.
* SET PARAMETER ID 'BLN' FIELD zwa_bkpf-BELNR.
SET PARAMETER ID 'BLN' FIELD ZFLDVALUE .
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
endif.
endform .
FORM SUB_GET_DOC.
refresh zbkpf .
SELECT * FROM bkpf into table Zbkpf
WHERE bukrs IN s_bukrs
AND belnr IN s_belnr
AND gjahr IN s_gjahr
AND budat IN s_budat.
endform.
form sub_wrt_header.
FORMAT INTENSIFIED COLOR = 6.
WRITE AT: /01 'Finaincial Document List:'(h07).
FORMAT COLOR COL_NORMAL ON.
FORMAT COLOR COL_HEADING ON.
WRITE AT:/01(48) sy-uline.
FORMAT COLOR COL_HEADING OFF.
FORMAT COLOR OFF.
endform.
form sub_wrt_doc.
uline /1(41).
loop at zbkpf into zwa_bkpf.
write:/ '│',zwa_bkpf-bukrs,'│',zwa_bkpf-belnr,'│',zwa_bkpf-gjahr,'│',zwa_bkpf-
budat,'│'.
uline /1(41).
endloop.
endform.
FORM SUB_VALIDATE_COMP.
data itab_bukrs like bkpf-bukrs occurs 0 .
select bukrs into table itab_bukrs
from T001
where BUKRS in S_bukrs .
if itab_bukrs IS INITIAL.
Message e002(00) .
endif.
endform.
FORM sub_get_week CHANGING wkran LIKE s070-SPBUP.
DATA: l_date LIKE workflds-gkday,
l_period LIKE t009b-poper,
l_year LIKE t009b-bdatj.
***根據選擇日期得到當前周數
CALL FUNCTION 'F4_DATE'
EXPORTING
date_for_first_month = sy-datum
display = ''
IMPORTING
select_date = l_date
EXCEPTIONS
calendar_buffer_not_loadable = 1
date_after_range = 2
date_before_range = 3
date_invalid = 4
factory_calendar_not_found = 5
holiday_calendar_not_found = 6
parameter_conflict = 7
OTHERS = 8.
CALL FUNCTION 'G_PERIOD_GET'
EXPORTING
date = l_date
***使用WL variant得到的period是周/年,空則是期間/年.
***在CO-PA或做計劃時,通常是以周做period的.
variant = P_variant "'WL'
IMPORTING
period = l_period
year = l_year
EXCEPTIONS
ledger_not_assigned_to_company = 1
period_not_defined = 2
variant_not_defined = 3
OTHERS = 4.
weekran-sign = 'I'.
weekran-option = 'EQ'.
CONCATENATE l_year l_period+1(2) INTO wkran.
endform.
總結
- 上一篇: SAP alv 去掉标准按钮
- 下一篇: ABAP QA