ABAP開發(fā)規(guī)范_V1.0_第1頁
ABAP開發(fā)規(guī)范_V1.0_第2頁
ABAP開發(fā)規(guī)范_V1.0_第3頁
ABAP開發(fā)規(guī)范_V1.0_第4頁
ABAP開發(fā)規(guī)范_V1.0_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、SAP項(xiàng)目ABAP開近約ABAP開發(fā)規(guī)范說明書修正歷史版本修正日期修正者修正內(nèi)容V1.02014/10/27此開發(fā)規(guī)范,是為了提高SAP系統(tǒng)上ABAPFF發(fā)實(shí)施的高性能,一致性以及形式的統(tǒng)一性而制定,便于統(tǒng)一管理,閱讀及簡化后2更改難度 .SAP項(xiàng)目ABAP開發(fā)規(guī)約目錄1命名31.1. 應(yīng)用代碼31.2. 開發(fā)類別31.3. 開發(fā)類(Package) 41.4. ABAP自開發(fā)程序41.5. 變量命名規(guī)約 61.6. 移送號管理81.7. 消息類別82注釋92.1 .修改代碼注釋92.2 程序頭部注釋112.3 表/結(jié)構(gòu)定義時(shí)的注釋 112.4 Form 的注釋122.5 對于程序中,大段的邏

2、輯處理的地方必須有注釋 123規(guī)范打印機(jī)134程序開發(fā)指導(dǎo) 144.1. 一般規(guī)則144.2. 模塊化174.3. 選擇屏幕184.4. 數(shù)據(jù)庫讀取, WHERE©句 184.5. 內(nèi)表204.6. 性能考慮21SAP項(xiàng)目ABAP開近約1命名1.1. 應(yīng)用代碼使用兩位編碼來對應(yīng)應(yīng)用程序模塊,通常程序名的第二、三位反映此編碼。具體編碼如下:應(yīng)用模塊財(cái)務(wù)會(huì)計(jì)銷售和分銷生產(chǎn)管理物料管理倉庫管理質(zhì)量管理項(xiàng)目管理人力資源模塊CODE(功能碼)FISDPPMMWMQMPSHR1.2. 開發(fā)類別程序名的第四位編碼必須反映程序的類型,如下:程序類型增強(qiáng)指示符ER報(bào)表SAP項(xiàng)目ABAP開近約接口表單數(shù)

3、據(jù)轉(zhuǎn)換(主要指 BDC/BAPI批導(dǎo)程序)Dialog功能開發(fā)1.3. 開發(fā)類(PACKAGE)使用一個(gè)總的開發(fā)類1.4. ABAP 自開發(fā)程序程序命名規(guī)范1開發(fā)程序Z<A><B><C><D>1檢字符組成,Z<A><B><C>為必須部分,<D>為附加部分。Z: 1位,固定文本,說明是客戶定制化程序< A>: 2位,功能模塊(FI/MM等)< B>: 1位,程序類型(報(bào)表:R,批導(dǎo):B)< C>: 3位,流水碼< D>: 3位,其它公司copy原有的程序

4、時(shí)用,比如 ZMMB014_JP2 COPY標(biāo)準(zhǔn)程序Z + SAP原程序名3包含程序?qū)τ谝话愠绦虻陌绦?,使用和程序相同的SAP項(xiàng)目ABAP開近約程序名,加上<A>后綴<A>:3 位,包含內(nèi)容指示符<A>抬頭,全局定義TOP功能模塊formF+2位數(shù)字PAI事件I+2位數(shù)字PBO事件O+2位數(shù)字Ex: ZSDR0005F01 或 ZSDR005TOP4函數(shù)組Z<C><NN>其中<C混2位功能模塊,具體值參 照前圜,<NN>1 3位流水碼。Ex: ZSD0045函數(shù)30位字符,Z<A>_<B>

