ABAP/4 報表編程模板初學者必看
*&--------------------------------------------------------------*
*& Report Z_X_XXXXX
*&Module : Module \SubModule
*&--------------------------------------------------------------*
*&Created : author (2009.10.09)
*&Modified : author (someday)
* Intention : 程序的詳細說明
* 請用戶在ABAP/4REPORT編程時,參考本程序提供的編程框架
*
* 在編碼規範有出入時,以本程序爲準
* 以下各事件可根據實際編程需要使用,對於需要處理的事件,可將該事
* 件後面的語句註釋去掉,再編寫相應的子程序代碼。
*&--------------------------------------------------------------*
INCLUDE Z_X_XXXXXTOP. " TOP 子程序,用來聲明全局變量
*----以下三個子程序只有在多個程序調用同一邏輯時才建議使用-----*
*INCLUDE Z_X_XXXXXO01. " PBO 子程序
*INCLUDE Z_X_XXXXXI01. " PAI 子程序
*INCLUDE Z_X_XXXXXF01. " form 子程序
INITIALIZATION.
* PERform INI_SELECTION_SCREEN. " 初始化選擇屏上的變量
AT SELECTION-SCREEN.
* PERform INI_DATA. " 初始化全局變量
START-OF-SELECTION.
* PERform PRECESS_DATA. " 主要數據處理邏輯
AT LINE-SELECTION.
* PERform PRECESS_LINE_SELECTED. " 行選擇時的處理
AT USER-COMMAND.
* PERform PRECESS_USER_COMMAND. * 用自定義命令按鈕時的處理
TOP-OF-PAGE.
* PERform PAGE_HEADER. " 頁眉
END-OF-PAGE.
* PERform PAGE_FOOT. " 頁腳
*&--------------------------------------------------------------*
*& form PRECESS_DATA
*&--------------------------------------------------------------*
* text
*---------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------*
form PRECESS_DATA.
*如果邏輯簡單, 則合併若干form爲一個
PERform SEL_DBTAB_XXXXX. "從透明表中取數據賦給內表
PERform CMP_ITAB_XXXXX. " 內表中數據計算處理
PERform WRT_ITAB_RESULT. " 輸出內表數據
ENDform. " PRECESS_DATA
*&--------------------------------------------------------------*
*& form SEL_DBTAB_XXXXX
*&--------------------------------------------------------------*
* text
*---------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------*
form SEL_DBTAB_XXXXX.
select * into corresponding fields of itab_sales
from bsid
where bukrs = s_bukrs.
authority-check object 'Z:FI-00001'
id 'ACTVT' field '03'
id 'BUKRS' field itab_sales-bukrs
id 'GSBER' fielditab_sales-gsber. "權限檢查
if sy-subrc ne0. "權限檢查未通過
continue.
endif.
append itab_sales.
clear itab_sales.
endselect.
ENDform. " SEL_DBTAB_XXXXX
*&--------------------------------------------------------------*
*& form CMP_ITAB_XXXXX
*&--------------------------------------------------------------*
* text
*---------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------*
form CMP_ITAB_XXXXX.
ENDform. " CMP_ITAB_XXXXX
*&--------------------------------------------------------------*
*& form WRT_ITAB_RESULT
*&--------------------------------------------------------------*
* text
*---------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------*
form WRT_ITAB_RESULT.
* PERform WRT_ITAB_SUB.
ENDform. " WRT_ITAB_RESULT
*&--------------------------------------------------------------*
*& form PAGE_HEADER
*&--------------------------------------------------------------*
* text
*---------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------*
form PAGE_HEADER.
ENDform. " PAGE_HEADER
*&--------------------------------------------------------------*
*& form INI_DATA
*&--------------------------------------------------------------*
* text
*---------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------*
form INI_DATA.
ENDform. " INI_DATA
*&--------------------------------------------------------------*
*& form INI_SELECTION_SCREEN
*&--------------------------------------------------------------*
* text
*---------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------*
form INI_SELECTION_SCREEN.
ENDform. " INI_SELECTION_SCREEN
*&--------------------------------------------------------------*
*& IncludeZ_X_XXXXXTOP
*&--------------------------------------------------------------*
REPORT Z_X_XXXXX .
*-------------------聲明系統字典對象----------------------------*
TABLES: t001.
*--------------------聲明 Selection-screen變量-----------------*
SELECTION-SCREEN BEGIN OF BLOCK B1
WITH FRAME
TITLE TEXT-001.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: S_BUKRS FOR T001-BUKRS MEMORY ID BUK.
PARAMETERS: P_DATE LIKESY-DATUM DEFAULT SY-DATUM.
SELECTION-SCREEN END OFBLOCK B1.
*--------------------聲明全局變量-------------------------------*
*聲明內表時,表名爲 ITAB_XXXX,後綴儘可能爲關聯DBTab或內表用途
DATA: bldat like bsid-bldat.
RANGES: R_FIELD FOR DBTAB-FIELD.
說明:以上是模板程序的框架及說明,在R/3系統的開發環境中有該模板程序(Z_X_XXXXX),建議編程序之前,先將該程序另存一新文件,再根據需要修改這新文件。
*&--------------------------------------------------------------*
*& Report Z_X_XXXXX
*&Module : Module \SubModule
*&--------------------------------------------------------------*
*&Created : author (2003.10.09)
*&Modified : author (someday)
* Intention : 程序的詳細說明
* 請用戶在ABAP/4REPORT編程時,參考本程序提供的編程框架
*
* 在編碼規範有出入時,以本程序爲準
* 以下各事件可根據實際編程需要使用,對於需要處理的事件,可將該事
* 件後面的語句註釋去掉,再編寫相應的子程序代碼。
*&--------------------------------------------------------------*
INCLUDE Z_X_XXXXXTOP. " TOP 子程序,用來聲明全局變量
*----以下三個子程序只有在多個程序調用同一邏輯時才建議使用-----*
*INCLUDE Z_X_XXXXXO01. " PBO 子程序
*INCLUDE Z_X_XXXXXI01. " PAI 子程序
*INCLUDE Z_X_XXXXXF01. " form 子程序
INITIALIZATION.
* PERform INI_SELECTION_SCREEN. " 初始化選擇屏上的變量
AT SELECTION-SCREEN.
* PERform INI_DATA. " 初始化全局變量
START-OF-SELECTION.
* PERform PRECESS_DATA. " 主要數據處理邏輯
AT LINE-SELECTION.
* PERform PRECESS_LINE_SELECTED. " 行選擇時的處理
AT USER-COMMAND.
* PERform PRECESS_USER_COMMAND. * 用自定義命令按鈕時的處理
TOP-OF-PAGE.
* PERform PAGE_HEADER. " 頁眉
END-OF-PAGE.
* PERform PAGE_FOOT. " 頁腳
*&--------------------------------------------------------------*
*& form PRECESS_DATA
*&--------------------------------------------------------------*
* text
*---------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------*
form PRECESS_DATA.
*如果邏輯簡單, 則合併若干form爲一個
PERform SEL_DBTAB_XXXXX. "從透明表中取數據賦給內表
PERform CMP_ITAB_XXXXX. " 內表中數據計算處理
PERform WRT_ITAB_RESULT. " 輸出內表數據
ENDform. " PRECESS_DATA
*&--------------------------------------------------------------*
*& form SEL_DBTAB_XXXXX
*&--------------------------------------------------------------*
* text
*---------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------*
form SEL_DBTAB_XXXXX.
select * into corresponding fields of itab_sales
from bsid
where bukrs = s_bukrs.
authority-check object 'Z:FI-00001'
id 'ACTVT' field '03'
id 'BUKRS' field itab_sales-bukrs
id 'GSBER' fielditab_sales-gsber. "權限檢查
if sy-subrc ne0. "權限檢查未通過
continue.
endif.
append itab_sales.
clear itab_sales.
endselect.
ENDform. " SEL_DBTAB_XXXXX
*&--------------------------------------------------------------*
*& form CMP_ITAB_XXXXX
*&--------------------------------------------------------------*
* text
*---------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------*
form CMP_ITAB_XXXXX.
ENDform. " CMP_ITAB_XXXXX
*&--------------------------------------------------------------*
*& form WRT_ITAB_RESULT
*&--------------------------------------------------------------*
* text
*---------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------*
form WRT_ITAB_RESULT.
* PERform WRT_ITAB_SUB.
ENDform. " WRT_ITAB_RESULT
*&--------------------------------------------------------------*
*& form PAGE_HEADER
*&--------------------------------------------------------------*
* text
*---------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------*
form PAGE_HEADER.
ENDform. " PAGE_HEADER
*&--------------------------------------------------------------*
*& form INI_DATA
*&--------------------------------------------------------------*
* text
*---------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------*
form INI_DATA.
ENDform. " INI_DATA
*&--------------------------------------------------------------*
*& form INI_SELECTION_SCREEN
*&--------------------------------------------------------------*
* text
*---------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------*
form INI_SELECTION_SCREEN.
ENDform. " INI_SELECTION_SCREEN
*&--------------------------------------------------------------*
*& IncludeZ_X_XXXXXTOP
*&--------------------------------------------------------------*
REPORT Z_X_XXXXX .
*-------------------聲明系統字典對象----------------------------*
TABLES: t001.
*--------------------聲明 Selection-screen變量-----------------*
SELECTION-SCREEN BEGIN OF BLOCK B1
WITH FRAME
TITLE TEXT-001.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: S_BUKRS FOR T001-BUKRS MEMORY ID BUK.
PARAMETERS: P_DATE LIKESY-DATUM DEFAULT SY-DATUM.
SELECTION-SCREEN END OFBLOCK B1.
*--------------------聲明全局變量-------------------------------*
*聲明內表時,表名爲 ITAB_XXXX,後綴儘可能爲關聯DBTab或內表用途
DATA: bldat like bsid-bldat.
RANGES: R_FIELD FOR DBTAB-FIELD.
說明:以上是模板程序的框架及說明,在R/3系統的開發環境中有該模板程序(Z_X_XXXXX),建議編程序之前,先將該程序另存一新文件,再根據需要修改這新文件。
////////////////////////////////////////////////////////////
1,ObjectNavigator是ABAP工作平臺上衆中開發工具的中心入口,事務代碼爲:se80,其中還有幾個經常會用到的T-CODE: SE38,SE24, SE37.
2,在ABAP Editor中有一個Excute with variant按鈕,代表通過變量運行(變式與選擇屏幕相關).
3,Editor Pretty Printer ON/OFF的設置: 菜單項:Utilites->settings有相關項,選中Indent,Convertupper/lowercase同Keyword Uppercase.
4,ABAP有三種類型的處理塊:Event blocks, DialogModules,Procedures只有後一種可擁有自己的局部變量,而且程序語句是內部調用,前兩者處理塊之間實行外部調用.
5,應用程序類型,可執行的:以Report關鍵字引導,不能定義功能模塊但可以調用.模塊池的:以Program關鍵字引導,必須通過事務代碼運行.
6,語句鏈 Write: text1, text2. 等同於: Write text1. Write text2.
7,在一個Program中,處於Form和Endform之間的是Subroutines.該程序由Program引導,不能直接運行,需被調用,不能包含自定義的用戶屏幕.
8,數據內部定義: types type(len) Type type [decimal dec]
data data(len) Type type [decimal dec] [value var]
Decimal 附加項只適用於指定P類型的小數位.
9,兩個結構體進行賦值操作,如果 Source與Destination的組件結構不完全相同,則用
Move-corresponding, eg: move-corresponding source-data todestination-data.
10.在ABAP數據表達式中,關鍵字前後必須有空格,eg: Fault: (a=b+c) true:: a = b + c.
11.在用戶主記錄裏可以設置日期的顯示分隔符,小數點字符和千位分隔符,在system->userprofile->owndata或T-code: su01.
12,內表是一種大批量數據管理形式,用於在程序運行期間存儲多行結構相同的數據,程序對內表的行操作不能直接進行,必須通過一種接口來傳輸,這個接口就是工作區.
13,ABAP的兩種動態數據對象: Field symbols 與 Data reference.
14,內表有三種形式: standard table , sorted table , hashedtable後一種不能進行索引查找,只能通過關鍵字搜索.
15,子程序的定義和調用分別用Form/Endform和perform來實現,如果想生成子程序的代碼框架,則在prefomadd處雙擊即可.
1,package的命名規則: begin with A-S or U-X是SAP standard object, beginwith Y or Z are customer objects, begin with T are private testpackage, begin with $ are local package.
2.在數據字典中,每創建一個TABLE,都將生成一個同名的結構化數據類型,其中的組件字段與實際物理數據庫表完全一致.
3,在select查詢中如果要指定多個數據對象,則需要將這些對象放在括號內,並用逗號隔開,eg: select * fromspfli into (a, b).
4.FunctionModule是最爲常用的複用組件,它是獨立的R/3倉庫對象,也是一種過程模塊,在不同的系統間可以通過RFC(Remotefunction call)技術進行功能模塊的調用.
5,幾個有用的系統函數: sy-uname, sy-host, sy-datum, sy-uzedit, sy-subrc,sy-bdcnt,sy-index, sy-tabix,sy-dynnr.
6,可用於交互式報表的列表事件有: at line-selection, at user-command前者爲選擇某行時觸發,後者由某個GUI觸發.
7,在可執行程序中,只要在程序代碼中使用parametes或select-options語句,則在程序運行後就會產生用戶的選擇屏幕.