abap內部培訓文件_第1頁
abap內部培訓文件_第2頁
abap內部培訓文件_第3頁
abap內部培訓文件_第4頁
abap內部培訓文件_第5頁
已閱讀5頁,還剩415頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

420/420公司內訓資料(密)SAP最初開發(fā)ABAP/4(高級商業(yè)應用程序設計)語言僅為內部使用,為應用程序員提供優(yōu)化的工作環(huán)境。經過不斷的改進和修改以滿足商業(yè)領域的需要。現(xiàn)在,ABAP/4已成為SAP開發(fā)所有自己的應用程序的僅有工具。SAP客戶用ABAP/4進行其自身開發(fā)。這樣的開發(fā)對R/3標準解決方案適應特殊問題非常重要。ABAP/4開發(fā)工作平臺包含所有用于創(chuàng)建和維護ABAP/4程序的工具。ABAP/4的可解釋特性使其易于生成、測試并運行程序的中級版本,以便將來生成最終版本。此過程也叫做早期原形處理,意味著您不必丟棄中級版本。ABAP/4是第四代支持結構化程序設計的語言。它合并了所有通常的控制結構和模塊化概念。在ABAP/4開發(fā)寶典中文版的第一部分,對ABAP/4的基本特性進行了詳細描述。這些特性包括:· ABAP/4包括- 帶有各種類型和結構的聲明數據的聲明元素- 數據制作的操作元素- 控制程序流的控制元素- 反應外部事件的事件元素· ABAP/4支持多種語言。文本摘要(例如,標題、頁眉和其他文本)將根據程序代碼分別存儲。您可以隨時在不改變程序代碼的情況下更改、轉換和維護這些文本摘要?!?ABAP/4支持商業(yè)數據類型和操作。您可以用特殊日期和時間字段進行計算。系統(tǒng)會自動執(zhí)行必需的類型轉換。· ABAP/4提供一系列功能處理字符串?!?ABAP/4包含一個叫OpenSQL的SQL子集。用OpenSQL,您可以讀取和訪問數據庫表,與所用的數據庫系統(tǒng)無關?!?ABAP/4允許您定義和處理內部表,該表只在運行程序時存在。內部表使其更容易處理數據表,并幫助使用程序中的復雜數據結構?!?ABAP/4允許您定義和調用子程序。也可以調用其他程序的子程序。參數能夠以各種方式從子程序傳遞或傳遞到子程序?!?ABAP/4包含一種特殊子程序,叫做功能模塊。您可以在中央庫中創(chuàng)建和維護功能模塊。在調用程序和子程序之間功能模塊有一個明確定義的數據接口。它們能夠以調用程序的獨立模式進行分別測試。這里有兩種主要的ABAP/4程序類型:· 報表程序報表程序用于分析數據庫表中的數據。這種分析的結果可以顯示在屏幕上或發(fā)送到打印機上。邏輯數據庫支持報表程序。邏輯數據庫是特殊的ABAP/4程序,使開發(fā)者不必編碼所有的數據庫訪問。關于報表程序的詳細信息,參見《ABAP/4開發(fā)寶典中文版》的第二部分?!?對話程序將對話程序組織為包含對話模塊的模塊池。每個動態(tài)程序(由一個屏幕及其流邏輯組成的“動態(tài)程序”)都基于一個ABAP/4對話程序。流邏輯包含對ABAP/4對話模塊的調用。關于對話程序的詳細信息,參見《ABAP/4開發(fā)寶典中文版》的第三部分。語法約定本文檔中涉及的語法語句約定如下:關鍵字定義語句關鍵字和語句選項大寫。<變量>變量或代表所填入值的詞用尖括號括起來。在所使用的值中不要包括角括號(例外:字段符號)[]方括號表明用戶沒有使用、使用一個或多個附加選項。在用戶選項中不要包括方括號。|兩選項之間的豎條表明用戶可以使用一個或另一個選項。()應將括號作為命令的一部分鍵入,逗號表示用戶可選擇多個選項,用逗號隔開,作為命令的一部分鍵入。<f1><f2>帶索引的變量表明用戶可列出多個變量。變量之間要采用與前兩個一樣的符號隔開。點號表明用戶可在此處放置上下文中允許的任何東西。在語法指令中,關鍵字大寫,變量放進角括號中。在程序中鍵入關鍵字時可以忽略大小寫。WRITE、Write和write完全一樣。輸出屏幕上的輸出或者采用屏幕彈出形式或者采用如下格式:

Screenoutput.第一部分ABAP/4基礎第一章創(chuàng)建簡單的ABAP/4程序本節(jié)描述如何創(chuàng)建簡單的ABAP/4程序。了解如何創(chuàng)建ABAP/4程序將有助于了解本指南中的其它主題。創(chuàng)建簡單的ABAP/4程序涉及下列基本步驟:1. 命名程序2. 指定程序屬性3. 編寫程序代碼4. 測試程序本節(jié)也描述如何顯示或更改現(xiàn)有程序以及如何從編輯器中啟動程序。此處描述的創(chuàng)建新ABAP/4程序的過程適用于報表和短培訓程序。在開始編寫報表程序之前,用戶也許想先創(chuàng)建報表和短培訓程序以熟悉ABAP/4語法。要為新事務創(chuàng)建模塊存儲,可以采用不同于報表程序的方式進行。關于如何為事務創(chuàng)建模塊存儲的詳細信息,參見ABAP/4模塊池。關于ABAP/4編輯器和調試過程的詳細信息,參見文檔ABAP/4工作臺工具。本節(jié)講述下列主題:一、命名程序要創(chuàng)建ABAP/4程序,請進行如下操作:1. 在“SAPR/3”初始屏幕上選擇“工具->ABAP/4工作臺”。出現(xiàn)“ABAP/4開發(fā)工作臺”屏幕2. 選擇“ABAP/4編輯器”“ABAP/4編輯器初始屏幕”如下所示:3. 為在“程序”字段中創(chuàng)建的程序輸入名稱(關于創(chuàng)建程序名稱的詳細信息,參見命名程序規(guī)則(頁455))。4. 選擇“創(chuàng)建”。不論在“對象組件”下選擇什么,都出現(xiàn)“ABAP/4:程序屬性”屏幕。當命名并創(chuàng)建程序后,可以定義其屬性(關于定義程序屬性的詳細信息,參見指定程序屬性(頁457))。創(chuàng)建ABAP/4程序還有其它過程。例如,可以:1. 選擇“ABAP/4開發(fā)工作臺”屏幕上的“對象瀏覽”。2. 選擇“對象列表”下的“程序”。3. 選擇“單一對象”下的“程序對象”。4. 輸入程序名并單擊“顯示”。如果程序不存在,則詢問是否要創(chuàng)建它。關于對象瀏覽器及創(chuàng)建程序其它過程的詳細信息,參見文檔ABAP/4工作臺工具。二、命名程序規(guī)則當創(chuàng)建程序名稱時請遵循如下規(guī)則:_ 使用至少1個但不超過8個字符。_ 不要使用下列字符- 句點(.)- 逗號(,)- 空格()- 括號'('')'- 單引號(')- 雙引號(")- 等號(=)- 星號(*)- 元音變音(_,_,_,_,_,_)和'_'- 百分號(%)和下劃線(_):因為這些符號是SQL語句的通配符,所以也會導致問題(參見為在程序中選定行指定條件)。SAP建議在程序名稱中不要使用它們。創(chuàng)建程序名稱時請遵守這些命名約定:_ 報表程序(以列表格式輸出數據分析):Yaxxxxxx或Zaxxxxxx。用應用程序區(qū)的分類字母替換a。用任何有效字符替換x。注意SAP報表程序遵守相似的命名約定:Raxxxxxx。_ 任何其它ABAP/4程序(培訓程序或事務程序):SAPMYxxx或SAPMZxxx。用有效字符替換x。注意標準SAPABAP/4程序遵守相似的命名約定:SAPMaxxx,其中a代表某應用程序區(qū)。三、命名程序屬性程序屬性決定程序屬于哪種應用程序以及程序所鏈接的邏輯數據庫。必須謹慎輸入屬性以便系統(tǒng)能正確處理程序(有關程序屬性的詳細信息,參見重要的程序屬性(頁459))。已經將名稱分配給程序并選擇“ABAP/4編輯器初始屏幕”上的“創(chuàng)建”時,出現(xiàn)“ABAP/4:程序屬性”屏幕。要輸入程序屬性,請進行如下操作:1. 在字段“標題”中輸入程序標題。選擇描述程序功能的標題。系統(tǒng)自動將標題與文本摘要合并。如果以后要更改標題,請按如下操作進行:- 選擇“ABAP/4編輯器初始屏幕”上的“文本摘要”或“屬性”。- 選擇“更改”。2. 完成兩個強制字段:- 如果創(chuàng)建報表程序,則在“類型”字段中輸入1,如果創(chuàng)建模塊存儲,則在“類型”字段中輸入M。關于可能類型的列表,請單擊可能條目箭頭。- 在“應用程序”字段中為應用程序輸入分類字母,如財務會計輸入F。3. 如果創(chuàng)建報表(類型=1),請選擇“確定”。系統(tǒng)將特定報表屬性自動插入輸入字段。然后看見附加字段“邏輯數據庫”、“從應用程序”和“選擇屏幕”(版本)。4. 指定與程序相關的所有其他屬性(有關程序屬性的詳細信息,參見重要的程序屬性(頁459))。5. 選擇“保存”以保存屬性。6. 出現(xiàn)“維護對象目錄條目”窗口。7. 輸入開發(fā)類。如果為培訓或測試目的創(chuàng)建程序(如某私有對象),則輸入開發(fā)類$TMP或選擇“邏輯對象”。8. 選擇“保存”以保存開發(fā)類。這將關閉“維護對象目錄條目”窗口并返回“ABAP/4:程序屬性”屏幕。9. 選擇“后退”離開屏幕。如果要直接轉到ABAP/4編輯器,請選擇“轉向->源代碼”。如果通過預定義開發(fā)類在“對象瀏覽器”中創(chuàng)建程序,則跳過步驟6到8。四、重要的程序屬性最重要的程序如下所述。關于其它屬性的詳細信息(或關于此處描述的屬性的詳細信息),請選擇相關的輸入字段,并單擊可能的條目箭頭。注意下述某些屬性只適用于報表程序并不適用于其他ABAP/4程序。類型除了類型1(如同報表的獨立程序)和M(模塊存儲),還應該注意類型I(包含程序)。包含程序是個獨立的程序,它有兩個主要特征。首先,它包含程序代碼,不同程序都可使用該代碼。其次,它用于模塊化程序源代碼,該代碼分成邏輯相關部分。其中每個部分都存儲在不同的包含程序中。包含程序改善源代碼的可讀性并有助于維護。(有關包含程序的詳細信息,參見包含程序)。應用程序“應用程序”字段包括應用程序的縮寫,如,財務會計縮寫為F。該必需條目使系統(tǒng)能將程序分配給適當的業(yè)務區(qū)。開發(fā)類開發(fā)類對系統(tǒng)之間進行傳輸非常重要。執(zhí)行傳輸時,可以將分配給某個開發(fā)類的工作臺對象組合起來。如果用戶在某組中工作,也許要將程序分配給現(xiàn)有開發(fā)類或創(chuàng)建新的開發(fā)類。分配給開發(fā)類$TMP的程序是私有對象并且不能傳輸到其他系統(tǒng)。但是,也可以通過選擇“ABAP/4編輯器初始屏幕”上的“程序->重新分配...”更改分配給程序的開發(fā)類。應用程序中的邏輯數據庫(僅報表程序)這些屬性決定報表使用哪個邏輯數據庫檢索數據,以及邏輯數據庫屬于哪個應用程序。應用程序中數據庫名稱必須是唯一的。但是,整個系統(tǒng)可以包括數個同名數據庫。因此指定應用程序很重要。關于邏輯數據庫的詳細信息,參見邏輯數據庫的特性和維護。如果報表程序直接讀取數據,而未使用邏輯數據庫(關于此主題的詳細信息,參見訪問帶邏輯數據庫的數據庫表),則應該象通常一樣指定應用程序,但將“邏輯數據庫”字段置空。選擇屏幕版本(僅報表程序)如果沒有指定選擇屏幕版本,則系統(tǒng)在邏輯數據庫選擇標準、報表特定參數及選擇選項的基礎上自動創(chuàng)建選擇屏幕(關于選擇屏幕的詳細信息,參見使用選擇屏幕)。如果想使用自己的選擇屏幕,請在此字段中輸入號碼。該號碼必須小于1000??梢酝ㄟ^按F4或在DBxxxSEL程序中找到現(xiàn)有選擇屏幕號碼(詳細信息,參見邏輯數據庫選擇)。大寫/小寫顯示和存儲時,如果要讓ABAP/4編輯器將程序代碼與輸入時保持相同,則請將該字段置空。如果選擇該字段,則所有的程序代碼(除了引號中的文本及注釋外)都轉換成大寫字母。屏幕顯示依賴于所使用的編輯器模式(詳細信息,參見文檔ABAP/4工作臺工具。編輯器鎖定如果設置此屬性,則其他用戶則不能修改、改名或刪除程序。只有用戶可以更改程序、維護屬性、文本摘要及文檔;或者解除鎖定。定點算術如果設置此屬性,系統(tǒng)則根據小數點位數將類型P字段四舍五入,或用零填補(關于類型P字段的詳細信息,參見數字數據類型(頁3-4))。這種情況下,無論在用戶主記錄中指定了什么,小數點字符總是句點(.)。通過變式啟動(僅報表程序)如果設置該屬性,則用戶只可以使用變式啟動報表程序。在啟動程序之前,必須創(chuàng)建至少一個報表變式(關于創(chuàng)建變式的詳細信息,參見使用變式預設置選擇)。五、編寫程序在ABAP/4編輯器中編寫ABAP/4程序??梢灾苯訌摹癆BAP/4程序屬性”屏幕切換到編輯器,也可以從“ABAP/4編輯器初始屏幕”中調用編輯器。請進行如下操作:1. 在“ABAP/4程序屬性”屏幕上選擇“轉向->源代碼”或“源代碼”。選定“源代碼”并選擇“ABAP/4編輯器初始屏幕”上的“更改”。出現(xiàn)“ABAP/4編輯器編輯程序”屏幕。系統(tǒng)自動輸入第一個ABAP/4語句,如REPORT<reportname>orPROGRAM<programname>.對于<report/programname>,系統(tǒng)使用在“ABAP/4編輯器初始屏幕”上輸入的名稱。語句REPORT和PROGRAM實際上具有相同功能。它們使系統(tǒng)能識別報表程序或任何其他ABAP/4程序并允許為輸出列表指定一定的標準:REPORT或PROGRAM語句可以有不同的參數,如LINE-SIZE、LINE-COUNT或NOSTANDARDPAGEHEADING。這些參數主要適用于報表程序,用來分析數據并輸出結果列表。關于列表的詳細信息,參見[Seealso:第六章創(chuàng)建列表<file://nyf:\1\2\5\>]或參見REPORT和PROGRAM上的關鍵字文檔。2. 輸入程序代碼。3. 選擇“檢查”進行語法檢查。然后系統(tǒng)掃描程序代碼尋找語法錯誤及不相容處。如果檢查出錯誤,則出現(xiàn)消息報告它并且有可能的話將建議解決方案或更正。將光標放在適當的位置上。4. 選擇“保存”保存代碼。源文本存儲在程序庫中。六、測試程序測試程序檢查代碼是否正確工作。為測試目的要運行程序,選擇“ABAP/4編輯器編輯程序”屏幕上的“程序->執(zhí)行”。系統(tǒng)執(zhí)行該程序,如同從“ABAP/4編輯器初始屏幕”中啟動的一樣。例如,創(chuàng)建報表程序之后,則首先出現(xiàn)從中輸入條件的選擇屏幕,然后是結果列表。如果正創(chuàng)建ABAP/4程序模塊,則必須在運行程序之前創(chuàng)建事務代碼(關于創(chuàng)建事務代碼的詳細信息,參見對話編程簡介)。出于測試目的,可以先不進行保存,直接運行某個不是模塊存儲部件的程序。編輯器保留一個包含更改的臨時版本。但是,測試結束后必須返回編輯器以確保所有更改都已保存。七、顯示或更改程序本節(jié)主要說明如何顯示或更改現(xiàn)有程序。此處相關的是技術步驟而不是實際代碼更改。要顯示或更改程序,請進行如下操作:1. 在“ABAP/4編輯器初始屏幕”上的“程序”字段中輸入要更改的程序名稱。2. 選擇“源代碼”并選擇“顯示”或“更改”。如果選擇“更改”則繼續(xù)步驟3。如果選擇“顯示”,則看到“ABAP/4編輯器顯示程序”屏幕。此處也顯示源代碼,但不能進行更改??梢酝ㄟ^選擇“顯示->更改”切換到更改模式。3. 如果其他用戶鎖定該程序對編輯器的訪問,則系統(tǒng)顯示下列消息:User<name>forbadeallchanges.在這種情況下,不能更改程序。要更改程序,必須將它復制到新程序中并用新程序名再開始步驟1。否則,繼續(xù)步驟5。4. 輸入對程序代碼的更改。5. 選擇“檢查”檢查語法。6. 保存程序的更改版本。如果更改程序的私有版本(開發(fā)類$TMP),則立即保存更改版本。如果從$TMP之外的開發(fā)類更改程序,則會出現(xiàn)一個窗口,從中可以指定更正請求號(ChangeRequestNumber)。7. 運行程序測試它(關于測試的詳細信息,參見測試程序(頁11))。八、將事務代碼分配給程序可以將事務代碼分配給類型1的單獨程序,以后就將這些程序作為事務代碼處理。在[Seealso:第三部分編寫ABAP/4事務<file://nyf:\1\3\>]中對事務有說明。進行如下操作:1. 按照本節(jié)上述主題所述,創(chuàng)建單獨程序。2. SAP菜單樹:工具->ABAP工作臺->開發(fā)->其他工具->事務,事務代碼:SE93。3. 填入事務代碼并選擇“維護事務”屏幕上的“創(chuàng)建”4. 在下列對話屏幕上選擇“報表事務”;5. 在下列“創(chuàng)建報表事務”屏幕上填入所需條目“事務說明”和“程序”。6. 將事務代碼保存在開發(fā)類中。開發(fā)類可以用事務代碼SM30維護視圖V_TDEVC來創(chuàng)建或修改。ABAP/4程序語法和格式本節(jié)說明ABAP/4語法,并且提供關于如何在ABAP/4中編程的建議。同時解釋如何提高程序的清晰性,以及使用已有程序代碼模塊使編程變得更加容易。本節(jié)的主題包括:本節(jié)只是概述。關于單個ABAP/4組件的詳細信息,參見本寶典的相應主題。語法元素ABAP/4編程語言包括下列元素類型:語句ABAP/4程序包括單個ABAP/4語句。每條語句以關鍵字開頭,以句號結束。PROGRAMSAPMTEST.WRITE'FirstProgram'.該示例包含兩條語句,每行一條。關鍵字是PROGRAM和WRITE。程序在屏幕上顯示輸出(稱為列表)。此示例中,列表包括“第一個程序”行。關鍵字關鍵字是語句的第一個詞。它決定整個語句的意義。有四種不同類型的關鍵字: 說明性關鍵字這些關鍵字定義數據類型,或者說明程序可以訪問的數據對象。說明性關鍵字示例:TYPES,DATA,TABLES系統(tǒng)在生成程序期間處理說明性關鍵字,而不是在運行時。在程序代碼中獨立于其位置處理它們。為清楚起見,應該在程序開頭的“說明部分”指定所有說明性關鍵字。關于說明關鍵字的詳細信息,參見聲明數據。 事件關鍵字這些關鍵字在ABAP/4程序中定義處理塊。處理塊是當特定事件發(fā)生時進行處理的語句組。事件關鍵字示例如下:ATSELECTIONSCREEN,START-OF-SELECTION,ATUSER-COMMAND關于事件關鍵字的詳細信息,參見用事件控制ABAP/4程序流。 控制關鍵字這些關鍵字根據特定條件控制ABAP/4程序流??刂脐P鍵字示例如下:IF,WHILE,CASE關于控制關鍵字的詳細信息,參見控制ABAP/4程序流。 操作關鍵字當某事件(由事件關鍵字觸發(fā))和條件(由控制關鍵字定義)發(fā)生時,這些關鍵字則處理數據(由說明性關鍵字定義)。操作關鍵字示例如下:WRITE,MOVE,ADD關于控制關鍵字的詳細信息,參見[Seealso:第五章處理數據<file://nyf:\1\1\4\>]。注釋注釋是寫在ABAP/4程序語句之間用來向讀者解釋其目的的文本摘要。注釋有導致系統(tǒng)忽略它們的特殊字符標記。應該在內部開發(fā)程序中使用注釋。注釋幫助其他用戶理解和更改程序。*************************************************PROGRAMSAPMTZST**CREATEDBYCARLBYTE,06/27/1995**LASTCHANGEBYRITADIGIT,10/01/1995**PURPOSE:DEMONSTRATION*************************************************PROGRAMSAPMTEST.*************************************************DECLARATIONPART*************************************************DATA*************************************************OPERATIONPART*************************************************所有以星號(*)開始的行都是注釋,并且被系統(tǒng)忽略(關于注釋的詳細信息,參見下一節(jié)語法結構中的注釋結構)。語法結構ABAP/4程序是具有特定結構的不同語句的順序??梢栽谡Z句間插入注釋。分開的但相似的語句順序可以組成鏈語句。語句結構下列圖表顯示ABAP/4語句的結構。ABAP/4沒有格式限制??梢宰杂筛袷捷斎胝Z句。這意味著可以縮排語句、在一行中寫幾條語句或者一條語句跨越幾行。在語句中必須以至少一個空格分開詞。系統(tǒng)也將行結束符解釋為空格。語句以句號“.”作為結束,一條語句可以跨越多行。程序段PROGRAMSAPMZTST.

WRITE'Thisisastatement'.也可以如下編寫:PROGRAMSAPMTEST.WRITE'Thisisastatement'.或者如下:PROGRAM

SAPMTEST.

WRITE

'Thisis

astatement'.應該使用自由格式提高程序的可讀性,但是應避免使用復雜格式。注釋結構可以在程序的任意處插入注釋行。在程序中有兩種方法表明注釋: 如果要將整行變?yōu)樽⑨?,則在行開始處輸入星號(*)。 如果要將某行的一部分變?yōu)樽⑨?,則在注釋之前輸入雙引號(")。系統(tǒng)將由雙引號標明的注釋解釋為空格。PROGRAMSAPMTEST.*ThefollowinglinecontainsaWRITEstatementWRITE'FirstProgram'."OutputonList本程序的第二行是不執(zhí)行的注釋。注釋由行開始處的星號(*)標明。在第三行,雙引號(")之后全部都是注釋并且不執(zhí)行。程序的其余部分為帶關鍵字PROGRAM和WRITE的可執(zhí)行語句。連接相似語句ABAP/4編程語言允許將帶相同起始部分的連續(xù)語句連入鏈語句。要連接分開的語句,只要寫一次相同部分,并且在其后設置冒號(:)。在冒號后,列出語句的其余部分并用逗號(,)分開。請保證在最后部分之后設置句號以通知系統(tǒng)鏈的結束處。語句順序:WRITESPFLI-CITYFROM.

WRITESPFLI-CITYTO.

WRITESPFLI-AIRPTO.鏈語句:WRITE:SPFLI-CITYFROM,SPFLI-CITYTO,SPFLI-AIRPTO.在鏈中,冒號將語句的開始部分與可變部分分開??梢栽诿疤枺ɑ蚨禾枺┲盎蛑蟛迦肴我鈧€空格。例如,可以寫如下相同語句:WRITE:SPFLI-CITYFROM,

SPFLI-CITYTO,

SPFLI-AIRPTO.在鏈語句中,第一部分(冒號之前)不受語句關鍵字的限制。語句順序:SUM=SUM+1.SUM=SUM+2.SUM=SUM+3.SUM=SUM+4.鏈語句:SUM=SUM+:1,2,3,4.ABAP/4程序格式要編寫高質量的程序,不僅應該遵循命名約定(參見[Seealso:命名程序規(guī)則<file://nyf:\1\1\0\1\>]),而且要保持一定的ABAP/4程序格式標準。一開始定義數據就應該注意這些標準。在構建程序流時注意下列主題中的建議,并且盡可能地使用信息注釋。如果遵照這些建議,程序將 更具有可讀性 更容易測試和更改 更可靠要提高程序的質量,請使用下列技術:ABAP/4編輯器包括更容易分配程序格式的工具。該工具稱為整齊打印程序??s排語句塊應該將屬于一組的語句組成單一塊。關于語句塊的詳細信息,參見[Seealso:第六章控制ABAP/4程序流<file://nyf:\1\1\5\>]。每塊至少縮排兩列,如下所示。使用模塊化工具要編出好的程序,應該使用ABAP/4模塊化工具(參見[Seealso:第八章模塊化ABAP/4程序<file://nyf:\1\1\7\>])。如果將大處理塊寫成子程序,則程序的邏輯結構容易識別。允許根據執(zhí)行的任務排序子程序。子程序可能增加程序的總長度,但是您將發(fā)現(xiàn)該方法大大增加清晰性,特別是在復雜程序的情況下。如果按系統(tǒng)執(zhí)行的順序排列子程序,則程序代碼很容易讀。正確插入程序注釋應該避免在語句行中放置注釋。在注釋行放置它們將提高程序的可讀性。要在程序中插入子程序標題和注釋,請使用ABAP/4編輯器可用的已有結構。在子程序標題中,解釋調用程序的目的并且提供足夠的信息和參考。關于已有結構的詳細信息,參見插入已有關鍵字結構和在ABAP/4工作臺工具中的ABAP/4編輯器文檔。整齊打印程序使用整齊打印程序可以更容易地遵循ABAP/4格式指南。整齊打印程序是ABAP/4編輯器的可選功能(有關詳細信息,參見ABAP/4工作臺工具中的ABAP/4編輯器文檔)。要從ABAP/4編輯器調用整齊打印程序,請選擇菜單“編輯->規(guī)范化打印機”。這里是整齊打印程序如何工作的示例。下面顯示在使用整齊打印程序之前程序的格式:PROGRAMZSAPMTEST.DATA:SUM1TYPEI,SUM2TYPEI,SUM3TYPEI.IFSUM1=SUM2.WRITE'Case1'.ELSEIFSUM1=SUM3.WRITE'Case2'.ENDIF.使用整齊打印程序之后,相同程序如下所示:PROGRAMZSAPMTEST.DATA:SUM1TYPEI,SUM2TYPEI,SUM3TYPEI.IFSUM1=SUM2.WRITE'Case1'.ELSEIFSUM1=SUM3.WRITE'Case2'.ENDIF.插入已有結構已有結構可以簡化ABAP/4程序的編碼。它提供確切的語法,并且遵循ABAP/4格式指南。使用ABAP/4編輯器時可以在程序中插入兩種已有結構:關于已有結構的詳細信息,參見ABAP/4工作臺工具中的ABAP/4編輯器文檔。插入已有關鍵字結構要在代碼中插入已有關鍵字結構,請進行下列操作:1. 將光標放在要插入結構的行上。2. 選擇菜單“編輯->模式”。3. 在出現(xiàn)的對話框中,選擇帶單選按鈕的語句,或者在“其它結構”字段中輸入:要顯示所有可用的已有關鍵字結構的列表,請將光標放在“其它模式”字段上,并且單擊輸入字段右側的可能條目箭頭。所有首字符為星號(*)的語句都是已有注釋行(關于已有注釋行的詳細信息,參見插入已有注釋行(頁11))。如果在對話框的“其它模式”字段中輸入CASE,則系統(tǒng)在程序中插入如下行:CASEf.

WHENw1.

WHENw2.

WHENOTHERS.

ENDCASE.插入已有注釋行要在代碼中插入已有注釋行,請執(zhí)行下列操作:1. 遵照插入已有關鍵字結構中的1到2步驟。2. 在對話框的“其他模式”字段的可能條目列表中選擇帶首字符為星號(*)的結構。3. 系統(tǒng)將注釋行插入到程序中。如果在對話框的“其他模式”字段中輸入**3,則系統(tǒng)在程序中插入如下行:*********************************************************

**

**

**

*********************************************************

將數據輸出到屏幕本節(jié)說明如何在屏幕上創(chuàng)建簡單輸出列表。為此,請使用WRITE語句。下面將介紹:ABAP/4允許在屏幕和紙張上,生成比這里看到的更復雜和更有效的輸出列表。這些介紹是后面章節(jié)(例如,創(chuàng)建列表)的基礎。WRITE語句在屏幕上輸出數據的基本ABAP/4語句是WRITE。語法WRITE<f>.該語句以其標準格式,將字段<f>輸出到當前列表中。默認情況下,該列表顯示在屏幕上。字段<f>可以是 任何數據對象(參見數據對象) 字段符號或公式參數(參見使用字符符號(頁使用字段符號)) 文本符號(參見WorkingwithTextElements)選擇“打印”,可以直接從輸出屏幕打印當前輸出列表。如果為程序定義選項屏幕(參見使用選擇屏幕),就可以在選擇屏幕上選擇“執(zhí)行和打印”,然后,該列表不輸出到屏幕上,而是直接發(fā)送到打印機。PROGRAMSAPMZTST.WRITE'Hello,hereIam!'.當啟動該程序時,系統(tǒng)離開當前屏幕(這可能是“ABAP/4編輯器:初始屏幕”),并如下所示轉到輸出屏幕:輸出屏幕與在程序屬性中指定的程序標題有相同的名稱(參見指定程序屬性)。屏幕上的第一行包含列表表頭。默認情況下,該列表表頭與程序標題相同。但是,可以由實際程序外的程序標題單獨維護列表表頭。詳細信息,參見(使用文本摘要)。當前頁號(1)出現(xiàn)在右邊。列表表頭后緊跟著一條水平線,然后顯示輸出??梢赃x擇“搜索”,以搜索特定模式。在屏幕上,輸出通常是左對齊的。如果使用幾個WRITE語句,輸出字段就一個接一個顯示,輸出之間由列分開(如一個空格)。如果當前行沒有足夠空間,則開始新行。PROGRAMSAPMTEST.TABLESSPFLIWRITE:'COMPANY:',SPFLI-CARRID.注意冒號和逗號的用法(參見語法結構)。該示例中的程序段向屏幕輸出兩個字段:文字“COMPANY:”和表格工作區(qū)SPFLI的組件CARRID:COMPANY:AA。輸出屏幕上的數據字段格式,依賴數據類型(參見預定義的基本數據類型)。預定義數據類型的輸出格式數據類型輸出長度定位C字段長度左對齊D8左對齊F22右對齊I11右對齊N字段長度左對齊P2*字段長度(+1)右對齊T6左對齊X2*字段長度左對齊數字數據類型F、I和P是右對齊的,左邊用空格填充。如果有足夠的空間,也輸出千位分隔符。如果類型P字段包含小數位,則默認輸出長度增加一位。對數據類型D,日期的內部格式與輸出格式不同。當輸出數據使用WRITE語句時,系統(tǒng)自動以用戶主記錄中指定的格式(例如,DD/MM/YYYY或MM/DD/YYYY),輸出數據類型D。PROGRAMSAPMTEST.DATANUMBERTYPEPVALUE'-1234567.89'DECIMALS2.WRITE:'Number',NUMBER,'ispacked'.輸出如下:Number1,234,567.89-ispacked字段NUMBER總長為13,即,9位數字(包括小數點)、前導負號和作為分隔符的兩個逗號。因為類型P字段的字段長度為8,所以NUMBER字段的輸出長度為2*8+1=17。剩余的位置用四個空格填充。這意味著,在文字‘Number’和數字自身之間有五個空格。在屏幕上定位WRITE輸出如下所示,通過制定字段名稱前面的格式規(guī)范,可以在屏幕上定位WRITE語句的輸出:語法WRITEAT[/][<pos>][(<len>)]<f>.此處 斜線‘/’表示新的一行 <pos>是最長為三位數字的數字或變量,表示在屏幕上的位置 <len>是最長為三位數字的數字或變量,表示輸出長度如果格式規(guī)范只包含直接值(即,不是變量),可以忽略關鍵字AT。WRITE'Firstline.'.WRITE'Stillfirstline.'WRITE/'Secondline.'WRITE/13'Thirdline.'這在屏幕上生成如下輸出:FirstLine.Stillfirstline.

Secondline.

Thirdline.如果指定某一個位置<pos>,則無論在該位置是否有可用的空間,或寫有其它字段,總是在該位置輸出字段。DATA:LENTYPEIVALUE10,

POSTYPEIVALUE11,

TEXT(10)VALUE'1234567890'WRITE'Thetextappearsinthetext.'.WRITEATPOS(LEN)TEXT.這在屏幕上生成如下輸出:Thetext-1234567890-appearsinthetext.如果輸出長度<len>太短,則顯示幾個字符。左邊截斷數字字段,并用星號(*)作前綴。右邊截斷所有其它字段,但是沒有給出該字段較短的指示。DATA:NUMBERTYPEIVALUE1234567890,

TEXT(10)VALUE'abcdefghij'.WRITE:(5)NUMBER,/(5)TEXT.輸出如下:*7890abcde格式化選項對WRITE語句,可以使用不同的格式化選項。語法WRITE<f><選項>.所有數據類型的格式化選項選項用途LEFT-JUSTIFIED輸出左對齊。CENTERED輸出居中。RIGHT-JUSTIFIED輸出右對齊。UNDER<g>輸出直接開始于字段<g>下。NO-GAP忽略字段<f>后的空格。USINGEDITMASK<m>指定格式模板<m>。USINGNOEDITMASK撤消對ABAP/4詞典中指定的格式模板的激活。NO-ZERO如果字段僅包含零,則用空格代替它們。對類型C和N字段,將自動代替前導零。數字字段的格式化選項選項用途NO-SIGN如果<f>是類型I,P或F,不輸出前導符號。NOGROUPING如果<f>是類型I,P或F,則千位分隔符被省略。DECIMALS<d><d>定義小數點后的數字位數。EXPONENT<e>在類型F字段中,在<e>中定義冪數。ROUND<r>用10**(-r)乘類型P字段,然后取整。CURRENCY<w>按表格TCURX中的貨幣<w>格式化。UNIT<u>按表格T006中為類型P字段所指定的單位<u>固定小數位數。日期字段的格式化選項選項用途DD/MM/YY用戶主記錄中定義的分隔符MM/DD/YY用戶主記錄中定義的分隔符DD/MM/YYYY用戶主記錄中定義的分隔符MM/DD/YYYY用戶主記錄中定義的分隔符DDMMYY無分隔符。MMDDYY無分隔符。YYMMDD無分隔符。TIMEZONE<tz>參考時間區(qū)域<tz>輸出<f>作為時間標記。關于格式選項和這些選項內例外原則的詳細信息,參見WRITE語句的關鍵字文檔。以下是格式選項的一些示例。要獲得更多的示例,參見章節(jié)創(chuàng)建列表。在用戶主記錄中,定義了數字字段的小數點字符和千位分隔符(分號或逗號)。ABAP/4代碼屏幕輸出DATA:G(5)VALUE'Hello',F(5)VALUE'Dolly'.WRITE:G,F.HelloDollyWRITE:/10G,Hello/FUNDERG.DollyWRITE:/GNO-GAP,F.HelloDollyDATATIMETYPETVALUE'154633'.WRITE:TIME,154633/(8)TIMEUSINGEDITMASK'__:__:__'.15:46:33WRITE:'000123',000123/'000123'NO-ZERO.123DATAFLOATTYPEFVALUE'123456789.0'.WRITEFLOATEXPONENT3.1.23E+08DATAPACKTYPEPVALUE'123.456'DECIMALS3.WRITEPACKDECIMALS2.123.46WRITE:/PACKROUND-2,12,345.60/PACKROUND-1,1,234.56/PACKROUND1,12.346/PACKROUND2.1.235WRITE:SY-DATUM,06/27/1995/SY-DATUMYYMMDD.950627在屏幕上輸出符號和圖標使用下列語法,可以在屏幕上輸出符號和R/3圖標:語法WRITE<symbol-name>ASSYMBOL.WRITE<icon-name>ASICON.符號和圖標的名稱(<符號名>和<圖標名>)是定義系統(tǒng)的常量,這些常量在包含程序<SYMBOL>和<ICON>(尖括號是名稱的一部分)中指定。這些包含程序也包含符號和圖標的簡短說明。輸出符號和圖標最簡單的方法是使用語句結構(參見通過語句結構使用WRITE中的示例)。要使符號和圖標對程序可用,必須在程序中輸入恰當的包含程序或更易理解的包含程序<LIST>。關于輸入包含程序的詳細信息,參見使用包含程序。INCLUDE<SYMBOL>.INCLUDE<ICON>.WRITE:/'PhoneSymbol:',SYM_PHONEASSYMBOL.SKIP.WRITE:/'AlarmIcon:',ICON_ALARMASICON.輸出如下:上面兩個INCLUDE語句可以用單個INCLUDE語句替代INCLUDE<LIST>.輸出屏幕上的線和空行用下列語法,可以在輸出屏幕上生成水平線:語法ULINE[AT[/][<pos>][(<len>)]].如:ULINEAT10(20).它等同于WRITE[AT[/][<pos>][(<len>)]]SY-ULINE.AT后的格式規(guī)范,與在在屏幕上定位WRITE輸出中為WRITE語句說明的格式規(guī)范完全一樣。如果沒有格式規(guī)范,系統(tǒng)則開始新的一行,并用水平線填充該行。否則,只按指定輸出水平線。生成水平線的另一種方法,是在WRITE語句中鍵入恰當數量的連字符,如下所示:WRITE[AT[/][<pos>][(<len>)]]'...'.垂直線用下列語法,可以在輸出屏幕上生成垂直線:語法WRITE[AT[/][<pos>]]SY-VLINE.如:WRITEAT10SY-VLINE.或WRITE[AT[/][<pos>]]'|'.空行用下列語法,可以在輸出屏幕上生成空行:語法SKIP[<n>].該語句從當前行開始,在輸出屏幕上生成<n>個空行。如果沒有指定<n>的值,就輸出一個空行。要將輸出定位在屏幕的指定行上,請使用:語法SKIPTOLINE<n>.該語句允許將輸出位置向上或向下移動。要獲得更多的信息和示例,參見創(chuàng)建列表。將字段內容作為復選框輸出使用下列語法,可以將字段的第一個字符,作為復選框輸出到輸出屏幕上:語法WRITE<f>ASCHECKBOX.如果字段<f>的第一個字符是一個“X”,就顯示復選框已填充。如果字段<f>的第一個字符是SPACE,就顯示復選框為空。該語句創(chuàng)建的復選框,默認狀態(tài)是可輸入的。就是說,用戶可以通過單擊鼠標來填充它們或使其為空。如何使輸出字段能輸入或撤消輸入,將在使字段接受輸入下加以說明。能輸入字段在允許用戶對話的交互式列表中是很重要的(參見交互列表)。DATA:FLAG1VALUE'',

FLAG2VALUE'X',

FLAG3(5)VALUE'Xenon'.WRITE:/'Flag1',FLAG1ASCHECKBOX,

/'Flag2',FLAG2ASCHECKBOX,

/'Flag3',FLAG3ASCHECKBOX.輸出列表如下:對FLAG2和FLAG3,因為這些字段的第一個字符是“X”,所以填充復選框。通過單擊鼠標,用戶可以改變復選框的內容。通過語句結構使用WRITE處理文本摘要ABAP/4編程環(huán)境支持在多種語言中創(chuàng)建和維護程序。可以將程序輸出到屏幕上的所有文本,作為文本池中的文本摘要存儲起來。對不同的語言,可以創(chuàng)建自己的文本池。更改文本時,就不必改程序代碼,而只須更改恰當的文本摘要。本章將介紹:圖1(略)一、文本摘要概念文本摘要包括在選擇屏幕或ABAP/4程序的輸出屏幕上出現(xiàn)的任何說明性文本。文本摘要包含: 程序標題。標題屬于程序屬性

(參見指定程序屬性) 輸出列表頁眉的列表標題和列標題

(參見創(chuàng)建列表) 選擇屏幕上出現(xiàn)的選擇文本

(參見使用選擇選擇屏幕) 可在WRITE語句中使用的文本符號

(參見WRITE語句)。可以在語言相關的文本池中,將這些文本摘要存儲在程序之外。程序自動使用用戶登錄語言的文本摘要。不用更改程序代碼,就可以創(chuàng)建和維護文本摘要??梢詣?chuàng)建標準文本池(可以將標準文本池從一個程序復制到另一個程序)。如果在WRITE語句中只是處理符號,而不使用串文字,程序就與語言無關。只有初始語言文本池的文本摘要,才必須翻譯成其它語言。ABAP/4工作臺完全支持文本摘要的翻譯。翻譯器可以從初始語言的現(xiàn)有文本池,創(chuàng)建其它不同語言的文本池。二、創(chuàng)建和更改文本摘要如果希望創(chuàng)建或更改程序特有的文本摘要,請進行如下操作:1. 在“ABAP/4編輯器初始屏幕”(SE38)上,在“程序”字段中,輸入希望維護其文本摘要的程序名稱。2. 選擇“文本摘要”并選擇“顯示”或“更改”。圖2(略)進入“ABAP/4文本摘要”屏幕。圖3(略)現(xiàn)在,選擇希望為程序維護的文本摘要類型。如果已更改程序的源代碼,但還沒有生成程序,系統(tǒng)詢問是否要生成程序。要更新文本摘要與程序的關系,則必須生成程序。如果登錄語言與程序的初始語言不一樣(比如,登錄語言是創(chuàng)建程序的語言),則下列特性適用于所有文本摘要: 在顯示模式中,可以看到表示初始語言與登錄語言不同的警告。文本摘要以登錄語言顯示。如果某些文本摘要在初始語言中存在,但在登錄語言中不存在,則它們以初始語言顯示,并用語言標識符在右邊做上相應的標記。這允許定位未翻譯的文本摘要(參見翻譯文本摘要(頁9)中的示例)。 在更改模式中,系統(tǒng)詢問是否希望在初始語言中維護文本摘要,或是否希望更改初始語言。更改初始語言時,就從舊初始語言中獲取新的初始語言中不存在的文本,但不做標記。下面的主題更詳細地討論不同的文本摘要:三、標題和表頭每個程序都必須有標題。在指定程序屬性(參見指定程序屬性)時,輸入程序標題??梢噪S意更改標題??梢詣?chuàng)建或更改程序輸出列表的表頭行,以及列表中不同列的列標題。更改程序的標題要更改程序的標題,從“ABAP/4文本摘要”屏幕中選擇“標題和表頭”,然后選擇“更改”。在“標題”字段中,可以輸入最長為70個字符的標題。圖4(略)選擇“保存”保存更改。創(chuàng)建和更改列表及列表頭要在輸出中創(chuàng)建或更改標題,從“ABAP/4文本摘要”屏幕中選擇“標題和表頭”,然后選擇“更改”。在“列表表頭”字段中,可以輸入最長為70個字符的列表表頭,在“列標題”字段的四行中,可以輸入最長為255個字符的列標題。圖5(略)可以用“編輯”菜單的選項格式化標題。如果沒有指定任何列表表頭,就在屏幕上顯示程序標題。選擇“保存”保存更改。圖6(略)假設有下列程序:PROGRAMSAPMZTST.DATA:NUM1TYPEI,NUM2TYPEPDECIMALS2.DO5TIMES.

NUM1=SY-INDEX**2.NUM2=SQRT(SY-INDEX).

WRITE:/SY-INDEX,NUM1,NUM2.

ENDDO.如果創(chuàng)建如上所示的表頭,則輸出屏幕如下:圖7(略)對于包含程序(參見包含程序),只能維護程序標題。四、選擇文本可以用文本摘要替代屏幕上出現(xiàn)的參數及選擇標準的標準文本(參見使用選擇屏幕)。要更改選擇屏幕上的文本,從“ABAP/4文本摘要”屏幕中選擇“選擇文本”,然后選擇“更改”。在下列屏幕上,列“名稱”已經包含程序的參數名稱及程序的選擇標準名稱(參見下面的示例)?,F(xiàn)在,對每個參數和選擇標準,可以輸入最長為30個字符的選擇文本。如果已創(chuàng)建ABAP/4詞典字段的選擇標準,可以選擇“實用程序->復制DD文本”。系統(tǒng)用作為屬性分配給ABAP/4詞典字段的短文本,自動填充這些選擇文本。文本摘要保持不變,但可以修改。圖8(略)如果在將短文本作為選擇文本復制到文本池中之后,再在ABAP/4詞典中對該文本進行更改,則不將該更改自動轉移到文本池中。選擇“保存”保存更改。如果在維護選擇文本之后,再更改或刪除任何參數或選擇標準,然后再調用選擇文本維護,則可以在程序中每個不再需要的文本右邊出現(xiàn)帶標記的復選框。這樣有助于刪除任何不使用的選擇文本。如果試圖刪除程序中使用的選擇文本,則系統(tǒng)輸出警告信息。在存儲選擇文本時,系統(tǒng)再次提示存在不使用的文本,并將其顯示出來以供刪除。假定有下列程序:PROGRAMSAPMZTST.TABLESSBOOK.PARAMETERS:TEXT(10).SELECT-OPTIONS:SEL1FORSBOOK-CARRID,

SEL2FORSBOOK-CONNID.更改選擇文本的屏幕如下:圖9(略)選擇“實用程序->復制DD文本”之后,它變?yōu)椋簣D10(略)現(xiàn)在,可以將光標放在(例如)SEL1上,選擇“實用程序->復制DD文本”更改其選擇文本。圖11(略)也更改了參數TEXT的選擇文本。在保存選擇文本并啟動SAPMZTST后,選擇屏幕如下:圖12(略)現(xiàn)在,用參數PARA代替程序中的參數TEXT:PROGRAMSAPMZTST.TABLESSBOOK.PARAMETERS:PARA(10).SELECT-OPTIONS:SEL1FORSBOOK-CARRID,