5、,其中<A>> 2位功能碼, 具體值參照前面,<B>是24位簡單功能描述。Ex: ZSD_SALESORDERCHANGE6 表格(Smartforms )9位字符,Z<A>FF<NN>其中<A>2位功能碼, <NN>4位流水碼。Ex: ZSDFF00227樣式8標(biāo)準(zhǔn)文本(SO10)9位字符,Z<A>FF<NN>其中<A>2位功能碼,<NN>4位流水碼。規(guī)則同 6表格一致。Ex: ZSDFF002230位字符,Z<A><NN><C>其

6、中<A>2位功能碼,<NN>2位流水碼,<C>25位文本描述。SAP項(xiàng)目ABAP開近約Ex: ZSD10CACS012EUR1.5. 變量命名規(guī)約建議所有字段名或變量名必須使用英文,并且描述部分盡可能的表達(dá)出它的用法或/和內(nèi)容。在名稱中不要使用連字符(減號)。一般變量類型示例與說明FormF_<A>.<A>功能描述說明一般格式:動(dòng)詞+名詞。Ex: f_get_dataConstantC_<C>.Ex: c_flg_xField SymbolsFS_<C>.Select optionS_<C>.Par

7、ametersP_<C>.RangeR_<C>.Range work areaR_<C>_lineInternal tableGT_<C>.Field groupsFG_<C>.StructureGS_<C>.SAP項(xiàng)目ABAP開近約FieldGF_<C>Parameter of formCHANG參數(shù):FC_<C>USING參數(shù):FU_<C>TABLE參數(shù):FT_<C>TypesTYP_<C>FlagsFLG_<C>Class, OO ObjectC

8、L_<C>Local VariableL<C>.局部變量在以上規(guī)則上加上L.Ex:lt_bkpf. ls_bkpf. Lf_check.主要區(qū)別內(nèi)表、結(jié)構(gòu)、字段三種數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)字典Tables7 個(gè)字符,Z<A>T<NNN>.<A>2位功能碼,<NNN>3位流水號。Ex: ZSDT001.Table Index4 個(gè)字符,ZI<NN>,<NN>2 位流水碼。Structure7 個(gè)字符,Z<A>S<NNN>.<A>阻功能碼,<NNN>3位流水號。Ex:

9、 ZSDS001.Fields30字符,Z<C>,如果是復(fù)制SAP標(biāo)準(zhǔn)的,可以不加ZoSAP項(xiàng)目ABAP開近約DomainsZ<C>Data elementsZ<C>Search helpZH_<C>View7 個(gè)字符,Z<A>V<NNN>.<A>2位功能碼,<NNN>3位流水號。Ex: ZSDV001.Lock Object8 個(gè)字符,EZ<A>T<NNN>.<A>2位功能碼,<NNN>3 位流水號。Ex: EZSDT001.1.6. 移送號管理將一

10、個(gè)開發(fā)任務(wù)的所有開發(fā)工作保存到一個(gè)移送號,不同的開發(fā)任務(wù)不能掛在同一個(gè)移送號下面,尤其是增強(qiáng),要單獨(dú)掛移送號。不需要移送的移送號刪除掉,或者在描述中寫明不移送移送號描述的規(guī)則移送號的描述按照下面的形式記述模塊:客戶_模塊.基本描述其它如 ZY_MM_change requrest 的描述模塊:模塊領(lǐng)域(F/CO/SD/MM/PP/WM等)基本描述:程序的名稱,程序名或者修改的內(nèi)容YYYY/MM/DD移送號創(chuàng)建日期公司代碼:專為某家新公司上項(xiàng)目用的移送號,加上公司代碼(6100/0MB1/AE01等)1.7. 消息類別SAP項(xiàng)目ABAP開發(fā)規(guī)約Z<A><NNN>,6位字符

11、。其中<A>2位功能碼,<NNN>騎流水碼。Ex: ZFI001消息號:3位數(shù)字流水碼2注釋2.1. 修改代碼注釋大量修改程序(修改內(nèi)容超過原有的代碼量三分之一)或者版本升級,首先保留原版本,根據(jù)原程序復(fù) 制創(chuàng)建備份程序,備份程序名為原有的程序名+_BAK.修改原有的程序。程序代碼的修改量比較小時(shí),修改者必須保留修改前的內(nèi)容,不能自行刪除或直接修改;并標(biāo)識(shí)出 修改、新增或刪除的內(nèi)容。修改者都必須填寫修改信息,首先必須在當(dāng)前文件的文件頭修改記錄中加入修改信息,并且在代碼修改處加上修改注釋,注釋根據(jù)不同的修改動(dòng)作分以下三個(gè)方面:新增代碼行* Start add by xxx

