版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
一數(shù)據(jù)類型和對象在ABAP中,可以使用與標(biāo)準(zhǔn)數(shù)據(jù)聲明相似的語法處理數(shù)據(jù)類型,而與數(shù)據(jù)對象無關(guān)。在程序中必須聲明要使用的全部數(shù)據(jù)對象。聲明過程中,必須給數(shù)據(jù)對象分配屬性,其中最重要的屬性就是數(shù)據(jù)類型。1.1 基本數(shù)據(jù)類型數(shù)據(jù)類默認(rèn)大有效大初始值說明型小小C11-SPACE文本、字符(字母數(shù)65535字字符)D88'00000日期(格式:000'YYYYMMDD)F880浮點(diǎn)數(shù)I440整型(整數(shù))N11-'00...0'數(shù)字文本65535P81-160壓縮號T66'00000時間(格式:0'HHMMSS)X11-X'00'十六進(jìn)制65535對算術(shù)運(yùn)算的非整型結(jié)果(如分?jǐn)?shù))進(jìn)行四舍五入,而不是截?cái)?。類?P數(shù)據(jù)允許在小數(shù)點(diǎn)后有數(shù)字。有效大小可以是從1到16字節(jié)的任何值。將兩個十進(jìn)制數(shù)字壓縮到一個字節(jié),而最后一個字節(jié)包含一個數(shù)字和符號。在小數(shù)點(diǎn)后最多允許14個數(shù)字。1.2 系統(tǒng)定義的數(shù)據(jù)對象SPACE 空白字符串SY-SUBRC 系統(tǒng)執(zhí)行傳回值, 0表示成功SY-UNAME用戶SY-DATUM系統(tǒng)日期SY-UZEIT系統(tǒng)時間SY-TCODE當(dāng)前執(zhí)行程序的TransactioncodeSY-INDEX當(dāng)前LOOP循環(huán)過的次數(shù)SY-TABIX當(dāng)前處理的是InternalTable(內(nèi)部表)的第幾行SY-TMAXLInternalTable(內(nèi)部表)的總行數(shù)SY-SROWS屏幕總行數(shù)SY-SCOLS屏幕總列數(shù)SY-VLINE畫豎線SY-ULINE畫橫線SY-PAGNO當(dāng)前頁號SY-LINSZ當(dāng)前報表寬度SY-LINCT當(dāng)前報表長度SY-LISND列表索引頁SY-LISTI上一個列表的索引SY-LILLI絕對列表中選定的行號SY-CUROW屏幕上的行光標(biāo)列真實(shí)行號選擇行的內(nèi)容,長度為 255當(dāng)前行1.3 確定數(shù)據(jù)對象的屬性如果要查明數(shù)據(jù)對象的數(shù)據(jù)類型,或者要在程序的運(yùn)行期間使用其屬性,可使用DESCRIBE語句。語法如下:DESCRIBEFIELD<f>[LENGTH<l>][TYPE<t>[COMPONENTS<n>]][OUTPUT-LENGTH <o>][DECIMALS<d>][EDITMASK<m>].將由語句的參數(shù)指定的數(shù)據(jù)對象的變量。
<f>的屬性寫入?yún)?shù)后DESCRIBEFIELDS參數(shù)LENGTHTYPEOUTPUT-LENG
語句具有下列參數(shù):用途確定字段長度確定數(shù)據(jù)類型確定輸出長度THDECIMALSEDITMASK
確定小數(shù)位確定轉(zhuǎn)換例程 確定字段長度要確定數(shù)據(jù)對象的長度,利用句使用 LENGTH 參數(shù),如下所示:
DESCRIBE
FIELD
語DESCRIBEFIELD<f>LENGTH<l>.系統(tǒng)讀取字段<f>的長度,并將值寫入字段 確定數(shù)據(jù)類型要確定字段的數(shù)據(jù)類型,利用 DESCRIBE句使用 TYPE 參數(shù),如下所示:
<l>。FIELD
語DESCRIBEFIELD<f>TYPE<t>[COMPONENTS<n>].系統(tǒng)讀取字段<f>的數(shù)據(jù)類型,然后將值寫入字段除返回預(yù)定義數(shù)據(jù)類型 C、D、F、I、N、P、T和該語句還返回3s 對于帶前導(dǎo)符號的兩字節(jié)整型3b 對于無前導(dǎo)符號的一字節(jié)整型3h 對于內(nèi)表3C 對于組件中沒有嵌套結(jié)構(gòu)的結(jié)構(gòu)3C 對于組件中至少有一個嵌套結(jié)構(gòu)的結(jié)構(gòu)
<t>。X外, 確定輸出長度要確定字段的輸出長度,利用 DESCRIBEFIELD句使用 OUTPUT-LENGTH 參數(shù),如下所示:
語DESCRIBEFIELD<f>OUTPUT-LENGTH<o>.系統(tǒng)讀取字段<f>的輸出長度,并將值寫入字段 <o>。 確定小數(shù)位若要確定類型 P 字段的小數(shù)位的個數(shù),利用DESCRIBEFIELD 語句使用 DECIMALS 參數(shù),如下所示:DESCRIBEFIELD<f>DECIMALS<d>.系統(tǒng)讀取字段<f>的小數(shù)個數(shù),并將值寫入字段 <d>。 確定轉(zhuǎn)換例程要確定 ABAP/4 詞典中某字段的轉(zhuǎn)換例程是否存在,如果存在,名稱是什么,利用 DESCRIBEFIELD 語句使用EDITMASK參數(shù),如下所示:DESCRIBEFIELD<f>EDITMASK<m>.如果 ABAP/4 詞典中字段<f>的轉(zhuǎn)換例程存在,則系統(tǒng)將其寫入字段 <m>,然后將系統(tǒng)字段 SY-SUBRC 中的返回代碼設(shè)為 0。可以像下面所顯示的那樣,在 WRITE 語句中將字段<m>直接用作格式模板:WRITE<f>USINGEDITMASK<m>.如果字段
<f>
沒有轉(zhuǎn)換例程,則系統(tǒng)將返回代碼設(shè)為
4。二數(shù)據(jù)輸出到屏幕2.1 在屏幕上定位 Write 輸出通過制定字段名稱前面的格式規(guī)范,可以在屏幕上定位WRITE 語句的輸出:WRITEAT[/][<pos>][(<len>)]<f>.此處4斜線‘/’表示新的一行4<pos>是最長為三位數(shù)字的數(shù)字或變量,表示在屏幕上的位置5<len>是最長為三位數(shù)字的數(shù)字或變量, 表示輸出長度如果格式規(guī)范只包含直接值(即,不是變量),可以忽略關(guān)鍵字AT。2.2 格式化選項(xiàng)對WRITE 語句,可以使用不同的格式化選項(xiàng)。WRITE<f>< 選項(xiàng)>.(1)所有數(shù)據(jù)類型的格式化選項(xiàng):選項(xiàng)用途LEFT-JUSTIFIED輸出左對齊CENTERED輸出居中RIGHT-JUSTIFIED輸出右對齊UNDER<g>輸出直接開始于字段<g>下NO-GAP忽略字段<f>后的空格USINGEDITMASK指定格式模板<m><m>USINGNOEDIT撤消對ABAP/4詞典中指定的MASK格式模板的激活。NO-ZERO如果字段僅包含零,則用空格代替它們對類型C和N字段,將自動代替前導(dǎo)零(2)數(shù)字字段的格式化選項(xiàng):選項(xiàng)用途NO-SIGN不輸出前導(dǎo)符號DECIMALS<d>定義小數(shù)點(diǎn)后的數(shù)字位數(shù)。<d>EXPONENT 在類型 F字段中,在<e>中定義冪數(shù)<e>ROUND<r> 用10**(-r) 乘類型P字段,然后取整CURRENCY
按表格
TCURX
中的貨幣
<c>
格式化。<c>UNIT<u> 按表格 T006 中為類型 P字段所指定的單位<u>固定小數(shù)位數(shù)(3)日期字段的格式化選項(xiàng):選項(xiàng) 用途DD/MM/YY 用戶主記錄中定義的分隔符MM/DD/YY 用戶主記錄中定義的分隔符DD/MM/YYYY 用戶主記錄中定義的分隔符MM/DD/YYYY 用戶主記錄中定義的分隔符DDMMYY 無分隔符MMDDYY 無分隔符YYMMDD 無分隔符2.3輸出符號和圖標(biāo)使用下列語法,可以在屏幕上輸出符號和 R/3 圖標(biāo):WRITE<symbol-name>ASSYMBOL.WRITE<icon-name> ASICON.符號和圖標(biāo)的名稱(<符號名>和<圖標(biāo)名>)是定義系統(tǒng)的常量,這些常量在包含程序<SYMBOL>和<ICON>(尖括號是名稱的一部分)中指定。這些包含程序也包含符號和圖標(biāo)的簡短說明。輸出符號和圖標(biāo)最簡單的方法是使用語句結(jié)構(gòu)。要使符號和圖標(biāo)對程序可用,必須在程序中輸入恰當(dāng)?shù)陌绦蚧蚋桌斫獾陌绦?lt;LIST>。2.4 輸出線和空行1)水平線用下列語法,可以在輸出屏幕上生成水平線:ULINE[AT[/][<pos>][(<len>)]].它等同于WRITE[AT[/][<pos>][(<len>)]]SY-ULINE.AT后的格式規(guī)范,與在屏幕上定位WRITE輸出中為WRITE語句說明的格式規(guī)范完全一樣。如果沒有格式規(guī)范,系統(tǒng)則開始新的一行,并用水平線填充該行。否則,只按指定輸出水平線。生成水平線的另一種方法,是在WRITE語句中鍵入恰當(dāng)數(shù)量的連字符,如下所示:WRITE[AT[/][<pos>][(<len>)]]'...'.2)垂直線用下列語法,可以在輸出屏幕上生成垂直線:WRITE[AT[/][<pos>]]SY-VLINE.或WRITE[AT[/][<pos>]]'|'.3)空行用下列語法,可以在輸出屏幕上生成空行:SKIP[<n>].該語句從當(dāng)前行開始,在輸出屏幕上生成 <n>個空行。如果沒有指定<n>的值,就輸出一個空行。(4)要將輸出定位在屏幕的指定行上,使用:SKIPTOLINE<n>.該語句允許將輸出位置向上或向下移動。2.5 將字段內(nèi)容作為復(fù)選框輸出使用下列語法,可以將字段的第一個字符,作為復(fù)選框輸出到輸出屏幕上:WRITE<f>ASCHECKBOX.如果字段<f>的第一個字符是一個“X”,就顯示復(fù)選框已填充。如果字段<f>的第一個字符是SPACE,就顯示復(fù)選框?yàn)榭?。該語句創(chuàng)建的復(fù)選框,默認(rèn)狀態(tài)是可輸入的。就是說,用戶可以通過單擊鼠標(biāo)來填充它們或使其為空。三賦值在ABAP/4中,可以在聲明語句和操作語句中給數(shù)據(jù)對象賦值。在聲明語句中,將初始值賦給聲明的數(shù)據(jù)對象。為此,可以在 DATA、常量或 STATICS 語句中使用VALUE 參數(shù)。要在操作語句中給數(shù)據(jù)對象賦值,可以使用:8MOVE 語句和 WRITETO 語句,對應(yīng)于賦值運(yùn)算符(=)3.1用
MOVE
賦值 基本賦值操作要將值(文字)或源字段的內(nèi)容賦給目標(biāo)字段,可以使用MOVE語句或賦值運(yùn)算符(=)。MOVE語句的語法如下所示:MOVE<f1>TO<f2>.MOVE語句將源字段<f1>的內(nèi)容傳送給目標(biāo)字段<f2>。<f1>可以是任何數(shù)據(jù)對象。<f2>必須是變量,不能是文字或常量。傳送后,<f1>的內(nèi)容保持不變。賦值運(yùn)算符(=)的語法如下所示:<f2>=<f1>.MOVE 語句和賦值運(yùn)算符功能相同。 用指定偏移量賦值可以在每條ABAP/4語句中為基本數(shù)據(jù)類型指定偏移量和長度。在這種情況下,MOVE語句語法如下:MOVE<f1>[+<o1>][(<l1>)]TO<f2>[+<o2>][(<l2>)].將字段<f1>從<o1>+1位置開始且長度為<l1>的段內(nèi)容賦給字段<f2>,覆蓋從<o2>+1位置開始且長度為<l2>的段。在MOVE語句中,所有偏移量和長度指定都可為變量。在字符串組件之間賦值描述的 MOVE 語句賦值方法適用于基本數(shù)據(jù)對象和結(jié)構(gòu)化數(shù)據(jù)對象。另外,還有一種MOVE語句變體,允許將源字段串組件內(nèi)容復(fù)制到目標(biāo)字段串組件中。語法如下:MOVE-CORRESPONDING
<string1>
TO<string2>.該語句將字段串 <string1>
組件的內(nèi)容賦給有相同名稱的字段串<string2> 組件。對于每對名稱,系統(tǒng)都執(zhí)行
MOVE
語句,如下所示:MOVE
STRING1-<component>
TOSTRING2-<component>.系統(tǒng)分別執(zhí)行所有必要類型轉(zhuǎn)換。該處理不同于包括整個字段串的賦值。在這種情況下,應(yīng)用不兼容的字段串和基本字段所述的轉(zhuǎn)換規(guī)則。3.2 用WRITETO 賦值要將值(文字)或源字段內(nèi)容寫入目標(biāo)字段,可以使用WRITETO 語句:WRITE<f1>TO<f2>[<option>].WRITETO 語句將源字段<f1>內(nèi)容寫入目標(biāo)字段 <f2>。<f1>可以是任何數(shù)據(jù)對象,<f2>必須是變量,不能是文字或常量。寫入后,<f1>內(nèi)容保持不變。對于<option>選項(xiàng)(UNDER 和
,可以使用NO-GAP
WRITE除外)。
語句的所有格式化WRITETO 語句總是檢查用戶主記錄中的設(shè)置。例如,這些設(shè)置指定是將小數(shù)點(diǎn)顯示為句號( .),還是逗號(,)。WRITETO語句并不遵循類型轉(zhuǎn)換中所述的轉(zhuǎn)換規(guī)則。目標(biāo)字段解釋為類型C字段。系統(tǒng)總是將源字段內(nèi)容轉(zhuǎn)換為類型C,它不將結(jié)果字符串轉(zhuǎn)換為目標(biāo)字段的數(shù)據(jù)類型,而直接寫入目標(biāo)字段。因此,不應(yīng)使用數(shù)值數(shù)據(jù)類型的目標(biāo)字段。 運(yùn)行時指定源字段可以使用WRITETO語句在運(yùn)行時指定源段。為此,需用括號將包含源字段名的數(shù)據(jù)對象名括起來,并將其放在源字段位置:WRITE(<f>)TO<g>.系統(tǒng)將賦給<f>的數(shù)據(jù)對象值放到 <g>中。然而,如果要在運(yùn)行時指定目標(biāo)字段,則必須按使用字段符號中所述,使用字段符號。 用指定偏移量寫入值可以指定每條 ABAP/4 語句中基本數(shù)據(jù)對象的偏移量和長度。WRITETO 語句語法如下:WRITE<f1>[+<o1>][(<l1>)]TO<f2>[+<o2>][(<l2>)].將字段<f1>中從<o1>+1 位置開始且長度為 <l1>的內(nèi)容賦給字段<f2>,覆蓋從<o2>+1位置開始且長度為<l2>的段。在WRITETO語句中,目標(biāo)字段的偏移量和長度指定可為變量。四數(shù)值運(yùn)算要處理數(shù)值數(shù)據(jù)對象并將結(jié)果值賦給數(shù)據(jù)對象,可以用COMPUTE語句或賦值運(yùn)算符(=)。COMPUTE語句語法如下所示:COMPUTE<n>=<expression>.關(guān)鍵字 COMPUTE 可選。4.1 基本算術(shù)運(yùn)算ABAP/4 支持四種基本算術(shù)運(yùn)算, 同時還支持乘方計(jì)算。可以用數(shù)學(xué)表達(dá)式指定以下算術(shù)運(yùn)算符:+ 加法- 減法* 乘法/ 除法DIV 整除MOD 求余** 求冪可以用關(guān)鍵字
ADD
、SUBTRACT
、
MULTIPLY
和DIVIDE 進(jìn)行基本算術(shù)運(yùn)算,而不使用數(shù)學(xué)表達(dá)式中的運(yùn)算符。4.2 字符串的算術(shù)運(yùn)算類似于用 MOVE-CORRESPONDING 語句在字段串之間復(fù)制值,可以用以下關(guān)鍵字,執(zhí)行字段串的算術(shù)運(yùn)算:11 ADD-CORRESPONDINGSUBTRACT-CORRESPONDINGMULTIPLY-CORRESPONDING11 DIVIDE-CORRESPONDING對于所有同名字段串組件,ABAP/4進(jìn)行相應(yīng)算術(shù)運(yùn)算。然而,僅當(dāng)所有相關(guān)組件都是數(shù)值型數(shù)據(jù)類型時,該運(yùn)算才有意義。 添加字段順序除基本算術(shù)運(yùn)算中所述的基本加法之外,ADD語句有幾個變體,用于添加字段順序。例如,添加字段順序并將結(jié)果賦給另一個字段:ADD<n1>THEN<n2>UNTIL<nz>GIVING<m>.如果<n1>、<n2>、... 、<nz>是在內(nèi)存中相同類型和長度的等距字段序列,則進(jìn)行求和計(jì)算并將結(jié)果賦給<m>添加字段順序并將結(jié)果添加到另一個字段內(nèi)容中:ADD<n1>THEN<n2>UNTIL<nz>TO<m>.該語句除了將字段總和添加到 <m>的舊內(nèi)容中之外,上面語句的工作方式相同。4.3 數(shù)學(xué)函數(shù)以下內(nèi)部函數(shù)使用所有三種數(shù)值數(shù)據(jù)類型 (F、I和作為參數(shù)。函數(shù) 結(jié)果
與P)ABS
參數(shù)的絕對值SIGN
參數(shù)符號:
1
X>0SIGN(X)=
0
if
X=0-1
X<0CEILFLOORTRUNCFRAC
不小于參數(shù)的最小整數(shù)值不大于參數(shù)的最大整數(shù)值參數(shù)的整數(shù)部分參數(shù)的分?jǐn)?shù)部分4.4 浮點(diǎn)函數(shù)以下內(nèi)部函數(shù)用浮點(diǎn)數(shù)據(jù)類型(函數(shù)ACOS、ASIN、
F)作為參數(shù)。解釋三角函數(shù)ATAN;COS、SIN、TANCOSH、SINH、TANHEXPLOGLOG10SQRT
反三角函數(shù)基數(shù)為 e的求冪函數(shù)(e=2.7182818285 )基數(shù)為 e的自然對數(shù)基數(shù)為 10 的對數(shù)平方根對于所有函數(shù),正常數(shù)學(xué)約束適用。否則,會產(chǎn)生運(yùn)行錯誤。五字符串5.1 移動字符串 按給定位置數(shù)移動字符串要按給定位置數(shù)移動字段內(nèi)容,使用法如下:
SHIFT
語句,用SHIFT<c>[BY<n>PLACES][<mode>].該語句將字段<c>移動<n>個位置。如果省略BY<n>PLACES,則將<n>解釋為一個位置。如果<n>是0或負(fù)值,則<c>保持不變。如果<n>超過<c>長度,則<c>用空格填充。<n>可為變量。對不同(<mode>)選項(xiàng),可以按以下方式移動字段 <c>:LEFT: 向左移動<n>位置,右邊用<n>個空格填充(默認(rèn)設(shè)置)。RIGHT:向右移動<n>位置,左邊用<n>個空格填充。CIRCULAR:向左移動<n>位置,以便左邊<n>個字符出現(xiàn)在右邊。 移動字符串到給定串位置要移動字段內(nèi)容以到給定串位置,則使用SHIFT語句,用法如下:SHIFT<c>UPTO<str><mode>.ABAP/4 查找<c>字段內(nèi)容直到找到字符串 <str>并將字段<c>移動到字段邊緣。 <mode>選項(xiàng)與按給定位置數(shù)移動字符串中所述相同。 <str>可為變量。如果<c>中找不到<str>,則將 SY-SUBRC并且不移動<c>。否則,將 SY-SUBRC 設(shè)置為
設(shè)置為0。
4 根據(jù)第一個或最后一個字符移動字符串假設(shè)第一個或最后一個字符符合一定條件,則可用SHIFT 語句將字段向左或向右移動。為此,請使用以下語法:SHIFT<c>LEFT
DELETINGLEADING
<str>.SHIFT<c>RIGHTDELETINGTRAILING<str>.假設(shè)左邊的第一個字符或右邊的最后一個字符出現(xiàn)在<str>中,該語句將字段<c>向左或向右移動。 字段右邊或左邊用空格填充, <str>可為變量。5.2 替換字段內(nèi)容要用其它字符串替換字段串的某些部分,使用REPLACE語句。REPLACE<str1>WITH<str2>INTO<c>[LENGTH<l>].ABAP/4 搜索字段<c>中模式<str1>前<l>個位置第一次出現(xiàn)的地方。如果未指定長度,按全長度搜索模式 <str1>。然后,語句將模式<str1>在字段<c>中第一次出現(xiàn)的位置用字符串<str2>替換。如果指定長度 <l>,則只替換模式的相關(guān)部分。如果將系統(tǒng)字段SY-SUBRC的返回代碼設(shè)置為0,則說明在<c>中找到<str1>且已用<str2>替換。非0的返回代碼值意味著未替換。<str1>、<str2>和<len>可為變量。5.3 大小寫轉(zhuǎn)換并替換字符串可以將字母轉(zhuǎn)換大/小寫或使用替換規(guī)則。要轉(zhuǎn)換大/小寫,使用TRANSLATE語句,用法如下:TRANSLATE<c>TOUPPERCASE.TRANSLATE<c>TOLOWERCASE.這些語句將字段 <c>中的所有小寫字母轉(zhuǎn)換成大寫或反之。使用替換規(guī)則時,使用以下語法:TRANSLATE<c>USING<r>.該語句根據(jù)字段 <r>中存儲的替換規(guī)則替換字段 <c>所有字符。<r>包含成對字母,其中每對的第一個字母用第二個字母替換。 <r>可為變量。5.4 轉(zhuǎn)換為可排序格式可以將字符字段轉(zhuǎn)換為可按字母順序排列的格式:
的CONVERT
TEXT
<c>
INTO
SORTABLE
CODE<sc>.<c><c>
該語句為字符字段 <c>填充可排序目標(biāo)字段必須是類型 C且字段<sc>必須是類型 X長度的16倍。
<sc>。字段,最小長度為該語句目的是為字符字段<c>創(chuàng)建相關(guān)字段<sc>,作為<c>的按字母順序排列的排序關(guān)鍵字。在內(nèi)表的內(nèi)容和已解壓縮的數(shù)據(jù)中進(jìn)行排序。如果對未轉(zhuǎn)換的字符字段進(jìn)行排序,則系統(tǒng)創(chuàng)建與各字母的特定平臺內(nèi)部編碼相對應(yīng)的順序。在對目標(biāo)字段進(jìn)行排序之后,轉(zhuǎn)換 CONVERTTEXT 按這樣的方式創(chuàng)建目標(biāo)字段,相應(yīng)的字符字段順序按字母排序。例如,在德語中,順序?yàn)椤甅iller、Moller、Mller、Muller ’,而不是‘Miller、Moller、Muller 、Mller’。轉(zhuǎn)換方法依賴于運(yùn)行ABAP/4程序的文本環(huán)境。文本環(huán)境在用戶主記錄中定義。例外的是可以使用如下語句,在程序中設(shè)置文本環(huán)境:SETLOCALELANGUAGE<lg>[COUNTRY<cy>][MODIFIER<m>].該語句根據(jù)語言<lg>設(shè)置文本環(huán)境。對于選項(xiàng)COUNTRY,只要特定國家語言不同,就可以在語言以外指定國家。對于選項(xiàng)MODIFIER,只要一個國家內(nèi)語言不同,就可以指定另一個標(biāo)識符,例如,排序順序在電話簿和詞典之間不同。字段<lg>、<cy>和<m>必須是類型 C且長度必須與表TCP0C 的關(guān)鍵字段長度相等。表 TCP0C 是一個表格,從中進(jìn)行平臺相關(guān)的文本環(huán)境維護(hù)。 在語句 SETLOCALE 期間,系統(tǒng)根據(jù) TCP0C中的條目設(shè)置文本環(huán)境。除了內(nèi)部傳送的平臺特性之外,用 SET 語句指定表關(guān)鍵字。如果 <lg>等于 SPACE ,則系統(tǒng)根據(jù)用戶主記錄設(shè)置文本環(huán)境。 如果對于指定的關(guān)鍵字在表中無條目,則系統(tǒng)將產(chǎn)生運(yùn)行錯誤。文本環(huán)境影響 ABAP/4 中依賴于字符集的所有操作。5.5 覆蓋字符字段要用另一字符字段覆蓋字符字段,使用 OVERLAY 語句,用法如下:OVERLAY<c1>WITH<c2>[ONLY<str>].該語句用<c2>的內(nèi)容覆蓋字段 <c1>中包含<str>中字母的所有位置。 <c2>保持不變。如果省略 ONLY <str>,則覆蓋字段<c1>中所有包含空格的位置。如果至少要替換 <c1>中的一個字符,則將 SY-SUBRC設(shè)置為 0。對于所有其它情況,將 SY-SUBRC 設(shè)置為 4。如果<c1>比<c2>長,則只覆蓋<c2>中的長度。5.6 搜索字符串要搜索特定模式的字符串,請使用SEARCH語句,用法如下:SEARCH<c>FOR<str><options>.該語句在字段<c>中搜索<str>中的字符串。如果成功,則將 SY-SUBRC 的返回代碼值設(shè)置為 0并將 SY-FDPOS設(shè)置為字段<c>中該字符串的偏移量。否則將SY-SUBRC設(shè)置為4。搜索串<str>可為下列格式之一:<str> 目的<pattern> 搜索<pattern> (任何字符順序)。忽略尾部空格.<pattern>. 搜索<pattern> ,但是不忽略尾部空格*<pattern> 搜索以<pattern> 結(jié)尾的詞<pattern>* 搜索以<pattern> 開始的詞單詞之間用空格、逗號、句號、分號、冒號、問號、嘆號、括號、斜杠、加號和等號等分隔。搜索字符字段<c>的各種選項(xiàng)(<options> )如下1)ABBREVIATED在字段<c>中搜索包含<str>中指定字符串的單詞,其中字符可能被其它字符隔開。單詞和字符串的第一個字母必須相同。2)STARTINGAT<n1>在字段<c>中搜索從<n1>開始的<str>。結(jié)果SY-FDPOS參照相對于<n1>的偏移量而不是字段的開始。3)ENDINGAT<n2>在字段<c>搜索<str>直到位置<n2>。4)ANDMARK如果找到搜索串,則將搜索串中的所有字符(和使用ABBREVIATED時的所有字符)轉(zhuǎn)換為大寫形式。5.7 獲得字符串長度要決定字符串到最后一個字符而不是SPACE的長度,使用內(nèi)部函數(shù)STRLEN,用法如下:[COMPUTE]<n>=STRLEN(<c>).STRLEN 將操作數(shù)<c>作為字符數(shù)據(jù)類型處理, 而不考慮其實(shí)際類型。不進(jìn)行轉(zhuǎn)換。關(guān)鍵字 COMPUTE 可選。5.8 壓縮字符串去空格要刪除字符字段中多余空格,使用CONDENSE語句,用法如下:CONDENSE<c>[NO-GAPS].該語句去除字段<c>中的前導(dǎo)空格并用一個空格替換其它空格序列。結(jié)果是左對齊單詞,每個單詞用空格隔開。如果指定附加的NO-GAPS,則去除所有空格。5.9 連接字符串要將單個字符串連接成一體,使用語句,用法如下:
CONCATENATECONCATENATE
<c1>
...
<cn>
INTO
<c>[SEPARATEDBY<s>].該語句連接字符串 <c1>與<cn>并將結(jié)果賦給<c>。該操作忽略尾部空格。附加 SEPARATED BY<s>允許指定字符字段 <s>,它放置在單個字段間已定義的長度中。如果結(jié)果符合<c>,則將 SY-SUBRC 設(shè)置為0。然而,如果結(jié)果必須被截?cái)啵瑒t將 SY-SUBRC 設(shè)置為4。5.10 拆分字符串要將字符串拆分成兩個或更多小串, 使用 SPLIT 語句,用法如下:SPLIT<c>AT<del>INTO<c1>...<cn>.該語句在字符字段<c>搜索分界字符串<del>,并將分界符之前和之后的部分放到目標(biāo)字段<c1>...<cn>中。要將所有部分放到不同目標(biāo)字段中,必須指定足夠目標(biāo)字段。否則,用字段<c>的剩余部分填充最后目標(biāo)字段并包含分界符。如果所有目標(biāo)字段足夠長且不必截?cái)嗳魏尾糠?,則將SY-SUBRC設(shè)置為0。否則,將其設(shè)置為4。5.11 分配字符串部分MOVE 語句的以下變體只使用類型 C字段:MOVE<c1>TO<c2>PERCENTAGE<p>[RIGHT].將左對齊的字符字段 <c1>的百分比 <p>(或如果用RIGHT 選項(xiàng)指定,則為右對齊)復(fù)制到 <c2>。<p>值可為 0和100 之間的任何數(shù)。將要從<f1>復(fù)制的長度取整為下一個整數(shù)。如果語句中某一參數(shù)不是類型 C,則忽略參數(shù)PERCENTAGE 。六邏輯流控制6.1 比較運(yùn)算符要比較所有的字段類型,可以在邏輯表達(dá)式中使用下列運(yùn)算符:<運(yùn)算符>含義EQ等于=等于NE不等于<>不等于><不等于LT小于<小于LE小于等于<=小于等于GT大于>大于GE大于等于>=大于等于操作數(shù)可以是數(shù)據(jù)庫字段、內(nèi)部字段、文字或常數(shù)。除基本字段外,還可以將結(jié)構(gòu)數(shù)據(jù)類型和上表中的運(yùn)算符結(jié)合起來作為操作數(shù)。字段串逐個組件進(jìn)行比較,嵌套的結(jié)構(gòu)分為基本的字段。如果有意義,可以對不同數(shù)據(jù)類型的字段進(jìn)行比較。如果字段可轉(zhuǎn)換,就可以進(jìn)行比較。在比較之前,系統(tǒng)將按照下列層次規(guī)則執(zhí)行自動類型轉(zhuǎn)換:1)如果操作數(shù)之一是浮點(diǎn)數(shù)(類型F),則系統(tǒng)將其它操作數(shù)轉(zhuǎn)換為類型F。2)如果操作數(shù)之一是壓縮字段(類型P),則系統(tǒng)將其它操作數(shù)轉(zhuǎn)換為類型P。3)如果操作數(shù)之一是日期字段(類型D)或時間字段(類型 T),則系統(tǒng)將其它操作數(shù)轉(zhuǎn)換為類型 D或T。不支持日期和時間字段之間的比較,這會導(dǎo)致程序中斷。4)如果操作數(shù)之一是字符字段(類型C)且其它操作數(shù)是十六進(jìn)制字段(類型X),則系統(tǒng)將類型X的操作數(shù)轉(zhuǎn)換為類型C。5)如果操作數(shù)之一是字符字段(類型C),其它操作數(shù)為數(shù)字字段(類型N),則系統(tǒng)將這兩種操作數(shù)都轉(zhuǎn)換為類型P。6.2 比較字符串和數(shù)字串要比較字符串(類型C)和數(shù)字文本(類型N),可以在邏輯表達(dá)式中使用下列運(yùn)算符。<運(yùn)算符>含義CO僅包含CN不僅包含CA包含任何NA不包含任何CS包含字符串NS不包含字符串CP 包含模式NP 不包含模式因?yàn)槌愋蚇和C外,系統(tǒng)不能執(zhí)行任何其它類型轉(zhuǎn)換,所以,在進(jìn)行包含這些運(yùn)算之一的比較時,操作數(shù)應(yīng)該是類型N或C。運(yùn)算符的功能如下:1)CO(僅包含)如果<f1>僅包含<f2>中的字符,則邏輯表達(dá)式<f1>CO<f2>為真。該比較區(qū)分大小寫,并包括尾部空格。如果比較結(jié)果為真,則系統(tǒng)字段SY-FDPOS包括<f1>的長度。如果為假,則SY-FDPOS包含<f1>中第一個未在<f2>內(nèi)出現(xiàn)的字符的偏移量。2)CN(不僅包含)如果<f1>還包含<f2>之外的其他字符,則邏輯表達(dá)式<f1>CN<f2> 為真。該比較區(qū)分大小寫,并包括尾部空格。如果比較結(jié)果為真,則系統(tǒng)字段SY-FDPOS包含<f1>中第一個未同時在<f2>中出現(xiàn)的字符的偏移量。如果為假,SY-FDPOS包含<f1>的長度。3)CA(包含任何)如果<f1>至少包含<f2>的一個字符,則邏輯表達(dá)式<f1>為真。該比較區(qū)分大小寫。如果比較結(jié)果為真,則系統(tǒng)字段 SY-FDPOS 包含<f1>中第一個也在 <f2>中出現(xiàn)的字符的偏移量。如果為假,SY-FDPOS 包含<f1>的長度。(4)NA(不包含任何)如果<f1>不包含<f2>的任何字符,則邏輯表達(dá)式 <f1>NA<f2>為真。該比較區(qū)分大小寫。如果比較結(jié)果為真,則系統(tǒng)字段SY-FDPOS包含<f1>的長度。如果為假,則SY-FDPOS包含<f1>中在<f2>內(nèi)出現(xiàn)的第一個字符的偏移量。(5)CS(包含字符串)如果<f1>包含字符串<f2>,則邏輯表達(dá)式 <f1>CS<f2>為真。忽略尾部空格并且比較不區(qū)分大小寫。如果比較結(jié)果為真,則系統(tǒng)字段 SY-FDPOS 包含<f2>在<f1>中的偏移量。如果為假, SY-FDPOS 包含<f1>的長度。(6)NS(不包含字符串)如果<f1>不包含字符串<f2>,則邏輯表達(dá)式<f1>NS<f2>為真。忽略尾部空格且比較不區(qū)分大小寫。如果比較為真,系統(tǒng)字段SY-FDPOS包含<f1>的長度。如果為假,系統(tǒng)字段SY-FDPOS包含<f2>在<f1>中的偏移量。7)CP(包含模式)如果<f1>包含模式<f2>,則邏輯表達(dá)式<f1>CP<f2>為真。如果<f2>屬于類型C,則可以在<f2>中使用下列通配符:*用于任何字符串+用于任何單個字符忽略尾部空格且比較不區(qū)分大小寫。如果比較結(jié)果為真,系統(tǒng)字段 SY-FDPOS 包含<f2>在<f1>中的偏移量。如果為假,SY-FDPOS 包含<f1>的長度。如果要對<f2>中的特殊字符進(jìn)行比較,請將換碼符 #放到其前面??梢允褂脫Q碼字符 #指定:21 大小寫字符通配符"*"(輸入#*)通配符"+"(輸入#+)換碼符號本身(輸入##)字符串結(jié)尾的空格(輸入#___)(8)NP(不包含模式)如果<f1>不包含模式<f2>,則邏輯表達(dá)式<f1>NP<f2>為真。在<f2>中,可以使用與 CP相同的通配符和換碼字符。忽略尾部空格且比較不區(qū)分大小寫。 如果比較結(jié)果為真,則系統(tǒng)字段 SY-FDPOS 包含<f1>的長度,如果為假,SY-FDPOS 包含<f2>在<f1>中的偏移量。6.3 比較二進(jìn)制位結(jié)構(gòu)要將邏輯表達(dá)式初始操作數(shù)第一字節(jié)的二進(jìn)制位結(jié)構(gòu)與第二操作數(shù)的進(jìn)行比較,請使用下列操作符。<運(yùn)算符>含義O二進(jìn)制位是1Z二進(jìn)制位是0M混合二進(jìn)制位第二操作數(shù)的長度應(yīng)為一個字節(jié)。沒有必要對第二操作數(shù)使用長度為1的十六進(jìn)制字段(類型X),但卻較方便,因?yàn)槠溟L度為一個字節(jié)且數(shù)字值直接與二進(jìn)制位結(jié)構(gòu)相關(guān)。操作符功能如下:O(二進(jìn)制位是1)如果<hex>中二進(jìn)制位是1的位置,在<f>中是1,則邏輯表達(dá)式<f>O<hex>為真。Z(二進(jìn)制位是0)如果<hex>中二進(jìn)制位是1的位置,在<f>中是0,則邏輯表達(dá)式<f>Z<hex>為真。M(混合二進(jìn)制位)如果從<hex>中二進(jìn)制位是1的位置起,<f>中至少一個是1,一個是0,則邏輯表達(dá)式<f>M<hex>為真。6.4編程分支和循環(huán)6.4.1IF條件分支IF語句允許依據(jù)條件將程序流轉(zhuǎn)到特定的語句塊中。該語句塊包括IF語句及其后面的ELSEIF、ELSE或ENDIF之間的所有命令。IF<condition1>.<statementblock>ELSEIF<condition2>.<statementblock>ELSEIF<condition3>.<statementblock>ELSE.<statementblock>ENDIF.如果第一個條件是真,系統(tǒng)將執(zhí)行所有語句直到第一個語句塊結(jié)束,然后繼續(xù)處理 ENDIF 語句之后的程序。 要采用選擇性條件,可以使用 ELSEIF 語句。如果第一個條件是假,系統(tǒng)使用與 IF 語句一樣的方式處理后面的 ELSEIF語句。如果 IF或ELSEIF 條件都為假,則執(zhí)行 ELSE 開始的語句塊。最后的語句塊必須用 ENDIF 結(jié)束。要用公式表達(dá) IF 和ELSEIF 語句中的條件,可以使用任何編程邏輯表達(dá)式描述的邏輯表達(dá)式。 條件分支要根據(jù)特殊數(shù)據(jù)字段的內(nèi)容執(zhí)行不同的語句塊,可以如下使用 CASE 語句:CASE<f>.WHEN<f1>.<statementblock>WHEN<f2>.<statementblock>WHEN<f3>.<statementblock>WHENWHENOTHERS.<statementblock>ENDCASE.系統(tǒng)執(zhí)行 WHEN 語句之后的語句塊,如果 <f>內(nèi)容等于<fi>的內(nèi)容,且繼續(xù)處理 ENDCASE 語句后面的語句。如果<f>的內(nèi)容不等于 <fi>的內(nèi)容,則執(zhí)行選項(xiàng) WHENOTHERS 后面的語句塊。最后的語句塊必須用 ENDCASE結(jié)束。
無條件循環(huán)如果想要多次執(zhí)行語句塊,則可以如下使用
DO
語句編程循環(huán):DO[<n>TIMES][VARYING<f>FROM<f1>NEXT<f2>].<statementblock>ENDDO.在發(fā)現(xiàn)EXIT、STOP或REJECT語句之前,系統(tǒng)繼續(xù)執(zhí)行由DO引導(dǎo)、ENDDO結(jié)束的語句塊。可以使用TIMES選項(xiàng)限制循環(huán)次數(shù)。<n>可以是文字或變量。如果<n>是0或負(fù)數(shù),系統(tǒng)不執(zhí)行該循環(huán)。系統(tǒng)字段 SY-INDEX 中包含已處理過的循環(huán)次數(shù)。 條件循環(huán)如果只要條件為真,就不止一次執(zhí)行語句,可以如下使用WHILE語句編程:WHILE<condition>[VARY<f>FROM<f1>NEXT<f2>].<statementblock>ENDWHILE.只要<condition> 是真,或系統(tǒng)發(fā)現(xiàn) EXIT、STOP 或REJECT語句,系統(tǒng)將繼續(xù)執(zhí)行由WHILE語句引導(dǎo)、ENDWHILE結(jié)束的語句塊。對于<condition>,可以使用編程邏輯表達(dá)式中描述的任何邏輯表達(dá)式。系統(tǒng)字段 SY-INDEX 中包含已執(zhí)行的循環(huán)次數(shù)??梢匀我馇短譝HILE循環(huán),也可與其他循環(huán)結(jié)合使用。WHILE語句的VARY選項(xiàng)與DO循環(huán)的VARYING選項(xiàng)工作方式一樣。允許每次執(zhí)行循環(huán)時為變量<f>重新賦值。<f1>、<f2>、<f3>、... 必需是內(nèi)存中類型相同和長度相等的一系列等距字段。第一次循環(huán)時,將 <f1>分配給<f>,第二次循環(huán)時,將 <f2>可以在一個 WHILE 語句中使用多個6.5 終止循環(huán)
分配給<f>,以此類推。VARY 選項(xiàng)。要終止循環(huán)過程,請使用下列關(guān)鍵字之一。關(guān)鍵字 用途無條件終止循環(huán)過程CONTINUECHECKEXIT在循環(huán)中只能使用關(guān)鍵字 CHECK 和
有條件終止循環(huán)過程完全終止循環(huán)CONTINUE ,但在循環(huán)外還可使用EXIT,分別完成不同的功能。 無條件終止要立即無條件終止循環(huán),請如下使用
CONTINUE
語句:CONTINUE.在CONTINUE語句之后,系統(tǒng)跳過當(dāng)前語句塊中所有剩余語句塊,繼續(xù)該語句后面的循環(huán)。 有條件終止要有條件終止循環(huán)過程,請如下使用 CHECK 語句:CHECK<condition>.如果條件是假,系統(tǒng)跳過當(dāng)前語句塊中所有剩余語句塊,繼續(xù)后面的循環(huán)過程。對于<condition>,可使用編程邏輯表達(dá)式中描述的任何邏輯表達(dá)式。 完全終止要無條件完全終止循環(huán),請如下使用 EXIT 語句:EXIT.EXIT 語句之后,系統(tǒng)立即退出循環(huán),繼續(xù)結(jié)束語句(ENDDO、ENDWHILE 、 ENDSELECT) 后面的處理。在嵌套循環(huán)中,系統(tǒng)僅退出當(dāng)前循環(huán)。七內(nèi)表7.1 創(chuàng)建內(nèi)表TYPES:BEGINOF<f>OCCURS<n>,<componentdeclaration>,ENDOF<f>.DATA:<itab>TYPESTANDARDOF<f>,<wa>TYPE<f>.其作用與先創(chuàng)建字段串<f>,然后再創(chuàng)建與該字段串行結(jié)構(gòu)相同的內(nèi)表<f>相同。<n>指定行的初始號。將第一行寫入用類型<t>創(chuàng)建的內(nèi)表數(shù)據(jù)對象之后,就為指定行保留內(nèi)存。如果添加到內(nèi)表中的行比<n>指定的要多,則自動擴(kuò)展保留的內(nèi)存。如果內(nèi)存中沒有足夠空間可用于內(nèi)表,則將其寫入緩沖區(qū)或磁盤(分頁區(qū)域)。7.2 填充內(nèi)表要填充內(nèi)表,既可逐行添加數(shù)據(jù),也可復(fù)制另一個表格的內(nèi)容。要逐行填充內(nèi)表,可以使用 APPEND、COLLECT或INSERT語句。要將內(nèi)表僅用于存儲數(shù)據(jù),出于性能方面的考慮,建議使用 APPEND。用 APPEND 也可以創(chuàng)建序列清單。 無關(guān)鍵字附加行要將行附加到內(nèi)表中, 使用 APPEND 語句,用法如下:APPEND[<wa>TO|INITIALLINETO]<itab>.該語句將新行附加到內(nèi)表 <itab>中。通過使用<wa>TO 選項(xiàng),指定要附加的源區(qū)域 <wa>。對于帶表頭行的表格, 可以忽略 TO 選項(xiàng)。這樣,表格工作區(qū)域就成了源區(qū)域??梢允褂?INITIALLINETO 選項(xiàng)替代<wa>TO,將用其類型的正確值初始化的行添加到表格中。APPEND 不考慮是否存在標(biāo)準(zhǔn)關(guān)鍵字相同的行。 這樣,可能會出現(xiàn)相同條目。系統(tǒng)字段 SY-TABIX 在每個APPEND
語句之后包含附加行的索引。 根據(jù)標(biāo)準(zhǔn)關(guān)鍵字附加行要用有唯一標(biāo)準(zhǔn)關(guān)鍵字的行填充內(nèi)表,
使用
COLLECT語句,用法如下:COLLECT[<wa>INTO]<itab>.該語句通過使用 INTO 選項(xiàng)指定想附加的源區(qū)域<wa>。如果表格有表頭行,則可以忽略 INTO 選項(xiàng)。這樣,表格工作區(qū)域就成了源區(qū)域。系統(tǒng)檢查表格條目的標(biāo)準(zhǔn)關(guān)鍵字是否相同。如果沒有,COLLECT語句的作用與APPEND語句相似,并將新行添至表格中。如果存在關(guān)鍵字相同的條目,COLLECT語句不附加新行,但將工作區(qū)域中數(shù)字字段的內(nèi)容添加到現(xiàn)有條目中數(shù)字字段的內(nèi)容中。系統(tǒng)字段SY-TABIX包含處理過的行的索引。為COLLECT指定的工作區(qū)域必須與內(nèi)表的行類型兼容,不僅僅是可轉(zhuǎn)換為內(nèi)表的行類型。COLLECT語句無法用于帶深層結(jié)構(gòu)的內(nèi)表,例如,將內(nèi)表作為組件的行。如果僅使用COLLECT語句填充內(nèi)表,則不會出現(xiàn)重復(fù)條目。因此要填充沒有重復(fù)條目的內(nèi)表,應(yīng)該使用COLLECT 而不是 APPEND 或INSERT。 插入行要在內(nèi)表行之前插入新行,使用
INSERT
語句,用法如下:INSERT
[<wa>
INTO|INITIAL
LINE
INTO]
<itab>[INDEX<idx>].該語句通過使用 INTO 選項(xiàng)指定想插入的源區(qū)域<wa>。如果表格有表頭行,則可以忽略 INTO 選項(xiàng)。這樣,表格工作區(qū)域就成了源區(qū)域。可以使用 INITIALLINETO
選項(xiàng)替代
<wa>TO
,將用其類型的正確值初始化的行添至表格中。如果使用INDEX選項(xiàng),則將新行插入到有索引<idx>的行之前。插入之后,新條目索引為<idx>,下行索引加1。如果表格包含<idx>-1 條目,系統(tǒng)將新條目附加到最后的現(xiàn)有表格行之后。如果表格的條目小于<idx>-1,系統(tǒng)無法插入條目并將SY-SUBRC設(shè)置為4。如果操作成功,將SY-SUBRC設(shè)置為0。如果使用不帶 INDEX 選項(xiàng)的 INSERT 語句,系統(tǒng)只能在LOOP-ENDLOOP循環(huán)內(nèi)通過在當(dāng)前行(例如帶SY-TABIX返回索引的行)前插入新條目來處理它。 附加內(nèi)表行要將部分或全部內(nèi)表附加到另一個內(nèi)表中,使用APPEND 語句,用法如下:APPENDLINESOF<itab1>[FROM<n1>][TO<n2>]TO<itab2>.如果沒有FROMITAB1附加到ITAB2索引<n1>或<n2>指定行。
和TO選項(xiàng),該語句將整個表格中。如果使用這些選項(xiàng),則可通過ITAB1 中要附加的第一或最后一用該方式將表格行附加到另一個表格中的速度比在循環(huán)中逐行進(jìn)行附加快 3到4倍。在APPEND 語句之后,系統(tǒng)字段 SY-TABIX 包含附加的最后一行的索引。 插入內(nèi)表行要將部分或全部內(nèi)表插入到另一個內(nèi)表中,使用INSERT 語句,用法如下:INSERTLINESOF<itab1>[FROM<n1>][TO<n2>]如果沒有FROMITAB1附加到ITAB2索引<n1>或<n2>指定行。
INTO<itab2>[INDEX<idx>].和TO選項(xiàng),該語句將整個表格中。如果使用這些選項(xiàng),則可通過ITAB1 中要附加的第一或最后一如果使用INDEX選項(xiàng),將<itab1>的行插入到<itab2>中索引為<idx>的行之前。如果不使用INDEX選項(xiàng),系統(tǒng)只能在LOOP-ENDLOOP塊中通過在當(dāng)前行(例如,其索引在SY-TABIX中返回的行)之前插入新條目來處理它。 復(fù)制內(nèi)表如果想一次將內(nèi)表的全部內(nèi)容復(fù)制到另一內(nèi)表中,請使用MOVE語句或賦值操作符(=),用法如下:MOVE<itab1>TO<itab2>.該語句等價于:<itab2>=<itab1>.也可進(jìn)行多重賦值,例如,<itab4>=<itab3>=<itab2>=<itab1>.也是可能的。ABAP/4從右到左進(jìn)行處理:<itab2>=<itab1>.<itab3>=<itab2>.<itab4>=<itab3>.這些語句執(zhí)行完整操作。復(fù)制整個表格內(nèi)容,包括作為表格組件的任何其它內(nèi)表的數(shù)據(jù)。覆蓋目標(biāo)表格原來的內(nèi)容。對于有表頭行的表格,表格工作區(qū)域和表格本身同名。要在上述語句中進(jìn)行區(qū)分,必須在名稱之后輸入兩個方括號([])來定位內(nèi)表而不是表格工作區(qū)域。7.3讀取內(nèi)表7.3.1逐行讀取內(nèi)表要將內(nèi)表逐行讀入工作區(qū)域,可以使用LOOP語句編一個循環(huán)。語法如下所示:LOOPAT<itab>[INTO<wa>][FROM<n1>][TO<n2>][WHERE<condition>]ENDLOOP.用INTO選項(xiàng)指定目標(biāo)區(qū)域<wa>。如果表格有表頭行,則可以忽略INTO選項(xiàng)。這樣,表格工作區(qū)域就成了目標(biāo)區(qū)域。逐行將內(nèi)表<itab>讀入<wa>或表格工作區(qū)域<itab>。對于讀取的每一行,系統(tǒng)都處理以 LOOP 開始,以ENDLOOP 結(jié)束的語句塊。可以用控制關(guān)鍵字 AT 在LOOP-ENDLOOP 塊內(nèi)控制語句塊流。在語句塊內(nèi),系統(tǒng)字段 SY-TABIX 包含當(dāng)前行的索引。處理完表格的所有行之后循環(huán)結(jié)束。 在ENDLOOP 語句之后,如果至少讀取了一行, 則將系統(tǒng)字段 SY-SUBRC 設(shè)置為0。否則,將其設(shè)置為 4。可以使用 FROM、TO或WHERE 選項(xiàng)限制要在循環(huán)中進(jìn)行處理的行數(shù)。30 使用 FROM 選項(xiàng),可以用 <n1>指定要讀取的第一行。30 使用
TO
選項(xiàng),可以用
<n2>
指定要讀取的最后一行。30 用
WHERE
選項(xiàng),可以指定
<condition>
的任何邏輯表達(dá)式。第一個操作數(shù)必須是內(nèi)表行結(jié)構(gòu)的組件。如果在循環(huán)中使用控制關(guān)鍵字 AT ,則不能使用 WHERE 選項(xiàng)。FROM 和 TO 選項(xiàng)限制系統(tǒng)必須讀取的行數(shù)。WHERE 選項(xiàng)僅避免對工作區(qū)域進(jìn)行不必要的填充。用WHERE 選項(xiàng),系統(tǒng)必須讀取所有行。 為了提高效率,應(yīng)該盡可能使用 FROM 和TO 選項(xiàng)。在某些條件下用 EXIT語句而不是 WHERE 選項(xiàng)跳出循環(huán)也十分有效。 用索引讀取單行要用索引從內(nèi)表中讀取單行,使用READ語句,用法如下:READTABLE<itab>[INTO<wa>]INDEX<idx>.用INTO選項(xiàng)指定目標(biāo)區(qū)域<wa>。如果表格有表頭行,可以忽略INTO選項(xiàng)。這樣,表格工作區(qū)域就成了目標(biāo)區(qū)域。系統(tǒng)用索引<idx>從表格<itab>中讀取行。這比用關(guān)鍵字訪問表格要快。如果找到有指定索引的條目,則將系統(tǒng)字段SY-SUBRC 設(shè)置為0,而且 SY-TABIX 包含該行的索引。否則,SY-SUBRC 包含非0值。如果<idx>小于或等于 0,則會發(fā)生實(shí)時錯誤。如果<idx>超過表格大小,系統(tǒng)將 SY-SUBRC 中的返回代碼值設(shè)置為4。 讀取自定義關(guān)鍵字的單行要從有自定義關(guān)鍵字的內(nèi)表中讀取單行,使用語句的 WITHKEY 選項(xiàng),用法如下:
READREADTABLE<itab>[INTO<wa>]WITHKEY<key>[BINARYSEARCH].用INTO選項(xiàng)可以指定目標(biāo)區(qū)域。如果表格有表頭行,則可以忽略INTO選項(xiàng)。這樣,表格工作區(qū)域就成了目標(biāo)區(qū)域。系統(tǒng)讀取<itab>中匹配<key>中所定義的關(guān)鍵字的第一個條目。如果找到有適當(dāng)關(guān)鍵字的條目,則將系統(tǒng)字段SY-SUBRC 設(shè)置為0,并且 SY-TABIX 包含該行的索引。否則,將 SY-SUBRC 設(shè)置為非 0值。如下所述,可以定義多個關(guān)鍵字 <key>:(1)定義一系列關(guān)鍵字段要定義自己的一系列關(guān)鍵字段,使用WITHKEY選項(xiàng),用法如下:WITHKEY<k1>=<f1>...<kn>=<fn>...自定義關(guān)鍵字包含表格組件<k1>...<kn> 。字段<f1>...<fn> 是關(guān)鍵字段的內(nèi)容必須匹配的值。 如果<fi>的數(shù)據(jù)類型與數(shù)據(jù)類型<ki>不兼容,則<fi>轉(zhuǎn)換為類型<ki>??梢杂?<ni>)代替<ki>來實(shí)時設(shè)置關(guān)鍵字段。關(guān)鍵字段是字段<ni>的內(nèi)容。如果在運(yùn)行時<ni>為空,則系統(tǒng)忽略該關(guān)鍵字段。如果<ni>包含無效的組件名稱,則發(fā)生實(shí)時錯誤。用戶可以為任何在關(guān)鍵字中使用的組件指定偏移量和長度。2)將整行定義為關(guān)鍵字通過使用 WITH KEY 選項(xiàng)可將內(nèi)表整行定義為其關(guān)鍵字,如下所示:WITHKEY=<value>...如果<value>的數(shù)據(jù)類型與表格行的數(shù)據(jù)類型不兼容,則將<value>轉(zhuǎn)換為表格行的數(shù)據(jù)類型。對于此類關(guān)鍵字,也可以選擇由某個基本數(shù)據(jù)類型或內(nèi)表直接定義的,而不是由字段串直接定義的特定內(nèi)表行。(3)將行首定義為關(guān)鍵字要將內(nèi)表的行首定義為關(guān)鍵字,使用
WITHKEY
選項(xiàng),用法如下:WITHKEY<k>...系統(tǒng)將(左對齊)的行首與 <k>進(jìn)行比較。<k>不能包含內(nèi)表或包含內(nèi)表的結(jié)構(gòu)。與上面兩個選項(xiàng)不同之處在于用<k>的數(shù)據(jù)類型進(jìn)行比較。 讀取標(biāo)準(zhǔn)關(guān)鍵字的單行要從內(nèi)表中讀取有特定標(biāo)準(zhǔn)關(guān)鍵字的第一行,使用READ 語句,用法如下:READTABLE<itab>[INTO<wa>][BINARYSEARCH].用戶必須指定要從<itab>的表格工作區(qū)域中讀取行的關(guān)鍵字。讀取語句的該變式只能用于有表頭行的內(nèi)表。系統(tǒng)在表格中搜索第一個條目以匹配表格工作區(qū)域中的所有標(biāo)準(zhǔn)關(guān)鍵字段并將該行讀入表格工作區(qū)域。如果使用INTO選項(xiàng),則將該行讀入工作區(qū)域<wa>。標(biāo)準(zhǔn)關(guān)鍵字包含內(nèi)表關(guān)鍵字中所述的全部關(guān)鍵字段,其中不包含 SPACE。如果找到有匹配關(guān)鍵字的條目,則將系統(tǒng)字段 SY-SUBRC 設(shè)置為 0并且 SY-TABIX 包含該行的索引。否則,將 SY-SUBRC 設(shè)置為4。 二分法搜索用關(guān)鍵字讀取單行時,可以執(zhí)行二分法搜索以代替標(biāo)準(zhǔn)順序搜索。為此,使用READ語句的二分法搜索選項(xiàng)。READTABLE<itab>BINARYSEARCH.如果使用二分法搜索選項(xiàng),則必須按關(guān)鍵字中指定的次序?qū)?nèi)表進(jìn)行排序。如果系統(tǒng)找到匹配指定關(guān)鍵字的多行,則讀取索引最低的行。二分法搜索比線性搜索要快。因此,應(yīng)盡可能將內(nèi)表排序并且使用二分法搜索選項(xiàng)。 比較單行的內(nèi)容要將使用 READ 語句讀取的單行內(nèi)容與目標(biāo)區(qū)域的內(nèi)容進(jìn)行比較,可使用 READ 語句的 COMPARING 選項(xiàng),用法如下:READTABLE<itab>[INTO<wa>]<key-option>COMPARING<fields>.系統(tǒng)讀取由關(guān)鍵字或 <key option> 中的索引指定的單行。讀取行之后,將 <fields>中指定的組件與目標(biāo)區(qū)域中的相應(yīng)組件進(jìn)行比較??梢杂?INTO 選項(xiàng)指定目標(biāo)區(qū)域 <wa>如果表格有表頭,則可以忽略 INTO 選項(xiàng)。這樣,表格工作區(qū)域就成了目標(biāo)區(qū)域。對于<field>,可以編寫一系列組件 ...<f1>...<fn> 。也可以用...ALLFIELDS 指定所有組件。如果系統(tǒng)找到包含指定 <key-option> 的條目,且進(jìn)行比較的字段內(nèi)容相同, 則將 SY-SUBRC 設(shè)置為0。如果進(jìn)行比較的字段內(nèi)容不同,則返回值 2。如果系統(tǒng)找不到條目,則包含 4。
。如果系統(tǒng)找到條目,則無論比較結(jié)果如何,都將其讀入目標(biāo)區(qū)域。 讀取一行部分列內(nèi)容要讀取一行部分列的內(nèi)容,使用 READ 語句的TRANSPORTING 選項(xiàng),用法如下:READTABLE<itab>[INTO<wa>]<key-option>TRANSPORTING<fields>.系統(tǒng)讀取由關(guān)鍵字或<keyoption>中索引指定的單行。讀取行之后,將<fields>中指定的組件傳輸給目標(biāo)區(qū)域??梢允褂肐NTO選項(xiàng)指定目標(biāo)區(qū)域<wa>。如果表格有表頭行,可以忽略INTO選項(xiàng)。這樣,表格工作區(qū)域就成了目標(biāo)區(qū)域。對于<fields>,可以用...<f1>...<fn> 指定一系列組件。也可以用...NOFIELDS 指定不傳輸任何組件。對于后一種情況,READ 語句只影響系統(tǒng)字段SY-SUBRC 和SY-TABIX 。 確定內(nèi)表屬性如果在處理過程中想知道內(nèi)表一共包含多少行,或者想知道定義的 OCCURS 參數(shù)的大小,使用 DESCRIBE句,用法如下:
語DESCRIBE
TABLE
<itab>
[LINES
<lin>][OCCURS<occ>].如果使用LINES參數(shù),則將填充行的數(shù)量寫入變量<lin>。如果使用OCCURS參數(shù),則將行的初始號寫入變量<occ>。7.4修改和刪除內(nèi)表行7.4.1用MODIFY更改行要用MODIFY語句更改行,使用:MODIFY<itab>[FROM<wa>][INDEX<idx>].FROM選項(xiàng)中指定的工作區(qū)域<wa>代替<itab>中的行。如果表格有表頭行,可以忽略FROM選項(xiàng)。這樣,表格工作區(qū)域就代替行。如果使用INDEX選項(xiàng),則新行代替索引為<idx>的現(xiàn)有行。如果替換成功,則將SY-SUBRC設(shè)置為0。如果內(nèi)表包含的行少于<idx>,則不更改任何行并且SY-SUBRC包含4。如果使用沒有 INDEX 選項(xiàng)的 MODIFY 語句,則系統(tǒng)只能在 LOOP-ENDLOOP 塊中通過更改當(dāng)前行(例如由SY-TABIX 返回其索引的行)來處理它。 用WRITETO 更改行要用 WRITETO 語句更改行,請使用下列語法:WRITE<f>[+<o1>][(<l1>)]TO<itab>[+<o2>][(<l2>)]INDEX<idx>.將字段<f>中偏移量為<o1>,長度為<l1>部分的內(nèi)容復(fù)制到索引為<idx>的表格行中,覆蓋偏移量為<o2>,長度為<l2>的部分。請注意,即使對于有表頭行的表格,帶INDEX選項(xiàng)的WRITETO語句也不訪問表格工作區(qū)域,而是訪問表格的某一行。WRITETO
語句不能識別表格行的結(jié)構(gòu)。
SAP
建議只在轉(zhuǎn)換已知其確切位置的標(biāo)志時才使用該語句。另一種情況是用一個基本字符字段定義的內(nèi)表。該結(jié)構(gòu)的表格非常重要,例如,用于程序的動態(tài)生成。 在循環(huán)中刪除行要在循環(huán)中從內(nèi)表中刪除行,使用DELETE語句,用法如下:DELETE<itab>.系統(tǒng)只能在 LOOP-ENDLOOP 塊中處理該語句。刪除第一行后,可以取消當(dāng)前行的定義并取消其對SY-TABIX內(nèi)容的賦值。要在該循環(huán)內(nèi)進(jìn)一步處理行,需使用有INDEX選項(xiàng)的語句。 用索引刪除行要使用索引刪除行,使用有語句,用法如下:
INDEX
選項(xiàng)的
DELETEDELETE<itab>INDEX<idx>.如果使用 INDEX 選項(xiàng),則從 ITAB 中刪除索引為<idx>的行。刪除行之后,下面行的索引減 1。如果操作成功,則將 SY-SUBRC 設(shè)置為0。否則,如果不存在索引為<idx>的行,則 SY-SUBRC 包含 4。如果在
LOOP-ENDLOOP
塊中刪除某一條目,則當(dāng)前行及其對 SY-TABIX 內(nèi)容的賦值可成為未定義。要在該循環(huán)內(nèi)進(jìn)一步處理行,需使用有 INDEX 選項(xiàng)的語句。 刪除鄰近的重復(fù)條目要刪除鄰近重復(fù)條目, 使用 DELETE 語句,用法如下:DELETE ADJACENT DUPLICATE ENTRIESFROM<itab>[COMPARING<comp>].系統(tǒng)從內(nèi)表<itab>中刪除所有鄰近重復(fù)條目。如果沒有 COMPARING 選項(xiàng),則標(biāo)準(zhǔn)關(guān)鍵字段的內(nèi)容必須相同。如果有 COMPARING 選項(xiàng) COMPARING<f1><f2>..., 指定字段<f1><f2>... 的內(nèi)容必須相同。也可以通過寫入 (<name>) 代替<f1>在運(yùn)行時在括號中指定字段名。字段<name>包含排序關(guān)鍵字段的名稱。如果<name>在運(yùn)行時為空,則系統(tǒng)將其忽略。如果包含無效的組件名,則會發(fā)生實(shí)時錯誤。如果有 COMPARING 選項(xiàng) COMPARING ALLFIELDS, 所有字段的內(nèi)容必須相同。 如果系統(tǒng)找到并刪除至少一個重復(fù)條目,則將 SY-SUBRC 設(shè)置為0。否則,將其設(shè)置為4。如果表格根據(jù)指定的比較標(biāo)準(zhǔn)進(jìn)行過排序,則可使用該語句從內(nèi)表中刪除所有重復(fù)條目。 刪除選定行要刪除一組選定行,使用 DELETE 語句,用法如下:DELETE<itab>[FROM<n1>][TO<n2>][WHERE<condition>].用戶必須至少指定三個選項(xiàng)之一。如果使用沒有WHERE選項(xiàng)的該語句,則系統(tǒng)從<itab>中刪除所有索引在<n1>和<n2>之間的行。如果不使用FROM選項(xiàng),則系統(tǒng)從第一行開始刪除。如果不使用TO選項(xiàng),則系統(tǒng)刪除所有行直到最后一行。如果使用 WHERE 選項(xiàng),則系統(tǒng)僅從 <itab>中刪除滿足條件<condition>的行。對于<condition>,可指定任何邏輯表達(dá)式。第一個操作數(shù)必須是內(nèi)表行結(jié)構(gòu)的組件。如果系統(tǒng)至少刪除一行,則將 SY-SUBRC 設(shè)置為 0。否則,將其設(shè)置為 4。7.5
內(nèi)表排序要將內(nèi)表排序,使用
SORT
語句,用法如下:SORT<itab>[<order>][ASTEXT][BY<f1>[<order>][ASTEXT]...<fn>[<order>][ASTEXT]].如果不使用 BY 選項(xiàng),則根據(jù)其標(biāo)準(zhǔn)關(guān)鍵字對內(nèi)表<itab>進(jìn)行排序。要定義不同的排序關(guān)鍵字,使用 BY選項(xiàng)。系統(tǒng)就根據(jù)指定組件 <f1>...<fn> 對數(shù)據(jù)集進(jìn)行排序。這些字段可以是任何類型,包括類型P、I和F字段,或者表格。排序關(guān)鍵字段的數(shù)目限制在250以內(nèi)。如果指定多個關(guān)鍵字段,則系統(tǒng)首先根據(jù)<f1>,然后根據(jù)<f2>,以此類推對記錄進(jìn)行排序。系統(tǒng)使用BY之前指定的選項(xiàng)作為BY之后指定的所有字段的缺省選項(xiàng)。在單個字段之后指定的選項(xiàng)覆蓋選項(xiàng)在BY之前指定的這些字段。如果在運(yùn)行時排序標(biāo)準(zhǔn)仍然未知,可以通過寫入(<name>)代替<fi>進(jìn)行動態(tài)設(shè)置。字段<name>包含排序關(guān)鍵字段的名稱。如果 <name>在運(yùn)行時為空,系統(tǒng)就將其忽略。如果包含無效的組件名,則發(fā)生實(shí)時錯誤。對于任何在排序字段中使用的字段,用戶都可指定偏移量和長度。用戶可以通過在 <order>選項(xiàng)中輸入 DESCENDING或ASCENDING 來指定排序順序。標(biāo)準(zhǔn)順序是升序。用戶可以用選項(xiàng) ASTEXT 影響字符字段的排序方式。如果沒有 ASTEXT,則系統(tǒng)二分排序字符字段并根據(jù)它們的平臺相關(guān)內(nèi)部編碼。如果有選項(xiàng) ASTEXT,系統(tǒng)根據(jù)當(dāng)前文本環(huán)境按字母順序排序字符字段。用戶可用語句 SETLOCALLANGUAGE 設(shè)置文本環(huán)境,這是例外。使用選項(xiàng)ASTEXT
,用戶可免除在排序之前將字符字段轉(zhuǎn)換為可排序格式之勞。此類轉(zhuǎn)換僅在下列情況下才有必要:首先按字母順序?qū)?nèi)表進(jìn)行排序,然后二分法進(jìn)行搜索。按字母順序排序后的內(nèi)表次序與按二分法排序后的次序不同。用字母關(guān)鍵字多次對內(nèi)表進(jìn)行排序。在這種情況下效率更佳,因?yàn)橹贿M(jìn)行一次轉(zhuǎn)換。在程序中為數(shù)據(jù)庫表格創(chuàng)建字母索引。如果在 BY 之前指定 ASTEXT,則選項(xiàng)僅影響排序關(guān)鍵字中的字符字段。如果在字段名之后指定 ASTEXT,則該字段必須為類型 C。如果自己指定排序關(guān)鍵字,通過使關(guān)鍵字相對短些可提高效率。但是,如果排序關(guān)鍵字包含內(nèi)表,則排序進(jìn)程可能會慢很多。排序并不穩(wěn)定。這意味著也許沒有必要保留排序關(guān)鍵字相同的行的舊次序。如果主內(nèi)存中沒有足夠的空間用于排序,系統(tǒng)就將數(shù)據(jù)寫入臨時外部文件。該文件名在 SAP 參數(shù)文件參數(shù)DIR_SORTTMP 中定義。7.6 創(chuàng)建順序表內(nèi)表適合于生成順序表。為此,從空的內(nèi)表開始,然后使用APPEND語句的SORTEDBY選項(xiàng),用法如下:APPEND[<wa>TO]<itab>SORTEDBY<f>.如果使用有 SORTEDBY 選項(xiàng)的 APPEND 語句,則并不將新行附加為內(nèi)表 <itab>的最后一行。而是系統(tǒng)插入新行,這樣內(nèi)表<itab>就根據(jù)字段<f>以降序排序。要生成包含多達(dá) 100 個條目的順序表,則應(yīng)該使用APPEND 語句。在處理更大的表時,由于效率方面的原因,建議用 SORT 語句對表格進(jìn)行排序。如果使用 SORTED BY 選項(xiàng),表格只能包含OCCURS 參數(shù)中指定的行數(shù)。這是一般規(guī)則的一個例外。如果添加的行數(shù)比指定的要多,則丟棄最后一行。這對于創(chuàng)建長度有限的次序表十分有用。使用APPEND語句的SORTEDBY選項(xiàng)指定的工作區(qū)域必須與內(nèi)表的行類型兼容。可轉(zhuǎn)換性對該選項(xiàng)不充分。7.7AT??ENDAT 行組控制級別用控制級別語句 AT可以打開語句塊,用控制級別語句ENDAT 可以關(guān)閉它。語法如下所示:AT<line>.<statementblock>ENDAT.在處理 AT- ENDAT 內(nèi)語句塊的行條件 <line>可以是:<line> 含義FIRST 內(nèi)表的第一行LAST 內(nèi)表的最后一行NEW<f> 行組的開頭,與字段 <f>和<f>剩余字段中的內(nèi)容相同ENDOf 行組的結(jié)尾,與字段 <f>和<f>剩余字段中的<f> 內(nèi)容相同AT-ENDAT 塊中的語句塊使用這些行條件代表預(yù)定義的控制結(jié)構(gòu)。用戶可以使用它們處理內(nèi)表中的控制斷點(diǎn),而不必使用編程分支和循環(huán)中所述的語句自己編程。在AT-ENDAT語句塊中,工作區(qū)域沒有用當(dāng)前表格行進(jìn)行填充。初始化所有不是標(biāo)準(zhǔn)關(guān)鍵字部件的字段。對于行條件 FIRST 和LAST,系統(tǒng)用星號 (*)改寫所有標(biāo)準(zhǔn)關(guān)鍵字段。對于行條件 NEW<f>和ENDOF<f> ,系統(tǒng)用星號(*)改寫所有出現(xiàn)在工作區(qū)域中指定字段 <f>右邊的標(biāo)準(zhǔn)關(guān)鍵字段。用戶可根據(jù)自己的需求在 AT-ENDAT 語句塊中填充工作區(qū)域。使用ATNEWf 和ATENDOFf 時需注意:1)f必須是內(nèi)表的第一個字段;2)內(nèi)表中f之后的字段的值都會變成“*”。使用ATNEW,ATFIRST,ATLAST,ATENDOF 時需注意:能使用
LOOPLOOP
的時候不能加條件;INTO 的 working
AT和aera
ENDAT 之間不。手動實(shí)現(xiàn) ATNEW,ATENDOF
的時候,需要注意,尤其是在
ATENDOF7.8
的時候。比較內(nèi)表可以將內(nèi)表用做邏輯表達(dá)式的操作數(shù):<itab1><operator><itab2>...對于<operator> ,可以使用比較所有的字段類型中的表格內(nèi)列出的所有操作符(EQ、=、NE、<>、><、GE、>=、LE、<=、GT、>、LT、<)。進(jìn)行內(nèi)表比較的第一個條件是它們包含的行數(shù)。內(nèi)表包含的行數(shù)越多,則內(nèi)表就越大。如果兩個內(nèi)表行數(shù)相同,則逐行、逐個組件進(jìn)行比較。如果表格行的組件本身就是內(nèi)表,則進(jìn)行遞歸比較。如果使用等于操作符以外的操作符,則系統(tǒng)找到一對不相等的組件后就立即停止比較并返回該結(jié)果。對于有表頭行的內(nèi)表,則可在表格名之后使用方括號以將表格工作區(qū)域和表格體區(qū)別開來。7.9 初始化內(nèi)表要初始化有或沒有表頭的內(nèi)表,使用 REFRESH用法如下:
[]語句,REFRESH<itab>.該語句將內(nèi)表重置為填充它以前的狀態(tài)。這意味著表格將不包含任何行。如果使用沒有表格工作區(qū)域的內(nèi)表,可以使用CLEAR語句代替REFRESH語句,用法如下:CLEAR<itab>.如果使用有表頭行的內(nèi)表,CLEAR語句僅清除表格工作區(qū)域。要重置整個內(nèi)表而不清除表格工作區(qū)域,使用REFRESH語句或CLEAR語句,用法如下:CLEAR<itab>[].內(nèi)表名稱之后的方括號指內(nèi)表體。使用 REFRESH 或CLEAR 初始化內(nèi)表后,系統(tǒng)保持在內(nèi)存中保留的空間。可以用FREE語句釋放內(nèi)存,用法如下:FREE<itab>.也可以使用 FREE 語句重置內(nèi)表并直接釋放其內(nèi)存,而不必先使用 REFRESH 或CLEAR。與 REFRESH 一樣,F(xiàn)REE 在表格體上,而不在表格工作區(qū)域上工作。在FREE語句之后,可以再次定位內(nèi)表。這樣,系統(tǒng)就再次保留內(nèi)存空間??梢允褂萌缦逻壿嫳磉_(dá)式檢查內(nèi)表是否為空:...<itab>ISINITIAL...八模塊化8.1 宏的定義和調(diào)用要定義包含部分源代碼的宏,使用DEFINE語句,用法如下:DEFINE<macro>.<statements>END-OF-DEFINITION.這就定義了宏<macro> 。必須在 DEFINE 和END-OF-DEFINITION之間指定完整的語句。這些語句最多可以包含九個占位符(&1,&2,?,&9)。完成宏定義之后,就可以進(jìn)行調(diào)用,方法如下:<macro>[<p1><p2>...<p9>].在生成程序期間,系統(tǒng)用已定義的語句替換 <macro> ,用<pi>替換每個占位符&i。可以從宏中調(diào)用另一個宏,但宏不能調(diào)用自己。8.2 使用包含程序要從另一個 ABAP/4 程序中調(diào)用包含
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年高中歷史第六單元中國社會主義的政治建設(shè)與祖國統(tǒng)一單元總結(jié)學(xué)案含解析岳麓版必修1
- 2025合同樣例pos機(jī)合作協(xié)定范本
- 2025的學(xué)校食堂用工合同范本
- 2025抵押房產(chǎn)轉(zhuǎn)讓合同
- 2025醫(yī)療服務(wù)合同范本醫(yī)療服務(wù)合同樣本
- 2025年六盤水貨運(yùn)上崗證考試
- 2025年北京資格證模擬考試
- 2025年青島交通運(yùn)輸從業(yè)資格證怎樣考試
- 2025年云浮貨運(yùn)考試
- 2025勞動合同英文版范文
- 支氣管哮喘診治
- 5-2《巧手飾新年》教學(xué)設(shè)計(jì)
- 浙江省嘉興市2023-2024學(xué)年高一上學(xué)期1月期末考試政治試題
- 事業(yè)單位考試大綱題庫考點(diǎn)《人文歷史》(2023年版)-1
- 軟件項(xiàng)目開發(fā)投標(biāo)文件技術(shù)方案
- 《設(shè)計(jì)質(zhì)量保證措施》
- 有關(guān)于企業(yè)的調(diào)研報告范文(10篇)
- 君樂寶在線測評題答案
- 2024年秋季新人教PEP版英語三年級上冊全冊教案
- 2022年農(nóng)業(yè)銀行法人信貸理論知識考試題庫(含答案)
- 2024年秋國家開放大學(xué)會計(jì)信息系統(tǒng)(本)客觀題及答案
評論
0/150
提交評論