SEL2FORSBOOK-CONNID.然后,如果再次調用選擇文本維護,則生成程序后,屏幕如下:顯示新參數PARA,并將舊參數TEXT標記為“未使用”。五、文本符號文本符號是在程序外輸入和維護的文本常數。在程序的最終版本中,應該用文本符號而不是文本文字,以保持程序與語言無關并易于維護。要創(chuàng)建或更改文本符號,在“ABAP/4文本摘要”屏幕上選擇“文本符號”,并選擇“更改”。對于每個文本符號,應該指定一個三字符長度的標識符,該標識符不包含空格,也不以字符‘%’打頭。可以給每個文本符號分配最長為132個字符的文本。下劃線(_)代表空格。但是,不能用文本符號在屏幕上輸出下劃線。圖(略)可以用“編輯”菜單的功能格式化文本符號。要刪除文本符號,請將光標放在文本符號上,并選擇“刪除”。選擇“保存”保存更改。要在程序中包含文本符號,請按如下格式使用WRITE語句:語法WRITE...TEXT-<idt>...系統(tǒng)在文本池中查找?guī)俗R符<idt>的文本符號,并將分配的文本寫到屏幕上。如果文本符號<idt>不存在,則系統(tǒng)跳過WRITE語句。為避免跳過WRITE語句,可以在程序中定義文本。如果文本符號不存在,系統(tǒng)就將該文本寫到屏幕上。為此,請按如下格式使用WRITE語句:語法WRITE...'<text>'(<idt>)...如果存在文本符號<idt>,系統(tǒng)就使用文本符號。否則,系統(tǒng)將串文字<text>寫到屏幕上。圖略不能對文本符號使用偏移量規(guī)范(參見為數據對象指定偏移值)。PROGRAMSAPMZTST.WRITE:TEXT-010,