12、x at yyyymmdd新增代碼行* End add by xxxx at yyyymmdd其中xxxx修改者名稱yyyymmdd修改世間Ex:* Start add by liuwei at 20150717TYPES:BEGIN OF typ_mara,matnr TYPE mara-matnr,"物料meins TYPE mara-meins,"單位END OF typ_mara.* End add by liuwei at 20150717修改代碼行SAP項(xiàng)目ABAP開近約對代碼行進(jìn)行修改,要先刪除,再新增,保留原來代碼* Start modify by xxxx

13、 at yyyymmdd*原來代碼行 新增代碼行* End modify by xxxx at yyyymmdd其中xxxx修改者名稱yyyymmdd修改世間Ex:'A''U'* Start modify by liuwei at 20140828ISAVEISAVE* End modify by liuwei at 20140828刪除代碼行* Start delete by xxxx at yyyymmdd*原來代碼行* End delete by xxxx at yyyymmdd其中xxxx修改者名稱yyyymmdd修改世間Ex:* Start delet

14、e by liuwei at 20150921 * LOOP AT GTSODT INTO GSSODTTEMP.SAP項(xiàng)目ABAP開近約LFTOTALVEMNG.CLEAR: GSSODTTEMP.CLEAR: LF_COUNTS.LFCOUNTS = GSSODTTEMP-VEMNG LFTOTALPLTS /GSSOHD-ZPLTS = GSSOHD-ZPLTS + LFCOUNTS. *ENDLOOP.*End deleteby liuwei at 201509212.2 程序頭部注釋程序頭部注釋主要是表明該文件的一些信息,其格式如下:*Program name: ZMMR00XX*D

15、escription : 程序功能的描述*Date/Author : YYYYMMDD/XXXX* MODIFICATION LOG* ChangeDate Programmer RequestDescription* * YYYYMMDD AAA.BBB R3DK999999修改內(nèi)容描述* REPORT NAME :寸艮表顯示名稱* *2.3 表/結(jié)構(gòu)定義時(shí)的注釋定義表/結(jié)構(gòu)時(shí),采用把注釋作為代碼行的一部分的注釋處理方式。例如:*即時(shí)庫存BEGIN OF typ_mard,matnrTYPEmara-matnr,"物料號werksTYPEmard-werks,"工廠lgo

16、rtTYPEmard-lgort,"庫存地點(diǎn)SAP項(xiàng)目ABAP開近約1abstTYPEmard-labst,"即時(shí)庫存insmeTYPEmard-insme,"質(zhì)檢庫存spemeTYPEmard-speme,"凍結(jié)庫存meinsTYPEmara-meins,"單位END OF typ_mard,2.4 FORM的注釋例如:*&*&Form F_GET_DATA*&*讀取數(shù)據(jù)*FORM f_get_data.2.5 對于程序中,大段的邏輯處理的地方必須有注釋例如:*出力數(shù)據(jù)編輯LOOP AT gt_vekp_temp IN

17、TO gs_vekp.物料編碼,數(shù)量取得判斷是否有復(fù)數(shù)個(gè)物料非期初處理團(tuán)隊(duì)信息取得第23頁共21頁判斷是否復(fù)數(shù)個(gè)團(tuán)隊(duì)ENDLOOP.3規(guī)范打印機(jī)SAP項(xiàng)目ABAP開發(fā)規(guī)約調(diào)整嵌套的源代碼,使用規(guī)范化打印機(jī)功能,設(shè)定如下:程序?qū)傩栽O(shè)定如下:package根據(jù)具體情況設(shè)定SAP項(xiàng)目ABAP開近約4程序開發(fā)指導(dǎo)4.1. 一般規(guī)則增強(qiáng)中的提示都要用消息類的某個(gè)號,方便查找增強(qiáng)。盡量不要在程序中使用硬編碼,而是定義常量作為比較運(yùn)算。Unacceptable:IF I MATKL = '2000' AND I WERKS = 'SZCC' AND ( LS CHAR-CHA

18、RACT= 'B2000007' OR LS_CHAR-CHARACT= 'B2000012').CONTINUE.ENDIF.Acceptable:SAP項(xiàng)目ABAP開近約IF i_matkl = c_matkl_2000AND i_werks = c_werks_szccAND ( ls_char-charact = c_char_b2000007OR ls_char-charact = c_char_b2000012).CONTINUE.ENDIF.在輸出Message消息時(shí)使用文本元素(Text elements ),使用文本元素可以幫助同一個(gè)程序在多語

