SAP--ABAP程序開發規范
1 范圍
本標准規定了SAP S/4 系統程序開發過程中術語定義、命名規則、程序結構、測試方法和請求管理。
本標准適用於SAP S/4 系統的ABAP語言開發的程序。
2 規范性引用文件
下列文件對於本文件的應用是必不可少的。凡是注日期的引用文件,僅所注日期的版本適用於本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改單)適用於本文件。
GB/T 1.1-2000《標准化工作導則 第1部分:標准的結構和編寫規則》
3 術語和定義
3.1 SAP
SAP來自於Systems Applications and Products in Data Processing,它是德國思愛普公司的英文名稱。
3.2 SAP S/4
SAP S/4 是一個基於客戶/服務機結構的開放、集成的企業資源計划系統(Enterprise Resource Planning,簡稱:ERP)軟件,其功能涵蓋企業的財務管理、后勤管理(含采購、庫存、生產、銷售、設備、項目、質量等模塊)和人力資源管理等各個方面。SAP S/4 軟件由德國SAP公司所研創,其R 指實時(realtime), 而3表示S/4 系統是三層架構:數據庫、應用服務器、展現層。
3.3 ABAP
ABAP是一種高級商務應用編程語言(Advanced Business Application Programming),SAP S/4 系統的應用程序就是用ABAP/4編寫的。
3.4 AA
AA表示SAP S/4 應用模塊,其模塊如下:
AA模塊 |
模塊名稱 |
FI |
財務會計 |
CO |
管理會計 |
SD |
銷售分銷 |
MM |
物料管理 |
PM |
工廠維護 |
HR |
人力資源 |
PS |
項目管理 |
BW |
數據倉庫 |
BC |
系統相關 |
OT |
其他 |
3.5 PT
PT表示程序類型,其類型如下:
PT類型 |
名稱 |
RP |
Printing Report 打印輸出報表 |
EX |
Enhancement User Exit 功能增強 |
FM |
Function module函數 |
QR |
Query 查詢 |
SF |
Smart Forms快速格式報表 |
BI |
Batch Input 批輸入 |
3.6 DT
DT表示數據對象類型,其類型如下:
DT類型 |
名稱 |
TB |
透明表 |
VW |
視圖 |
DE |
數據元素 |
ST |
結構表 |
TT |
表類型 |
CI |
類 |
TG |
類型組 |
DM |
域 |
HP |
幫助 |
LO |
鎖對象 |
3.7 符號說明
符號類型 |
名稱 |
[XX] |
XX是必要組成部分 |
{XX} |
XX是條件式的必要組成部分 |
<XX> |
XX是可選組成部分 |
4 命名規則
4.1 程序名命名規則
4.1.1 克隆系統標准程序的程序其名稱按Y{_}[PROGRAM]格式編寫;
4.1.1.1 Y表示該程序是克隆自系統標准程序;
4.1.1.2 克隆的程序是函數時,必須包含“_”;
4.1.1.3 PROGRAM表示被克隆的系統標准程序名稱,如果PROGRAM的字符長度達到最大長度,可省略后面多余的字符;
4.1.2 新開發程序名稱按Z{_}<AA><PT><SEQ>{FSQ}格式編寫;
4.1.2.1 AA表示SAP S/4 應用模塊,其定義見3.4;
4.1.2.2 PT表示程序類型,其定義見3.5;
4.1.2.3 SEQ表示流水序號,范圍為000-999;
4.1.2.4 FSQ表示包含文件的流水號,范圍為F00-F99;
4.1.2.5 創建的程序為函數時,必須包含“_”;
4.1.2.6 創建的程序為INCLUDE程序時,必須包含FSQ;當該程序僅用於一個特定程序時,程序名稱由AA、PT、SEQ、FSQ部分組成;當該程序可用於某類程序類型時,程序名稱由AA、PT、FSQ部分組成;當該程序可用於所有程序時,程序名稱只包含FSQ;
4.2 事務代碼命名規則
事務代碼是由一組有效字符組成的字符串,在SAP系統中為了方便用戶使用系統功能和應用的快捷方式。在ABAP程序開發過程中,為了體現事務代碼的有效意義,只針對程序類型為報表類(RP)、函數模塊類(FM)、維護表視圖以及查詢建立事務代碼。為了便於事務代碼的分類和區別應用,把事務代碼分為業務類事務代碼和管理類事務代碼,其中業務類事務代碼作用於報表類應用,管理類事務代碼作用於配置類應用。
4.2.1 在克隆系統標准程序的程序開發過程中,當原系統標准程序有事務代碼時新建事務代碼名稱為:Y+原事務代碼;當原系統標准程序無事務代碼時新建事務代碼名稱按Y[AA][SEQ]格式編寫;其它情況下的事務代碼名稱按Z[AA][SEQ]{SQ}格式編寫;
4.2.2 AA表示SAP S/4 應用模塊,其定義見3.4;
4.2.3 SEQ流水號必須與對應報表的流水號相同,相同應用模塊下的不同程序類型的流水號不能相同,如果存在相同情況,那么需在后面加上報表類型,如ZMM010QR;
4.2.4 SQ表示流水號,范圍為00-99,其只適用於管理類事務代碼;
4.3 開發類命名規則
4.3.1 開發類的名稱按Z[AA][SQ]格式編寫。其中AA表示SAP S/4 應用模塊,其定義見3.4;SQ表示流水號,其范圍為00-99;
4.3.2 一個開發類只對應一次項目的一個應用模塊,非項目期間的開發類流水號使用99,一個應用模塊可對應多個開發類,在增加開發類時需按流水號遞增編寫;
4.4 函數組命名規則
4.4.1 函數組的名稱按Z[AA][SQ]格式編寫。其中AA表示SAP S/4 應用模塊,其定義見3.4; SQ表示流水號,其范圍為00-99;
4.4.2 一個函數組只對應一次項目的一個應用模塊,非項目期間的函數組流水號使用99,一個應用模塊可對應多個函數組,在增加函數組時需按流水號遞增編寫;
4.4.3 表格維護生成器里的函數組使用該數據字典對象名作為其名稱;
4.5 消息類命名規則
消息類是ABAP程序開發中為異常情況而設計的故障信息類別,這樣有利於問題的跟蹤、診斷和解決。消息類的名稱按Z[AA]格式編寫,其中AA表示SAP S/4 應用模塊,其定義見3.4;
4.6 區域菜單命名規則
4.6.1 區域菜單的名稱按Z[AA][SQ]格式編寫。其中AA表示SAP S/4 應用模塊,其定義見3.4; SQ表示流水號,其范圍為00-99;
4.6.2 一個區域菜單對應一個應用模塊,一個應用模塊對應多個區域菜單,在增加區域菜單時需按流水號遞增編寫;
4.7 數據字典命名規則
4.7.1 數據字典包含表、視圖、數據元素、結構、域、幫助等方面的內容,新建名稱按Z[AA][DT][NNN]格式編寫;
4.7.1.1 AA表示SAP S/4 應用模塊,其定義見3.4;
4.7.1.2 DT表示數據對象類型,其定義見3.6;
4.7.1.3 NNN表示數據對象說明,可以用三位數字或字母來描述;
4.7.2 克隆系統標准數據對象的對象,按Y[DO]格式編寫。其中DO表示被克隆的系統標准數據對象,當DO的數據對象名稱長度已經達到最大長度時,可省略后面多余的字符;
4.8 文本符號命名規則
4.8.1 在程序中盡可能使用文本符號存儲文本信息,避免“硬代碼”;
4.8.2 文本符號也可以進行分類,分類如下:
文本號 |
用途 |
E01-E99 |
錯誤文本 |
I01-I99 |
提示文本 |
W01-W99 |
警告文本 |
S01-S99 |
SELECTION-Screen使用 |
T01-T99 |
一般文本 |
H01-H99 |
報表頭或表格標題等 |
4.9 變量命名規則
4.9.1 為了更好的區分變量的作用范圍,規范變量的正確引用,把變量分為局部變量和全局變量。全局變量必須定義於程序頭,其名稱一般增加前綴“g_”,但為簡化書寫可省略全局變量的前綴;局部變量可根據實際情況靈活定義,其名稱必須增加前綴“l_”;
4.9.2 為保證數據的一致性,在變量定義時盡量使用like、type等進行引用已有類型;
4.9.3 定義變量應按照一定的順序定義,參考順序如下:
4.9.3.1 Tables (only if required for SELECT-options)
4.9.3.2 Nodes
4.9.3.3 Infotypes
4.9.3.4 Controls (for dialogue processing only)
4.9.3.5 Type-groups
4.9.3.6 Types
4.9.3.7 Constants
4.9.3.8 Data (structures)
4.9.3.9 Data (internal tables and their work areas)
4.9.3.10 Data (objects)
4.9.3.11 Ranges
4.9.3.12 Data (simple fields)
4.9.3.13 Field-symbols
4.9.3.14 Field groups (followed by INSERT into field-groups)
4.9.3.15 SELECTION-Screen data (for list processing only)
4.9.3.16 Parameters
4.9.3.17 SELECT-options
4.9.4 為便於識別變量類型,在變量前需要增加變量類型前綴,如下:
類型 |
說明 |
變量前綴 |
備注 |
C |
字符串 |
c_ |
|
N |
數字 |
n_ |
|
D |
日期 |
d_ |
|
T |
時間 |
t_ |
|
X |
十六進制 |
x_ |
|
I |
整數 |
i_ |
|
P |
壓縮號 |
pn_ |
|
F |
浮點數 |
f_ |
|
String |
字符串 |
str_ |
|
Xstring |
X字符串 |
xstr_ |
|
Constants |
常量 |
con_ |
|
Type |
類型 |
ty_ |
|
Internal Table |
內表 |
itb_ |
|
Work Area |
工作區 |
wa_ |
|
Range |
范圍 |
s_ |
|
Field-symbols |
字段符號 |
fs_ |
|
SELECT Options |
選擇選項 |
s_ |
|
Parameters |
選擇參數 |
p_ |
p_名稱 |
Radiobutton |
單選 |
rb_ |
|
Checkbox |
復選框 |
cb_ |
|
Select |
下拉框 |
sl_ |
|
Form Name |
子程序名 |
無 |
動詞_其它描述 |
Form Parameters |
子程序參數 |
p_ |
p_變量屬性_名稱 |
Function Name |
函數名 |
z_,y_ |
參考4.1.2 |
Function Parameters |
函數參數 |
變量前綴 |
變量屬性_名稱 |
4.10 子程序命名規則
4.10.1 在子程序定義時必須有相應的用途和參數說明等,樣式如下:
*&---------------------------------------------------------------------*
*& Form 子程序名
*&---------------------------------------------------------------------*
* 用途說明
*----------------------------------------------------------------------*
* -->P_P1 傳入參數1
* -->P_P2 傳入參數2
* <--P_RP1 返回參數名
* -->P_TB1 表參數
*----------------------------------------------------------------------*
4.10.2 子程序引用參數前綴使用“p_”;
4.11 報表輸出
4.11.1 報表輸出方式有ALV,EXCEL,直接寫屏或其它;
4.11.2 EXCEL輸出方式模板文件名稱按[AA][SEQ]<OT>格式編寫;
4.11.2.1 AA表示SAP S/4 應用模塊,其定義見3.4;
4.11.2.2 SEQ為流水號,該流水號必須與對應的程序流水號相同;
4.11.2.3 OT表示其它字符或數字等,當AA和SEQ都無法唯一區別時,可以使用該選項;
4.11.3 當EXCEL輸出方式模板文件為EXCEL時,其表格名稱必須按文件名稱重命名;
5 程序結構
良好的程序結構便於閱讀和維護,能大大提高軟件開發人員的工作效率。在ABAP代碼編寫過程中,可根據程序類型不同而順序包含5.2中的部分結構。
5.1 程序事件
5.1.1 INITIALIZATION
5.1.2 AT SELECTION-SCREEN OUTPUT
5.1.3 AT SELECTION SCREEN ON VALUE-REQUEST
5.1.4 AT SELECTION SCREEN ON HELP-REQUEST
5.1.5 AT SELECTION SCREEN ON <parameter>
5.1.6 AT SELECTION-SCREEN
5.1.7 START-OF-SELECTION
5.1.8 GET <node>
5.1.9 END-OF-SELECTION
5.1.10 TOP-OF-PAGE
5.1.11 TOP-OF-PAGE DURING LINE-SELECTION
5.1.12 END-OF-PAGE
5.1.13 AT LINE-SELECTION
5.1.14 AT USER-COMMAND
5.1.15 FORM
5.1.16 ENDFORM
5.2 代碼結構
5.2.1 程序頭部
程序頭部是記錄程序開發過程中的一些控制信息,便於對程序的功能了解和后期維護,樣式如下:
************************************************************************
* 程序名:XXXXX
* 程序名稱:XXXXX
*-------------------------------------------------
* 創建日期 程序員 SAP版本 程序類型
* YYYYMMDD XXXXXX R4.7 RP/F...
*-------------------------------------------------
* 描述:
* XXXX
*=================================================
* 修改日期 版本 修改人 修改描述
* 1.1
************************************************************************
5.2.2 程序名稱部分
程序名稱部分記錄程序名稱及其它屬性,樣式如下:
REPORT XXXXX MESSAGE-ID XX.
5.2.3 全局定義部分
全局定義部分包含表、信息類型、全局變量的聲明,樣式如下:
*----------------------------------------------------------------------*
* GLOBLE-DEFINATION *
*----------------------------------------------------------------------*
tables:...
infotypes: ...
include zrpcm001.
data:...
5.2.4 程序取數邏輯部分
程序取數邏輯部分包含屏幕樣式、程序初始化、人機交互、取數邏輯等,樣式如下:
*----------------------------------------------------------------------*
* SELECTION-SCREEN *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* INITIALIZATION *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* START-OF-SELECTION *
*----------------------------------------------------------------------*
START-OF-SELECTION.
取數語句
*----------------------------------------------------------------------*
* END-OF-SELECTION *
*----------------------------------------------------------------------*
END-OF-SELECTION.
5.2.5 結果輸出部分
結果輸出部分包含模板下載、結果填充等,樣式如下:
PERFORM templetdownload USING 模板名.
輸出語句
PERFORM displayexcel."顯示EXCEL
5.2.6 子程序部分
*----------------------------------------------------------------------*
* SUBROUTINES(子程序FORM) *
*----------------------------------------------------------------------*
5.3 程序注釋
5.3.1 良好的程序注釋便於程序的理解,達到“程序文檔化”的狀態。注釋主要用於程序頭說明、變量說明、修改備注、包含文件引用說明、FORM程序說明以及其它說明。
5.3.2 程序注釋分為行外注釋和行內注釋。行外注釋就是注釋單獨成行,行首使用星號“*”標識,行內注釋就是注釋與變量、方法、對象等在同一行,並且放在其后,注釋字符前使用英文的雙引號“"”標識;
5.3.3 程序頭部說明采用行外注釋方式,主要包含程序名、程序名稱、創建信息、程序用途以及修改原因和情況;
5.3.4 變量說明一般采用行內注釋方式;
5.3.5 修改備注、包含文件引用說明采用行外注釋方式;
5.3.6 FORM程序說明采用行外注釋方式,主要包含FORM名稱、功能說明以及參數說明等;
5.3.7 其它說明是指在IF、LOOP、CASE、WHILE等結構的開始和結束處加上注釋,便於分解程序運行邏輯;
5.4 其它
5.4.1 在程序編寫過程中注意代碼段間行寬,在合適處換行來提高代碼可讀性;
5.4.2 為了保證程序在不同SAP版本間的兼容性,每行ABAP代碼不能超過72個字符;
5.4.3 在使用DO語句時,盡量使用DO x TIMES,避免出現死循環;
5.4.4 兩個結構體ty_a、ty_b進行賦值,使用ty_b=ty_a,而不使用MOVE-CORRESPONDING ty_a TO ty_b;
5.4.5 兩個內表itab1、itab2結構相同,需要賦值,使用itab1[]=itab2[],而不使用循環操作賦值。
6 測試方法
6.1 測試案例編制
6.1.1 測試案例就是設計一個業務運行情況,軟件程序在這種情況下,必須能夠正常的運行並且達到程序設計的預期執行結果;
6.1.2 測試案例編制方法有等價划分法、邊界值分析法、錯誤推斷法、因果圖法、判定表驅動法、正交試驗法、功能圖法等;
6.1.3 測試案例由用例編號、用例目的、操作步驟、輸入數據或調用數據、期望結果等組成,格式如下:
用例編號 |
用例目的 |
操作步驟 |
輸入數據/調用數據 |
期望結果 |
001 |
測試多個公司時顯示順序是否先按公司排序 |
輸入多個公司代碼操作 |
輸入兩個以上公司代碼 |
先按公司排序 |
6.2 測試場景的定義
6.2.1 測試場景就是對用戶需求內容的不同情況的定義。在場景設計過程中要盡量考慮全面,特別是一些很少發生的業務邏輯,這樣才能達到程序與需求間匹配性的全面診斷;
6.2.2 測試場景由用例編號、用例目的、場景編號、場景名稱、場景目的、菜單路徑/事務代碼、所用字段、字段數據、預期結果、實際結果等組成,其格式如下:
用例編號 |
用例目的 |
場景代碼 |
場景名稱 |
場景目的 |
菜單路徑/事務代碼 |
所用字段 |
字段數據 |
預期結果 |
實際結果 |
001 |
|
001.01 |
|
|
|
|
|
|
|
6.3 測試數據生成
按測試場景要求操作相關業務,以獲得測試過程中需要的各種業務數據;
6.4 測試結果的反饋
6.4.1 測試結果填寫在場景測試的實際結果欄;
6.4.2 如果實際結果與預期結果一樣使用綠色字體進行說明,否則使用紅色字體進行說明。在程序員調整完相應的邏輯后,又再次進入程序測試;
7 請求管理
7.1 請求的生成
7.1.1 客戶的測試數據,如果不傳生產系統,那么盡量使用本地對象,不要產生傳輸請求;
7.1.2 請求生成過程中,如果不同傳輸內容需同時傳到生產系統,那么盡量使用同一傳輸請求;
7.1.2 傳輸請求描述盡量能准確表現請求的用途,在其末尾加上生成請求的年月日時間;
7.2 請求的釋放
7.2.1 確認請求任務下的所有子請求已完成,所有包含的對象已激活;
7.2.2 對請求進行檢查,確認無錯誤報告,同時需注意報警信息;
7.2.3 為方便信息跟蹤和請求的協調管理,需在文檔欄填寫帶釋放人信息的備注;
7.3 請求的上傳
7.3.1 在傳輸請求前,需要明白傳輸的內容以及影響范圍;
7.3.2 傳輸完成后需在生產系統上進行檢查和驗證。