/TEXT-AAA,

/TEXT-020,

/'DefaultText030'(030),

/'DefaultText040'(040).如果將上述文本符號與該程序鏈接,則輸出如下:文本符號020和040不存在。在020的情況下,系統(tǒng)跳過WRITE語句。在040的情況下,則將程序中定義的文本輸出到屏幕上。六、復制文本摘要可以將文本摘要從一個ABAP/4程序復制到另一個ABAP/4程序。復制功能允許傳輸具有自己的標準文本摘要的文本池,這些標準元素是在不同程序中使用的。為此,請在“ABAP/4文本摘要”屏幕上選擇“復制”。在“源程序”字段中,輸入希望從其中復制文本的程序名稱,在“目標程序”字段中,輸入希望將文本復制到其中的目標程序名稱。(圖略)要復制源程序的所有文本,選擇“復制”。如果只希望從源程序中復制某些文本,則選擇“選擇部分”?,F(xiàn)在,可以指定希望復制的對象。(圖略)選擇相關的復選框并選擇“復制”。七、比較文本符號如果在程序代碼中插入新的文本符號,或更改現(xiàn)有文本符號,則不自動將這些文本符號復制到文本池中。要更新該列表并消除任何差異,可以使用“ABAP/4文本摘要”屏幕上的“比較文本符號”功能。為程序調用該功能后,系統(tǒng)在屏幕上顯示程序代碼中的所有文本符號,其文本在程序中和文本池中定義。在右邊,可以看到在程序和文本池中這些文本是否一樣(“P=T”)。如果文本不一樣,則用T標記文本池中的文本,并用P標記程序中定義的文本。在列+/-中,可以指定 “-”,從文本池中刪除文本符號 “+”,將文本符號添加到文本池中 “”,文本符號保持不變如果選擇“調整”,則系統(tǒng)根據這些設置,刷新文本池中的文本符號。這不改變程序代碼。圖略編寫如下程序:PROGRAMTEXTTEST.WRITE:TEXT-010,