19、言 環(huán)境運(yùn)行。要盡可能的使用系統(tǒng)值。Unacceptable:CLEAR: ls_field.ls field-name= 'EXIDV'.ls_field-alias = 'EXIDV'.ls field-source='VEKP'.ls_field-label ='柜號'.ls field-index= 1.ls_field-len = 20.口 一APPEND ls_fieldTO lt_fields.Acceptable:ls_fieldcat-fieldname= 'ZLQTY'.ls_fieldcat-

20、scrtext_m= text-006.ls_fieldcat-qfieldname = 'MEINS'.APPEND ls_fieldcat TO lt_fieldcat.CLEAR ls_fieldcat.定義數(shù)據(jù)時(shí)盡可能使用TYPE語法,盡量不使用LIKE.Unacceptable:DATA: BEGIN OF typ_mchb, exidv LIKE vekp-exidv, "柜號Acceptable:DATA:lf_matnrTYPE mara-matnr,"物料SAP項(xiàng)目ABAP開近約在程序傳輸?shù)缴a(chǎn)環(huán)境之前,確保所有硬斷點(diǎn)和測試代碼(例如附加的

21、輸出語句)都被刪除。在程序運(yùn)行時(shí)設(shè)置“軟”斷點(diǎn)來代替在程序中使用硬編碼的斷點(diǎn)。Unacceptable:BREAK-POINT.Acceptable:必須為每個(gè)定義的變量提供有意義的描述,即變量名稱本身應(yīng)盡可能的表達(dá)出它的Unacceptable:Acceptable:限制每一行代碼只有一個(gè)關(guān)鍵詞來提高程序的可讀性。Unacceptable:IF I MATKL = '2000' AND I WERKS = 'SZCC' AND (LS CHAR-CHARACT= 'B2000007' ORLS_CHAR-CHARACT= 'B20000

22、12').CONTINUE.ENDIF.Acceptable:IF i matkl= c matkl 2000AND i_werks = c_werks_szccAND ( ls char-charact= c char b2000007OR ls_char-charact = c_char_b2000012).CONTINUE.ENDIF.在任何可能的情況下,使用CASE語句而不是重復(fù)的IF語句,可以提高代碼的可讀性Unacceptable:IF gs_fieldcat-fieldname = 'VEMNG'.gs fieldcat-ref fieldname= &#

23、39;VEMNG'.gs_fieldcat-ref_tabname = 'VEPO'. gs_fieldcat-decimals_out = 3.ENDIF.IF gs_fieldcat-fieldname = 'CLABS'.SAP項(xiàng)目ABAP開近約gs_fieldcat-ref_fieldname= 'CLABS'.gs_fieldcat-ref_tabname = 'MCHB'. gs fieldcat-decimals out= 3.ENDIF.IF gs_fieldcat-fieldname = 'CIN

24、SM'.gs_fieldcat-ref_fieldname= 'CINSM'.gs_fieldcat-ref_tabname = 'MCHB'. gs_fieldcat-decimals_out = 3.ENDIF.Acceptable:CASE gs fieldcat-fieldname.WHEN 'VEMNG'.gs_fieldcat-ref_fieldname= 'VEMNG'.gs_fieldcat-ref_tabname= 'VEPO'.gs_fieldcat-decimals_out= 3.WH

25、EN'CLABS'.gs_fieldcat-ref_fieldname= 'CLABS'.gs_fieldcat-ref_tabname= 'MCHB'.gs_fieldcat-decimals_out= 3.WHEN 'CINSM'.gs_fieldcat-ref_fieldname= 'CINSM'.gs_fieldcat-ref_tabname= 'MCHB'.gs_fieldcat-decimals_out= 3.WHEN OTHERS.ENDCASE.修改程序之前,先比較一下版本,確保開發(fā)

26、機(jī)的版本跟生產(chǎn)機(jī)的版本一致才能進(jìn)行修改。程序激活后,傳輸前,要做擴(kuò)展檢查,盡量去掉所有的err消息。4.2. 模塊化使用子程序和Perform 的評價(jià)標(biāo)準(zhǔn)是:它是否可以提高程序的可讀性和使得邏輯流更加清晰。如果一塊代碼在 ABAP中多處被調(diào)用,它就應(yīng)該被創(chuàng)建成FORMPERFORMS該被使用在邏輯結(jié)構(gòu)(如CASE, IF )中,與書寫多條語句相比,可以提高程序的可讀性。建議功能模塊form , PAI PBO事件,放到主程序中。SAP項(xiàng)目ABAP開近約4.3. 選擇屏幕參數(shù)和選擇范圍應(yīng)該有一些默認(rèn)值或必填字段,這樣做的目的是防止以錯(cuò)誤的方式運(yùn)行時(shí)消耗掉SAP系統(tǒng)過多的資源。盡量使用更多的選擇范

27、圍來增加過濾條件,這樣程序運(yùn)行的會(huì)更快。為塊標(biāo)題和選擇項(xiàng)指定具體的文本元素。所有輸入必須進(jìn)行校驗(yàn)并輸出合適的錯(cuò)誤信息。4.4. 數(shù)據(jù)庫 讀取,WHERE語句SELECT吾句的Where選項(xiàng)中盡可能的使用完全約束條件,包括那些不是關(guān)鍵字段的數(shù)據(jù)字段。Unacceptable:Acceptable:WHER踣句中約束字段的順序與表中關(guān)鍵字段順序應(yīng)一致。Unacceptable:FROM lagpWHERE lgnum = '115'AND lgtyp = 'A00'AND lgpla = lf_field在任何可能的情況下,使用FOR ALL ENTRIES IN都

28、必須判斷作為條件的內(nèi)表不為空Unacceptable:Acceptable:SAP項(xiàng)目ABAP開近約IF lt_mchb口 IS NOT INITIAL. SELECT atnamFROM auspINTO CORRESPONDIN6ELDS OF TABLE 憶auspFORALL ENTRIES IN 憶mchbWHEREauspobjek =代_mchb-cuobj_bm.ENDIF.盡可能的使用主鍵,指定完整的表關(guān)鍵字段并且使用SELECT SINGLEUnacceptable:Acceptable:SELECT SINGLE anzle INTO lf anzleFROM lagpW

29、HERE lgplaAND lgtyp=lf_field='A00'AND lgnum='115'.SELECT時(shí),禁止三個(gè)以上表join.必須從多個(gè)表取數(shù)據(jù)時(shí),可以先讀取關(guān)鍵的數(shù)據(jù),然后循環(huán)數(shù)據(jù),從 其他內(nèi)表中read。Unacceptable:FROM mchb INNER JOIN mara ON mchbmatnr = maramatnr INNER JOIN makt ON mchbmatnr = maktmatnr AND spras = '1' INNER JOIN t001l ON mchblgort= t001llgortANDmchbwerks = t001lwerks LEFTJOINmch1ONmchbmatnr=mch1matnrAND mchbcharg= mch1chargLEFTJOINvepoONmchbmatnr=vepomatnrAND mchbcharg= vepochargWHERE mchbwerks = s_werksSAP項(xiàng)目ABAP開近約SELECT寸可以使用索弓I,但是不建議,不能輕易添加索引。4.5. 內(nèi)表定義內(nèi)表時(shí),不能定義帶headline的,必須明確定義工作區(qū)。Unacceptable:DATA: gt_mchb LIKE gs_mchb OCCURS 0 WITH

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論