'Placeholder'(020),

TEXT-030.不創(chuàng)建任何文本符號。文本符號列表為空。在“ABAP/4文本摘要”屏幕上選擇“比較文本符號”后,如果沒有生成程序,就出現(xiàn)對話框。圖略在這種情況下,單擊“生成”。就可以看到文本池中的文本符號和程序代碼的比較。圖略在程序中指定的文本符號010、020和030,在文本池中沒有定義。要將所有這些文本符號復制到文本池,使列+/-中的符號保持為“+”,并選擇“調整”。在做完這些后,在顯示模式中,文本符號列表如下:圖略系統(tǒng)已在文本池中創(chuàng)建了文本符號010、020和030。它沒有為010和030分配任何文本,并將在程序中定義的文本分配給020。現(xiàn)在,可以更改文本符號,如文本符號(頁31)中所述。將程序代碼更改為PROGRAMTEXTTEST.WRITE:TEXT-010,

'Placeholder'(020),

'TextSymbol'(030).生成程序,并再次在“ABAP/4文本摘要”屏幕上選擇“比較文本符號”?,F(xiàn)在,比較顯示如下:圖略首先,看到兩個正確定義的文本符號010和020,然后看到文本池和程序中文本符號030文本有區(qū)別的消息?!?”和“-”符號允許定義希望保留哪個文本。翻譯文本摘要要將文本摘要翻譯為其它語言,從“ABAP/4開發(fā)工作臺”屏幕開始,選擇“實用程序翻譯短/長文本”。在后續(xù)的“翻譯短/長文本”屏幕上,選擇“翻譯短文本程序”,然后選擇要翻譯的文本摘要。出現(xiàn)下列屏幕:輸入文本摘要所屬的程序名稱、初始語言和目標語言,并選擇“翻譯”。文本摘要以其輸入語言顯示??梢暂斎胱⑨?,并使用文本摘要下面的行輸入翻譯(參見下面的示例)。翻譯完當前類型的所有文本摘要后,請使用“定位”菜單中的功能翻譯其它類型的文本摘要。翻譯完所有文本摘要后,選擇“保存”保存翻譯。采用這種方式可以創(chuàng)建不同語言的完整文本池。如果存在不同語言的文本池,可以使用以下選項影響程序的輸出語言登錄語言:在缺省情況下,系統(tǒng)自動使用用戶的登錄語言。SETLANGUAGE語句:借助該ABAP/4語句,可以在程序中顯式地指定輸出語言,而不考慮登錄語言。語法SETLANGUAGE<lg>.語言<lg>可以是文字或變量。選擇某種語言(通過登錄語言或顯式規(guī)定)時,系統(tǒng)在該語言的文本池中查找包含在程序中的文本摘要。如果在該文本池中找不到文本摘要,則系統(tǒng)將程序代碼中的文本輸出到屏幕上,或跳過相關的WRITE語句(參見文本符號(頁31))。系統(tǒng)不使用其它語言的文本摘要。圖略假定程序如下所示,初始語言為英語。PROGRAMTRANTEST.WRITETEXT-010.并有如下輸出:圖略如果用德語登錄到系統(tǒng)上,并且不存在英語文本符號,在顯示程序的文本符號時,就看到下列行:圖略右邊的字符“E”表示存在英語文本符號010。在ABAP/4開發(fā)工作臺中,將文本摘要從英語翻譯為德語,如下所示:標題和表頭:圖略文本符號:圖略如果登錄R/3系統(tǒng)并指定語言“D”,程序TRANTEST的輸出如下:圖略通過按如下格式更改程序代碼,可以將程序TRANTEST的輸出語言修改為德語。PROGRAMTRANTEST.SETLANGUAGE'D'.WRITETEXT-010.現(xiàn)在,無論采用何種語言登錄,輸出始終為德語。處理數據賦值用MOVE賦值用指定偏移量賦值可以在每條ABAP/4語句中為基本數據類型指定偏移量和長度(參見指定數據對象的偏移量(頁345))。在這種情況下,MOVE語句語法如下:語法MOVE<F1>[+<o1>][(<l1>)]TO<F2>[+<o2>][(<l2>)].賦值運算符語法如下:語法<F2>[+<o2>][(<l2>)]=<F1>[+<o1>][(<l1>)]。將字段<F1>從<o1>+1位置開始且長度為<l1>的段內容賦給字段<F2>,覆蓋從<o2>+1位置開始且長度為<l2>的段。在MOVE語句中,所有偏移量和長度指定都可為變量。這同樣適用于采用賦值運算符的語句,只要也可以寫做MOVE語句。在賦值運算符之后未指定字段名稱的語句中,(例如在數學表達式中),所有偏移量和長度指定都必須是無符號數值。詳細信息,參見數值運算(頁386))。SAP建議只在非數值字段之間才采用指定偏移量和長度賦值。對于數值字段,結果毫無意義。DATA:F1(8)VALUE'ABCDEFGH',

F2(20).F2+6(5)=F1+3(5).在該示例中,賦值運算符功能如下:DATA:F1(8)VALUE'ABCDEFGH',

F2(8).DATA:OTYPEIVALUE2,

LTYPEIVALUE4.MOVEF1TOF2.WRITEF2.

MOVEF1+O(L)TOF2.WRITE/F2.

MOVEF1TOF2+O(L).WRITE/F2.CLEARF2.

MOVEF1TOF2+O(L).WRITE/F2.

MOVEF1+O(L)TOF2+O(L).WRITE/F2.該過程輸出如下:ABCDEFGHCDEFCDABCDABCDCDEF首先,未指定偏移量將F1內容賦給F2。然后,再指定偏移量和長度執(zhí)行同樣操作。后面三條MOVE語句覆蓋偏移量為2.的F2內容。請注意,根據源類型字符(頁439)中的規(guī)則,F(xiàn)2的右邊用空格填充。在字段串組件之間復制值用WRITETO賦值用WRITETO給數據對象賦值時,可以用WRITE語句的格式化選項(參見WRITE語句本節(jié)主題描述WRITETO語句的基本形式要將值(文字)或源字段內容寫入目標字段,可以使用WRITETO語句:語法WRITE<F1>TO<F2>[<option>].WRITETO語句將源字段<F1>內容寫入目標字段<F2>。<F1>可以是任何數據對象。<F2>必須是變量,不能是文字或常量。寫入后,<F1>內容保持不變。對于<option>,可以使用WRITE語句的所有格式化選項(UNDER和NO-GAP除外)(參見格式選項)。WRITETO語句總是檢查用戶主記錄中的設置。例如,這些設置指定是將小數點顯示為句號(.),還是逗號(,)。WRITETO語句并不遵循類型轉換(頁14)中所述的轉換規(guī)則。目標字段解釋為類型C字段。系統(tǒng)總是將源字段內容轉換為類型C,它不將結果字符串轉換為目標字段的數據類型,而直接寫入目標字段。因此,不應使用數值數據類型的目標字段。DATA:NUMBERTYPEFVALUE'4.3',

TEXT(10),

FLOATTYPEF,

PACKTYPEPDECIMALS1.WRITENUMBER.WRITENUMBERTOTEXTEXPONENT2.

WRITE/TEXT.WRITENUMBERTOFLOAT.

WRITE/FLOAT.WRITENUMBERTOPACK.

WRITE/PACK.MOVENUMBERTOPACK.

WRITE/PACK.該過程輸出如下:4.30000000000000E+000.043E+021.50454551753894E-15320342<33452;30,34.3第一輸出行以類型F字段的標準輸出格式顯示字段NUMBER內容。第二輸出行顯示字符串,該字符串產生于用格式化選項EXPONENT2將字段NUMBER寫入長度為10的類型C字段中。第三和第四輸出行顯示不適合于使用數值數據類型的目標字段。第五輸出行顯示MOVE語句不同于WRITETO語句在于將類型F字段正確地轉換為類型P(有關該轉換的詳細信息,參見源類型浮點數(頁438))。運行時指定源字段可以使用WRITETO語句在運行時指定源字段。為此,請用括號將包含源字段名的數據對象名括起來,并將其放在源字段位置:語法WRITE(<f>)TO<g>.系統(tǒng)將賦給<f>的數據對象值放到<g>中。然而,如果要在運行時指定目標字段,則必須按使用字段符號中所述,使用字段符號。DATA:NAME(10)VALUE'SOURCE',

SOURCE(10)VALUE'Antony',

TARGET(10)

WRITE(NAME)TOTARGET.

WRITE:TARGET.則輸出Antony字段名和字段內容之間的連接如下圖所示。用指定偏移量寫入值將值重置為默認值可以用CLEAR語句重置任何數據對象值,如下所示:語法CLEAR<f>.該語句將數據對象<f>的內容重置為初始默認值。可以區(qū)分 基本數據類型對于基本數據類型的數據對象的默認值列表,參見預定義的基本數據類型中的表。系統(tǒng)將變量值重置為它們的初始默認值,而不是用DATA語句的VALUE參數所賦的初始值。無法重置常量。 字段串如果將CLEAR語句應用于字段串,則將單個組件的內容重置為它們的初始默認值。 內表關于CLEAR語句如何使用內表的解釋,參見初始化內表。DATANUMBERTYPEIVALUE'10'.WRITENUMBER.CLEARNUMBER.WRITE/NUMBER.輸出為:100CLEAR語句將字段NUMBER的內容從10重置為默認值0。數值運算執(zhí)行算術運算1、基本算數運算2、執(zhí)行字段串的算術運算類似于用MOVE-CORRESPONDING語句在字段串之間復制值(參見在字段串組件之間復制值(頁37)),可以用以下關鍵字,執(zhí)行字段串的算術運算: ADD-CORRESPONDING SUBTRACT-CORRESPONDING MULTIPLY-CORRESPONDING DIVIDE-CORRESPONDING對于所有同名字段串組件,ABAP/4進行相應算術運算。然而,僅當所有相關組件都是數值型數據類型時,該運算才有意義。有關這些關鍵字的詳細信息,參見ABAP/4關鍵字文檔。DATA:BEGINOFRATE,

USATYPEFVALUE'0.6667',

FRGTYPEFVALUE'1.0',

AUTTYPEFVALUE'7.0',

ENDOFRATE.DATA:BEGINOFMONEY,

USATYPEIVALUE100,

FRGTYPEIVALUE200,

AUTTYPEIVALUE300,

ENDOFMONEY.MULTIPLY-CORRESPONDINGMONEYBYRATE.WRITE/MONEY-USA.

WRITE/MONEY-FRG.

WRITE/MONEY-AUT.輸出如下:672002,100在此,用RATE-USA乘以MONEY-USA,以此類推。3、添加字段順序除基本算術運算(頁41)中所述的基本加法之外,ADD語句有幾個變體,用于添加字段順序。例如: 添加字段順序并將結果賦給另一個字段語法ADD<n1>THEN<n2>UNTIL<nz>GIVING<m>.如果<n1>、<n2>、...、<nz>是在內存中相同類型和長度的等距字段序列,則進行求和計算并將結果賦給<m> 添加字段順序并將結果添加到另一個字段的內容中語法ADD<n1>THEN<n2>UNTIL<nz>TO<m>.該語句除了將字段總和添加到<m>的舊內容中之外,與上面語句的工作方式相同。有關其它相似變體的信息,參見有關ADD語句的關鍵字文檔。DATA:BEGINOFSERIES,

N1TYPEIVALUE10,

N2TYPEIVALUE20,

N3TYPEIVALUE30,

N4TYPEIVALUE40,

N5TYPEIVALUE50,

N6TYPEIVALUE60,

ENDOFSERIES.DATASUMTYPEI.ADDSERIES-N1THENSERIES-N2UNTILSERIES-N5GIVINGSUM.

WRITESUM.ADDSERIES-N2THENSERIES-N3UNTILSERIES-N6TOSUM.

WRITE/SUM.輸出如下:150350在此,將N1到N5組件內容求和并將其值賦給字段SUM。然后,將N2到N6組件求和并將其添加到SUM的值中。(二)使用數學函數(三)浮點函數以下內部函數用浮點數據類型(F)作為參數。浮點數據類型的函數函數解釋ACOS、ASIN、ATAN;三角函數。COS、SIN、TANCOSH、SINH、TANH反三角函數。EXP基數為e的求冪函數(e=2.7182818285)。LOG基數為e的自然對數。LOG10基數為10的對數。SQRT平方根。對于所有函數,正常數學約束(例如平方根只適用于正數)適用。否則,會產生運行錯誤。這些函數的參數不必為浮點數。如果選擇其它類型,則被轉化為類型F,如類型轉換(頁14)中所述。DATA:RESULTTYPEF,

PI(10)VALUE'3.141592654'.RESULT=COS(PI).WRITERESULT.輸出為-1.00000000000000E+00。在進行計算之前,自動將字符字段PI轉換為類型F字段。(四)處理壓縮數(五)處理日期和時間字段日期和時間字段數據類型不是數值型。但是,由于進行自動類型轉換,可以采用類似于數值型字段的處理方法,處理日期和時間字段(參見基本數據類型的可轉換性(頁435))在處理日期和時間字段時,使用偏移量指定常常十分有用(參見指定數據對象的偏移量(頁345))。DATA:ULTIMOTYPED.ULTIMO=SY-DATUM.

ULTIMO+6(2)='01'."=firstdayofthismonth

ULTIMO=ULTIMO-1."=lastdayoflastmonth在此,將上月的最后一天賦給日期字段ULTIMO。為此:1. 用當前日期填充ULTIMO。2. 用指定偏移量,將日期更改為當前月的第一天。3. 從ULTIMO減1,將其內容更改為上月的最后一天。在進行減法之前,系統(tǒng)將ULTIMO轉換為從01.01.0001起的天數并將結果轉換為日期。DATA:DIFFTYPEI,

SECONDSTYPEI,

HOURSTYPEI.DATA:T1TYPETVALUE'200000',

T2TYPETVALUE'020000'.DIFF=T2-T1.

SECONDS=DIFFMOD86400.

HOURS=SECONDS/3600.最后三行可由以下行替換H

溫馨提示

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

評論

0/150

提交評論