等多個(gè)文件中文abap教程第007章控制_第1頁
等多個(gè)文件中文abap教程第007章控制_第2頁
等多個(gè)文件中文abap教程第007章控制_第3頁
等多個(gè)文件中文abap教程第007章控制_第4頁
等多個(gè)文件中文abap教程第007章控制_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、SAP AG 7: 錯(cuò)誤!未定義書簽。 錯(cuò)誤!未定義書簽??刂?ABAP/4 程序流概覽內(nèi)容ABAP/4中 流控制的概 念.編程邏輯表 達(dá)式.比較所有的 字段類型.比較字符串 和數(shù)字串.二進(jìn)制位結(jié) 構(gòu)的比較.檢查字段是 否屬于某一 范圍.檢查初始值.檢查選擇條 件.組合幾個(gè)邏 輯表達(dá)式.編程分支和 循環(huán).使用 IF 的條件分支.使用 CASE 的條件分支.使用 DO 的無條件循 環(huán).使用 WHILE 的條件循環(huán).終止循環(huán).要根據(jù)一定 條件執(zhí)行程 序組件,或 要將重復(fù)語 句序列組合 在循環(huán)中, 可以使用 ABAP/4 提供的用于 控制程序流 的標(biāo)準(zhǔn)關(guān)鍵 字。ABAP/4 也包含重要 的附加特征

2、。ABAP/4 程序流可以控制和 外部控制。 ABAP/4 程序流的控制和外 部控制之間 的差別在ABAP/4中 流控制的概 念 (頁 錯(cuò)誤!未定義書簽。) 中 解釋。流控 制。為此, 可使用其他 編程語言( 例如,C、 FORTRAN、 PASCAL 等本節(jié)主要等)中熟 悉的標(biāo)準(zhǔn)控 制關(guān)鍵字。下列描 述錯(cuò)誤!未定義書簽。ABAP/4中 流控制的概 念與其他高級 編程語言一 樣(如,C、 FORTRAN 和 PASCAL 等等),ABAP/4 提供也用于 控制程序流 的標(biāo)準(zhǔn)關(guān)鍵 字。這些關(guān) 鍵字用于_分支 (IF、CASE)循環(huán) (DO、WHILE)然而,ABAP/4 與其他編程 語言不同之

3、處在于其具 有程序流的控制和 外部控制。_控制 由上述標(biāo)準(zhǔn) 關(guān)鍵字引導(dǎo) 。在程序代 碼中對其進(jìn) 行定義。外部控制 由事件引導(dǎo) 。事件由 ABAP/4 程序(系統(tǒng) 程序或用戶 程序)或者 交互式用戶 輸入(例如 ,使用鼠標(biāo) 在屏幕上單 擊)生成。 系統(tǒng)不必按 ABAP/4 程序中列出 的順序?qū)M(jìn) 行語句處理 。這使得 ABAP/4 成為事件驅(qū) 動編程語言 ,類似于的Visual Basic。時(shí)間事件和 ABAP/4 程序的連接由事件關(guān)鍵 字提供。ABAP/4 程序中的每 個(gè)語句都屬 于特別的事件關(guān)鍵字。 即使在程序 中沒有指定 任何事件關(guān) 鍵字,所有 語句都自動 歸屬于標(biāo)準(zhǔn) 事件關(guān)鍵字(STAR

4、T-OF-SELECTION) ,與程序中 事件語句的 次序完全不 相干。SAP AG所有屬于某 一特定事件 關(guān)鍵字的語 句形成一個(gè) 處理塊。處 理塊是一個(gè) 在事件發(fā)生 時(shí)執(zhí)行的模塊。處理塊 內(nèi)的程序流 依賴于定義的順 序處理。ABAP/4 程序常規(guī)結(jié) 構(gòu)如下:控制。系統(tǒng) 按順序處理 語句,或按 照前面提到 的標(biāo)準(zhǔn)關(guān)鍵 字關(guān)于外部控 制的詳細(xì)信 息,如事件 及其如何與 ABAP/4 程序相互作 用的信息, 參見 C通過事件 控制 ABAP/4 程序流。該節(jié)說明如 何使用外部 控制控制處 理塊內(nèi)的程 序流。要控制 ABAP/4 程序中的流,請遵 循結(jié)構(gòu)化編 程原則并將 程序模塊劃 分為單個(gè)邏 輯

5、相關(guān)語句 塊(這些組 成控制結(jié)構(gòu) )。其中的 每個(gè)語句塊 都執(zhí)行務(wù)的一部分 ??梢杂?IF、CASE、 DO 和 WHILE 之類的關(guān)鍵 字控制處理 塊中不同語 句之間的程 序流。這些 語句允許編 制條件和無 條件的分支 和循環(huán)。條 件使用邏輯 表達(dá)式,可 以是真,也 可以為假。錯(cuò)誤!未定義書簽。編程邏輯表 達(dá)式使用條件控 制程序中的流。要 用公式指定 條件,請使 用比較數(shù)據(jù) 字段的邏輯 表達(dá)式,如 下所示:語法. .該表達(dá)式比 較兩個(gè)字段 。可能為真 ,也可能為 假。在帶關(guān) 鍵字 IF、 CHECK 和 WHILE 的條件語句 中使用邏輯 表達(dá)式。根據(jù)操作數(shù) 和 的數(shù)據(jù)類型 ,可以使用 不同

6、的邏輯 運(yùn)算符。允 許進(jìn)行:要使程序易 于閱讀,應(yīng) 該縮排控制 結(jié)構(gòu)中的語 句塊。出于 布局需要, 可以使用 ABAP/4 編輯器功能 “編輯 - 語句.” 和“程序 - 整齊打印程 序”(詳細(xì) 信息,參見 ABAP/4 程 序布局 (頁 26)。假設(shè)當(dāng)用戶 選擇一行后 ,生成列表 且提供一些 細(xì)分設(shè)備的 報(bào)表程序必 須作出反應(yīng) (詳細(xì)信息 ,參見 交互列表)。需要為 該事件處理 的代碼必須 事件關(guān) 鍵字 ILECTION之后。AT LILECTION. MOVE X TO FLAG.無論何時(shí)用 戶通過單擊 鼠標(biāo)或按 F2 鍵在列表中 選擇一個(gè)項(xiàng) 目時(shí), ILECTION 和下一個(gè)事 件關(guān)鍵字

7、之 間的所有語 句將被處理SAP AG除上述比較 之外,還可 以執(zhí)試:試 以檢查數(shù)據(jù) 字段是否完 全滿足一定 條件??梢?使用這些測另外,可以 將幾個(gè)邏輯 表達(dá)式組合 為一個(gè)簡單 邏輯表達(dá)式 。錯(cuò)誤!未定義書簽。比較所有的 字段類型要比較所有 的字段類型 ,可以在邏 輯表達(dá)式中 使用下列運(yùn) 算符:操作數(shù)可以 是數(shù)據(jù)庫字 段、字 段、文字或 常數(shù)。除基本字段 外,還可以 將結(jié)構(gòu)數(shù)據(jù) 類型和上表 中的運(yùn)算符 結(jié)合起來作 為操作數(shù)。字段串逐個(gè) 組件進(jìn)行比 較,嵌套的 結(jié)構(gòu)分為基 本的字段。關(guān)于比較內(nèi) 表的詳細(xì)信 息,參見 比較內(nèi)表 (頁 Error!Not a valid link.) 。如果有意義

8、 ,可以對不 同數(shù)據(jù)類型 的字段進(jìn)行 比較。如果 字段可轉(zhuǎn)換 ,就可以進(jìn) 行比較。在 比較之前, 系統(tǒng)將按照 下列層次規(guī) 則執(zhí)行自動 類型轉(zhuǎn)換( 參見 鍵入轉(zhuǎn)換 (頁 636) ):1.2.3.如果 操作數(shù)之一 是浮點(diǎn)數(shù)( 類型 F),則系 統(tǒng)將其它操 作數(shù)轉(zhuǎn)換為 類型 F。 如果 操作數(shù)之一 是壓縮字段 (類型 P),則系 統(tǒng)將其它操 作數(shù)轉(zhuǎn)換為 類型 P。如果 操作數(shù)之一 是日期字段 (類型 D)或時(shí)間 字段(類型 T),則系 統(tǒng)將其它操 作數(shù)轉(zhuǎn)換為 類型 D 或 T。不支持 日期和時(shí)間 字段之間的 比較,這會 導(dǎo)致程序中 斷。如果 操作數(shù)之一 是字符字段 (類型 C)且其它 操作數(shù)是十

9、六進(jìn)制字段 (類型 X),則系 統(tǒng)將類型 X 的操作數(shù)轉(zhuǎn) 換為類型 C。如果 操作數(shù)之一 是字符字段 (類型 C),其它 操作數(shù)為數(shù) 字字段(類 型 N),則系 統(tǒng)將這兩種 操作數(shù)都轉(zhuǎn) 換為類型 P。4.5.含 義EQ等于=等于NE不 等于不 等于不 等于LT小于 小于LE小 于等于大于GE大 于等于=大 于等于SAP AG錯(cuò)誤!未定義書簽。比較字符串 和數(shù)字串要比較字符 串(類型 C)和數(shù)字 文本(類型 N),可以 在邏輯表達(dá) 式中使用下 列運(yùn)算符。因?yàn)槌愋?N 和 C 外,系統(tǒng)不 能執(zhí)行任何 其它類型轉(zhuǎn) 換,所以, 在進(jìn)行包含 這些運(yùn)算之 一的比較時(shí) ,操作數(shù)應(yīng) 該是類型 N 或 C。運(yùn)

10、算符的功 能如下:含 義CO僅包 含CN不僅 包含CA包 含任何NA不 包含任何CS包 含字符串NS不 包含字符串CP包含模 式NP不包 含模式DATA: FTYPE F VALUE 100.00,PTYPE P VALUE 50.00 DECIMALS 2, ITYPE I VALUE 30.00.WRITE The following logical express are true:. IF F = P .WRITE: / F,=,P. ELSE.WRITE: / F,=50.0030 NE50.00這里,在 IF 語句中使用 兩個(gè)邏輯表 達(dá)式。如果 邏輯表達(dá)式 為真,則屏 幕上顯示出

11、來。如果邏 輯表達(dá)式為 假,則將相 反表達(dá)式顯 示在屏幕上 。SAP AGCO (僅包含)如果 僅包含 中的字符, 則邏輯表達(dá) 式 CO 為真。該比 較區(qū)分大小 寫,并包括 尾部空格。 如果比較結(jié) 果為真,則 系統(tǒng)字段 SY-FD包括 的長度。如 果為假,則 SY-FD移量 。包含 中第一個(gè)未 在 內(nèi)出現(xiàn)的字 符的偏CN (不僅包含 )如果 還包含 之外的其他 字符,則邏 輯表達(dá)式 CN 為真。該比 較區(qū)分大小 寫,并包括 尾部空格。 如果比較結(jié) 果為真,則 系統(tǒng)字段 SY-FD包含 中第一個(gè)未 同時(shí)在 中出現(xiàn)的字 符的偏移量 。如果為假 ,SY-FD長度。包含 的CA (包含任何 )如果 至

12、少包含 的一個(gè)字符 ,則邏輯表 達(dá)式 CA 為真。該比 較區(qū)分大小 寫。如果比 較結(jié)果為真 ,則系統(tǒng)字 段 SY-FD包含 中第一個(gè)也在 中出現(xiàn)的字 符的偏移量 。如果為假 ,SY-FD包含 的長度。NA (不包含任 何)如果 不包含 的任何字符 ,則邏輯表 達(dá)式 NA 為真。該比 較區(qū)分大小 寫。如果比 較結(jié)果為真 ,則系統(tǒng)字 段 SY-FD包含 的 長度。如果 為假,則 SY-FD包含 中在 內(nèi)出現(xiàn)的第 一個(gè)字符的 偏移量。CS (包含字符 串)如果 包含字符串 , 則邏輯表達(dá) 式 CS 為真。忽略 尾部空格并 且比較不區(qū) 分大小寫。 如果比較結(jié) 果為真,則 系統(tǒng)字段 SY-FD包含 在

13、中的偏移量 。如果為假 ,SY-FD包含 的長度。NS (不包含字 符串)如果 不包含字符 串 , 則邏輯表達(dá) 式 NS 為真。忽略 尾部空格且 比較不區(qū)分 大小寫。如 果比較為真 ,系統(tǒng)字段 SY-FD包含 的長度。如 果為假,系 統(tǒng)字段 SY-FD包含 在 中的偏移量 。CP (包含模式 )如果 包含模式 , 則邏輯表達(dá) 式 CP 為真。如果 屬于類型 C,則可以 在 中使用下列 通配符:_* 用于任何字 符串+ 用于任何單 個(gè)字符SAP AG忽略尾部空 格且比較不 區(qū)分大小寫 。如果比較 結(jié)果為真, 系統(tǒng)字段 SY-FD包含 在 中的偏移量 。如果為假 ,SY-FD包含 的長度。如果要對

14、 中的特殊字 符進(jìn)行比較 ,請將換碼 字符 # 放到其前面 ??梢允褂?換碼字符 # 指定_大小寫字 符通配符 *(輸入 #*)通配符 + (輸入 #+)換碼符號 本身 (輸入 #)字符串結(jié) 尾的空格 (輸入 # )NP (不包含模 式)如果 不包含模式 , 則邏輯表達(dá) 式 NP 為真。在中 ,可以使用 與 CP 相同的通配 符和換碼字 符。忽略尾部空 格且比較不 區(qū)分大小寫 。如果比較 結(jié)果為真, 則系統(tǒng)字段 SY-FD包含 . 的長度,如 果為假,SY-FD包含 在 中的偏移量 。ResultSY-FDBD COABCD 真5BD COABCDE假2ABC12CNABCD 真3ABABCC

15、NABCD 假5ABcdeCABd真1ABcdeCAbD假5ABAB NAAB假0ababaNAAB真5ABcdeCSbC真1ABcdeCSce假5ABcdeNSbC假1ABcdece真5DATA: F1(5) TYPE C VALUE ,F2(5) TYPE C VALUE .IF F1 F2.WRITE: / Comparison true, SY-FD=, SY-FD. ELSE.WRITE: / Comparison false, SY-FD=, SY-FD. ENDIF.下表列出該 程序的執(zhí)行 結(jié)果,取決 于所用的運(yùn) 算符和 F1 / F2 字段。SAP AG錯(cuò)誤!未定義書簽。二進(jìn)制

16、位結(jié) 構(gòu)的比較要將邏輯表 達(dá)式初始操 作數(shù)第一字 節(jié)的二進(jìn)制 位結(jié)構(gòu)與第 二操作數(shù)的 進(jìn)行比較, 請使用下列操作符。第二 操作數(shù)的長 度應(yīng)為一個(gè) 字節(jié)。沒有必要對 第二操作數(shù) 使用長度為 1 的十六進(jìn)制 字段(類型 X),但卻 較方便,因 為其長度為 一個(gè)字節(jié)且 數(shù)字值直接 與二進(jìn)制位 結(jié)構(gòu)相關(guān)。操作符功能 如下:O (二進(jìn)制位 是 1)如果 中二進(jìn)制位 是 1 的位置,在 中是 1,則邏輯 表達(dá)式 O 為真。Z (二進(jìn)制位 是0)如果 中二進(jìn)制位 是 1 的位置,在 中是 0,則邏輯 表達(dá)式 Z 為真。M (混合二進(jìn) 制位)如果從 中二進(jìn)制位 是 1 的位置起, 中至少一個(gè) 是 1,一個(gè)是

17、0,則邏輯 表達(dá)式 M 為真。DATA: C VALUE C, HEXDEC TYPE X, I TYPE I.含 義O二進(jìn)制 位是 1Z二進(jìn)制 位是 0M混合二 進(jìn)制位ABcdeCP*b*真1ABcdeCP*#b*假5ABcdeNP*b*假1ABcdeNP*#b*真5SAP AG進(jìn)制進(jìn)制二進(jìn)制 位結(jié)構(gòu)00000000011000000010220000001003300000011406401000000416501000001426601000010436701000011字 符C的 二進(jìn)制位結(jié) 構(gòu)由其 ASCII 碼 67 為當(dāng)前硬件進(jìn)行定 義。與用戶 看到的一樣 ,列表輸出 中出現(xiàn)的數(shù)

18、 字,填寫 1 的二進(jìn)制位 位置與 67 的二進(jìn)制位 結(jié)構(gòu)一樣。HEXDEC = 0.DO 256 TIMES. I = HEXDEC.IF C O HEXDEC.WRITE: / HEXDEC, I. ENDIF.HEXDEC = HEXDEC + 1.ENDDO.產(chǎn)生下列輸 出:0000110220334064416542664367這里,使用 運(yùn)算符 O 將字符C 的二進(jìn)制位 結(jié)構(gòu)與所有 0與 FF(10 進(jìn)制為 255)之 間的 16 進(jìn)制數(shù)進(jìn)行 比較。HEXDEC 的10 進(jìn)制值 I ,在HEXDEC 分配到I 期間,通過 使用自動類 型轉(zhuǎn)換確定 。如果比較 結(jié)果為真, 則在屏幕上

19、顯式 進(jìn)制數(shù)及其 進(jìn)制值。下表列出這些 數(shù)的二進(jìn)制 位結(jié)構(gòu)。SAP AG錯(cuò)誤!未定義書簽。檢查字段是 否屬于某一 范圍要檢查值是 否屬于特定 范圍,請使 用下列帶有 BETN 參數(shù)的邏輯 表達(dá)式:語法. BETN AND .如果 在 和 之間的范圍 內(nèi)發(fā)生,則 表達(dá)式為真 。它是下列 邏輯表達(dá)式 的短格式:IF GE AND LE .錯(cuò)誤!未定義書簽。檢查初始值要檢查字段 是否設(shè)置為 初始值,請 如下使用帶 有 IS INITIAL 參數(shù)的邏輯 表達(dá)式。語法. IS INITIAL .如果 包含本身類 型的初始值 ,則表達(dá)式 為真。通常 情況下,任 何字段,基 本的或結(jié)構(gòu) 化的(字符 串和內(nèi)表

20、) ,在 CLEAR 語句執(zhí)行后 ,都包含其 初始值(參 見 重置缺省值 (頁 610) )。DATA FLAG VALUE X. IF FLAG IS INITIAL.WRITE / Flag is initial.ELSE.WRITE / Flag is not initial.ENDIF. CLEAR FLAG.IF FLAG IS INITIAL.WRITE / Flag is initial.DATA: NUMBER TYPE I, FLAG.NUMBER = .IF NUMBER BETN 3 AND 7.FLAG = X.ELSE.FLAG = .ENDIF.這里,如果 NUMB

21、ER 的內(nèi)容在 3 和 7 之間出現(xiàn), 字段 FLAG 設(shè)置為“X” 。 SAP AG錯(cuò)誤!未定義書簽。檢查選擇條 件要檢查字段 內(nèi)容是否與 選擇表中的 選擇條件匹 配,可以如 下使用帶有 IN 參數(shù)的邏輯 表達(dá)式:語法. IN .如果字段 內(nèi)容的符合 選擇表 中的條件, 則表達(dá)式為 真。關(guān)于選擇條 件的詳細(xì)信 息,參見 使用選擇標(biāo)準(zhǔn)。關(guān)于邏輯表 達(dá)式中檢查 選擇條件的 詳細(xì)信息, 包括示例, 參見 使用邏輯表達(dá)式中的選擇表。錯(cuò)誤!未定義書簽。組合幾個(gè)邏 輯表達(dá)式通過使用邏 輯連接運(yùn)算 符 AND、OR 和 NOT,可 以將幾個(gè)邏 輯表達(dá)式組 合為單個(gè)表 達(dá)式:_要將幾個(gè) 邏輯表達(dá)式 組合為單

22、個(gè) 表達(dá)式,且 該表達(dá)式僅 當(dāng)所有組件 表達(dá)式為真 時(shí)才為真,則表達(dá)式之 間要用 AND 連接。要將幾個(gè) 邏輯表達(dá)式 組合為單個(gè) 表達(dá)式,且 只要其中一 個(gè)組件表達(dá) 式為真時(shí), 該表達(dá)式即為真,則表 達(dá)式之間要 用 OR 連接。要轉(zhuǎn)化邏 輯表達(dá)式的 結(jié)果,請?jiān)?其前面指定 NOT。_NOT 優(yōu)先于 AND,AND 優(yōu)先于 OR。但是 ,可以用任 何括弧組合 指定處理順 序。由于 ABAP/4將括弧解釋 為單字,前 面或后面必 須至少有一 個(gè)空格。ABAP/4 從左到右處 理邏輯表達(dá) 式。如果確 定組件表達(dá) 式之一是真 或假,就不 再執(zhí)行該組 件中其余的 比較或檢查 。這意味著 采取這種方 法組

23、織邏輯 表達(dá)式可以 提高性能, 就是將經(jīng)常 為假的比較 放置在 AND 鏈的開頭, 而將費(fèi)時(shí)的 比較,如字 符串查找放 等到最后。DATA: FTYPE F VALUE 100.00, N(3) TYPE N VALUE 123, C(3) TYPE C VALUE 456.WRITE The following logical expresis true:. IF ( C LT N ) AND ( N GT F ).WRITE: / (,C,lt,N,) AND (,N,gt,F,).ELSE.WRITE: / (,C,ge,N,) OR (,N,le,F,).ENDIF.這產(chǎn)生如下 輸出:

24、ELSE.WRITE / Flag is not initial.ENDIF.這產(chǎn)生如下 輸出: Flag is not initial Flag is initial.這里,DATA 語句之后, 字符串 FLAG 不包含初始 值,因?yàn)橛?VALUE 參數(shù)設(shè)置為 X。執(zhí) 行 CLEAR 語句之后, 將其重置為 初始值。SAP AG錯(cuò)誤!未定義書簽。編程分支和 循環(huán)可以在程序 中定義條件 和無條件分 支和循環(huán)。 為此,ABAP/4 提供了幾個(gè) 在下列語 句。分支循環(huán)中描述的錯(cuò)誤!未定義書簽。使用 IF 的條件分支IF 語句允許依 據(jù)條件將程 序流轉(zhuǎn)到特 定的語句塊 中。該語句 塊包括 IF 語句

25、及其后 面的ELSEIF、 ELSE 或 ENDIF 之間的所有 命令。語法IF.EIFs EIFs.E.s ENDIF. ement block. ement blockement block如果第一個(gè) 條件是真, 系統(tǒng)將執(zhí)行 所有語句直 到第一個(gè)語 句塊結(jié)束, 然后繼續(xù)處 理 ENDIF 語句之后的 程序。要采 用選擇性條 件,可以使 用 ELSEIF 語句。如果 第一個(gè)條件 是假,系統(tǒng) 使用與 IF 語句一樣的 方式處理后 面的 ELSEIF 語句。如果 IF 或 ELSEIF 條件都為假 ,則執(zhí)行 ELSE 開始的語句 塊。最后的 語句塊必須 用 ENDIF 結(jié)束。要用公式表 達(dá) IF

26、 和 ELSEIF 語句中的條 件,可以使 用任何 編程邏輯表 達(dá)式 (頁 錯(cuò)誤!未定義書簽。) 描述的邏輯 表達(dá)式。DATA: TEXT1(30) VALUE This is thetext, TEXT2(30) VALUE This is the second text,ABAP/4 允許無限地 嵌套 IF - ENDIF 語句塊,但 是必須在相 同的處理塊 中終止。換 句話說,就是 IF - ENDIF 塊不能包含 事件關(guān)鍵字 。下列邏輯表達(dá)式為真:( 456 ge 123 ) OR ( 123 le 1.000000000000000E+02 )在本例中, 在 IF 語句中使用 邏輯表

27、達(dá)式 。如果邏輯 表達(dá)式為真 ,則將其在 屏幕上顯示 出來。如果 為假,則屏 幕上出現(xiàn)相 反的表達(dá)式 。SAP AG錯(cuò)誤!未定義書簽。使用 CASE 的條件分支要根據(jù)特殊 數(shù)據(jù)字段的 內(nèi)容執(zhí)行不 同的語句塊 ,可以如下 使用 CASE 語句:語法CASE .WHEN .sement WHEN .sement WHEN .sement WHEN .WHEN OTHERS.blockblockblock系統(tǒng)執(zhí)行 WHEN 語句之后的 語句塊,如 果 內(nèi)容等于的內(nèi)容,且 繼續(xù)處理 ENDCASE語句后面的 語句。如果 的內(nèi)容不等 于的內(nèi)容,則 執(zhí)行選項(xiàng) WHEN OTHERS 后面的語句 塊。最后的

28、 語句塊必須 用 ENDCASE 結(jié)束。使用 CASE 的條件分支 是帶 IF 的類似處理 的短格式:= .ement block = .ement block = .ement block = .IF s ELSEIFs ELSEIFs ELSEIF. ELSE.TEXT3(30) VALUE This is the third text, STRING(5) VALUE eco.IF TEXT1 CS STRING.WRITE / Condition 1 is fulfilled.ELSEIF TEXT2 CS STRING.WRITE / Condition 2 is fulfilled

29、.ELSEIF TEXT3 CS STRING.WRITE / Condition 3 is fulfilled.ELSE.WRITE / No condition is fulfilled.ENDIF.產(chǎn)生如下輸 出:Condition 2 is fulfilled.這里,第二 個(gè)邏輯表達(dá) 式 TEXT2 CS STRING 是真,因?yàn)?字符串“eco” 存在于 TEXT2 中。SAP AG錯(cuò)誤!未定義書簽。使用 DO 的無條件循 環(huán)如果想要多 次執(zhí)行語句 塊,則可以 如下使用 DO 語句編程循 環(huán):語法DO TIMES VARYING FROM NEXT . ENDDO.在發(fā)現(xiàn) EXIT、

30、 STOP 或 REJECT 語句之前, 系統(tǒng)繼續(xù)執(zhí) 行由 DO 引導(dǎo)、ENDDO 結(jié)束的語句 塊(參見 終止循環(huán) (頁 錯(cuò)誤!未定義書簽。) )??梢允褂?TIMES 選項(xiàng)限制循 環(huán)次數(shù)。 可以是文字 或變量。如 果 是 0 或負(fù)數(shù),系 統(tǒng)不執(zhí)行該 循環(huán)。系統(tǒng)字段 SY-INDEX 中包含已處 理過的循環(huán) 次數(shù)。使用 DO 語句時(shí)要避 免死循環(huán)。 如果不使用 TIMES 選項(xiàng),則在 語句塊中至 少應(yīng)包含一 個(gè)EXIT、 STOP 或 REJECT 語句,以便 系統(tǒng)能夠退 出循環(huán)。DATA: TEXT1 VALUE X, TEXT2 VALUE Y, TEXT3 VALUE Z, STRING

31、 VALUE A.CASE STRING. WHEN TEXT1.WRITE: / String is, TEXT1.WHEN TEXT2.WRITE: / String is, TEXT2.WHEN TEXT3.WRITE: / String is, TEXT3.WHEN OTHERS.WRITE: / String is not, TEXT1, TEXT2, TEXT3.ENDCASE.產(chǎn)生如下輸 出:String is not X Y Z這里,執(zhí)行 WHEN OTHERS 后面的語句 塊,因?yàn)?STRING 的內(nèi)容“A” 不等于“X” 、“Y”或 “Z”,。在 ABAP/4 中,可以嵌

32、套 CASE - ENDCASE 塊,且可以 與 IF - ENDIF 結(jié)合使用, 但必須在同 一處理塊中 終止。SAP AG可以任意嵌 套 DO 循環(huán),也可 以與其他循 環(huán)組合使用 ??梢允褂?VARYING 選項(xiàng)在每次 循環(huán)中給變 量 重新賦值。 、 、 、 . 必需是內(nèi)存 中類型相同 和長度相等 的一系列等 距字段。第 一次循環(huán)中 ,將 分配給 ,第 二次循環(huán)中 ,將 分配給 ,以 此類推???以在一個(gè) DO 語句中使用 多個(gè) VARYING 選項(xiàng)。如果在 DO 循環(huán)中改變 控制變量 ,則 系統(tǒng)將自動 改變相應(yīng)的 字段。應(yīng)保證循環(huán) 次數(shù)不超過 涉及到的變 量 、 、 的數(shù)量。本例顯示 2

33、 個(gè)嵌套循環(huán) ,都使用 TIMES 選項(xiàng)。DO 2 TIMES.WRITE SY-INDEX. SKIP.DO 3 TIMES.WRITE SY-INDEX. ENDDO.SKIP. ENDDO.產(chǎn)生如下輸 出:11232123外部循環(huán)執(zhí) 行 2 次。每次執(zhí) 行外部循環(huán) 時(shí)循 環(huán)都執(zhí)行 3 次。注意系 統(tǒng)字段 SY-INDEX每個(gè)循 環(huán)各自的循 環(huán)次數(shù)。本例顯示 DO 循環(huán)的基本 格式。DO.WRITE SY-INDEX.IF SY-INDEX = 3.EXIT. ENDIF.ENDDO.產(chǎn)生如下輸 出:123這里,處理 3 次循環(huán),然 后在 EXIT 語句后退出 循環(huán)。SAP AG錯(cuò)誤!未定

34、義書簽。使用 WHILE 的條件循環(huán)如果只要條 件為真,就 不止一次執(zhí) 行語句,可 以如下使用 WHILE 語句編程:語法WHILE VARY FROM NEXT . ENDWHILE.只要 是真,或系 統(tǒng)發(fā)現(xiàn) EXIT、 STOP 或 REJECT 語句,系統(tǒng) 將繼續(xù)執(zhí)行 由 WHILE語句引導(dǎo)、 ENDWHILE 結(jié)束的語句 塊(參見 終止循環(huán) (頁 錯(cuò)誤!未定義書簽。) )。對于 , 可以使用 編程邏輯表 達(dá)式 (頁 錯(cuò)誤!未定義書簽。) 中描述的任 何邏輯表達(dá) 式。系統(tǒng)字段 SY-INDEX 中包含已執(zhí) 行的循環(huán)次 數(shù)??梢匀我馇?套 WHILE 循環(huán),也可 與其他循環(huán) 結(jié)合使用。WH

35、ILE 語句的 VARY 選項(xiàng)與 DO 循環(huán)的 VARYING 選項(xiàng)工作方 式一樣(參 見使用 DO 的無條件循 環(huán) (頁 錯(cuò)誤!未定義書簽。) )。允許 每次執(zhí)行循 環(huán)時(shí)為變量 重新賦值。、 . 必需是內(nèi)存 中類型相同 和長度相等 的一系列等 距字段。第 一次循環(huán)時(shí) ,將 分配給 ,第 二次循環(huán)時(shí) ,將 分配給 ,以 此類推???以在一個(gè) WHILE 語句中使用 多個(gè) VARY 選項(xiàng)。該示例說明 如何在 DO 循環(huán)中使用 VARYING 選項(xiàng)。DATA: BEGIN OF TEXT, WORD1(4) VALUE This, WORD2(4) VALUE is, WORD3(4) VALUE

36、 a, WORD4(4) VALUE loop, END OF TEXT.DATA: STRING1(4), STRING2(4).DO 4 TIMES VARYING STRING1 FROM TEXT-WORD1 NEXT TEXT-WORD2.WRITE STRING1.IF STRING1 = is. STRING1 = was.ENDIF. ENDDO.SKIP.DO 2 TIMES VARYING STRING1 FROM TEXT-WORD1 NEXT TEXT-WORD3 VARYING STRING2 FROM TEXT-WORD2 NEXT TEXT-WORD4.WRITE

37、: STRING1, STRING2.ENDDO.這產(chǎn)生如下 輸出:This isaloopThis was aloop字段串 TEXT 代表內(nèi)存中 四個(gè)等距字 段序列。每 次執(zhí)行第一 個(gè) DO 循環(huán)時(shí),都 依次將其組件分配到 STRING1 中。如果 STRING1 包含“is” ,則將其改 變?yōu)椤皐as” ,而且自動 將 TEXT-WORD2 改變?yōu)椤皐as”。每次執(zhí)行 第二個(gè) DO 循環(huán)時(shí),將 TEXT 的組件傳遞 給STRING1和 STRING2。SAP AG錯(cuò)誤!未定義書簽。終止循環(huán)要終止循環(huán) 過程,請使 用下列關(guān)鍵 字之一。關(guān) 鍵字用途無 條件 終止 循環(huán) 過程 (頁錯(cuò)誤!未 定

38、義 書簽。)CONTI NUE有 條件 終止 循環(huán) 過程 (頁DATA: LENGTHTYPE I VALUE 0, STRLTYPE I VALUE 0,STRING(30) TYPE C VALUE Test String.STRL = STRLEN( STRING ). WHILE STRING NE SPACE.WRITE STRING(1). LENGTH = SY-INDEX. SHIFT STRING.ENDWHILE.WRITE: / STRLEN:, STRL.WRITE: / Length of string:, LENGTH.產(chǎn)生如下輸 出:T e s tS t r i

39、n gSTRLEN:11Length of string:11此處使用 WHILE 循環(huán)確定字 符串的長度 。做法是: 每次執(zhí)行循 環(huán)時(shí),都將 字符串 一位,直到 僅包含空格 。選擇本例 主要是為了 說明 WHILE 語句。但是 ,確定字符 串長度更簡 便和有效的 辦法是通過 使用內(nèi)置的 函數(shù) STRLEN, 這在示例中 也可看出。使用 WHILE 語句要避免 死循環(huán)。請 記住,在一 段時(shí)間之后 ,WHILE 語句條件應(yīng) 變?yōu)榧伲?者系統(tǒng)能夠 找到 EXIT、 STOP 或 REJECT 語句退出循 環(huán)。SAP AG以下說 明如何在 DO 和WHILE 循環(huán)以及下 列循環(huán)中使 用 CONTI

40、NUE、 CHECK 和 EXIT:_LOOP - ENDLOOP 循環(huán),用于 處理內(nèi)表( 參見 循環(huán)處理 (頁 Error! Not a valid link.) )。_SELECT - ENDSELECT 循環(huán),用于 從數(shù)據(jù)表中( 參見 從幾行選擇所有數(shù)據(jù))。數(shù)據(jù)錯(cuò)誤!未定義書簽。無條件終止 循環(huán)過程要立即無條 件終止循環(huán) ,請如下使 用 CONTINUE 語句:語法CONTINUE.在CONTINUE 語句之后, 系統(tǒng)跳過當(dāng) 前語句塊中 所有剩余語 句塊,繼續(xù) 該語句后面 的循環(huán)。DO 4 TIMES.IF SY-INDEX = 2.CONTINUE. ENDIF.WRITE SY-IN

41、DEX. ENDDO.產(chǎn)生如下輸 出:134此處系統(tǒng)不 處理 WRITE 語句就終止 第二次循環(huán) 。在循環(huán)中只 能使用 CONTINUE, 但在循環(huán)外 還可使用關(guān) 鍵字 CHECK 和 EXIT, 分別完成不 同的功能。 例如,可以 終止子程序 或整個(gè)程序 塊。關(guān)于 CHECK 和 EXIT 語句及其如 何在循環(huán)外 使用的詳細(xì) 信息,參見終止子系統(tǒng) 和 終止處理塊 。錯(cuò)誤!未 定義 書簽。)CHEC K完 全終 止循 環(huán) (頁 錯(cuò)誤!未定 義書簽。EXIT)SAP AG錯(cuò)誤!未定義書簽。有條件終止 循環(huán)過程要有條件終 止循環(huán)過程 ,請如下使 用 CHECK 語句:語法CHECK .如果條件是

42、假,系統(tǒng)跳 過當(dāng)前語句 塊中所有剩 余語句塊, 繼續(xù)后面的 循環(huán)過程。 對于, 可使用 編程邏輯表 達(dá)式 (頁 錯(cuò)誤!未定義書簽。) 中描述的任 何邏輯表達(dá) 式。錯(cuò)誤!未定義書簽。完全終止循 環(huán)要無條件完 全終止循環(huán) ,請如下使 用 EXIT 語句:語法EXIT.EXIT 語句之后, 系統(tǒng)立即退 出循環(huán),繼 續(xù)結(jié)束語句 (ENDDO、 ENDWHILE、 ENDSELECT)后 面 的處理。 在嵌套循環(huán) 中,系統(tǒng)僅 退出當(dāng)前循 環(huán)。DO 4 TIMES.IF SY-INDEX = 3.EXIT. ENDIF.WRITE SY-INDEX. ENDDO.產(chǎn)生如下輸 出:12此處系統(tǒng)不 處理 WR

43、ITE 語句或第四 個(gè)循環(huán)過程 ,就在第三 個(gè)循環(huán)過程 中完全終止 循環(huán)。DO 4 TIMES.CHECK SY-INDEX BETN 2 and 3. WRITE SY-INDEX.ENDDO.產(chǎn)生如下輸 出:23此處系統(tǒng)不 處理 WRITE 語句就終止 第一個(gè)和第 四個(gè)循環(huán),因?yàn)?SY-INDEX 不在 2 和 3 之間。SAP AG 8:概覽內(nèi)容ABAP/4中 流控制的概 念.編程邏輯表 達(dá)式.比較所有的 字段類型.比較字符串 和數(shù)字串.二進(jìn)制位結(jié) 構(gòu)的比較.檢查字段是 否屬于某一 范圍.檢查初始值.檢查選擇條 件.組合幾個(gè)邏 輯表達(dá)式.編程分支和 循環(huán).使用 IF 的條件分支.使用 C

44、ASE 的條件分支.使用 DO 的無條件循 環(huán).使用 WHILE 的條件循環(huán).終止循環(huán).要根據(jù)一定 條件執(zhí)行程 序組件,或 要將重復(fù)語 句序列組合 在循環(huán)中, 可以使用 ABAP/4 提供的用于 控制程序流 的標(biāo)準(zhǔn)關(guān)鍵 字。ABAP/4 也包含重要 的附加特征 。ABAP/4 程序流可以控制和 外部控制。ABAP/4 程序流的控制和外 部控制之間 的差別在ABAP/4中 流控制的概念 (頁本節(jié)主要錯(cuò)誤!未定義書簽。)中 解釋。流控 制。為此, 可使用其他 編程語言( 例如,C、 FORTRAN、 PASCAL 等等)中熟 悉的標(biāo)準(zhǔn)控 制關(guān)鍵字。下列描 述錯(cuò)誤!未定義書簽。ABAP/4中 流控制

45、的概 念與其他高級 編程語言一 樣(如,C、 FORTRAN 和 PASCAL 等等),ABAP/4 提供也用于 控制程序流 的標(biāo)準(zhǔn)關(guān)鍵 字。這些關(guān) 鍵字用于_分支 (IF、CASE)循環(huán) (DO、WHILE)然而,ABAP/4 與其他編程 語言不同之 處在于其具 有程序流的控制和 外部控制。_控制 由上述標(biāo)準(zhǔn) 關(guān)鍵字引導(dǎo) 。在程序代 碼中對其進(jìn) 行定義。外部控制 由事件引導(dǎo) 。事件由 ABAP/4 程序(系統(tǒng) 程序或用戶 程序)或者 交互式用戶 輸入(例如 ,使用鼠標(biāo) 在屏幕上單 擊)生成。 系統(tǒng)不必按 ABAP/4 程序中列出 的順序?qū)M(jìn) 行語ABAP/4的Visual Basic。句處理

46、 。這使得成為事件驅(qū) 動編程語言 ,類似于時(shí)間事件和 ABAP/4 程序的連接 由事件關(guān)鍵 字提供。ABAP/4 程序中的每 個(gè)語句都屬 于特別的事 件關(guān)鍵字。即使在程序 中沒有指定 任何事件關(guān) 鍵字,所有 語句都自動 歸屬于標(biāo)準(zhǔn) 事件關(guān)鍵字 (START-OF-SELECTION) ,與程序中 事件語句的 次序完全不 相干。所有屬于某 一特定事件 關(guān)鍵字的語 句形成一個(gè) 處理塊。處 理塊是一個(gè) 在事件發(fā)生 時(shí)執(zhí)行的模 塊。處理塊 內(nèi)的程序流 依賴于 控制。系統(tǒng) 按順序處理 語句,或按 照前面提到 的標(biāo)準(zhǔn)關(guān)鍵 字定義的順 序處理。ABAP/4程序常規(guī)結(jié) 構(gòu)如下:SAP AGSAP AG操作數(shù)可

47、以 是數(shù)據(jù)庫字 段、字 段、文字或 常數(shù)。除基本字段 外,還可以 將結(jié)構(gòu)數(shù)據(jù) 類型和上表 中的運(yùn)算符 結(jié)合起來作 為操作數(shù)。 字段串逐個(gè) 組件進(jìn)行比 較,嵌套的 結(jié)構(gòu)分為基 本的字段。 關(guān)于比較內(nèi) 表的詳細(xì)信 息,參見 比較內(nèi)表 (頁Error! Not a valid link.)。如果有意義 ,可以對不 同數(shù)據(jù)類型 的字段進(jìn)行 比較。如果 字段可轉(zhuǎn)換 ,就可以進(jìn) 行比較。在 比較之前, 系統(tǒng)將按照 下列層次規(guī) 則執(zhí)行自動 類型轉(zhuǎn)換( 參見 鍵入轉(zhuǎn)換 (頁 636) ):1.2.3.如果 操作數(shù)之一 是浮點(diǎn)數(shù)( 類型 F),則系 統(tǒng)將其它操 作數(shù)轉(zhuǎn)換為 類型 F。 如果 操作數(shù)之一 是壓縮字

48、段 (類型 P),則系 統(tǒng)將其它操 作數(shù)轉(zhuǎn)換為 類型 P。如果 操作數(shù)之一 是日期字段 (類型 D)或時(shí)間 字段(類型 T),則系 統(tǒng)將其它操 作數(shù)轉(zhuǎn)換D或 T。不支持 日期和時(shí)間 字段之間的 比較,這會 導(dǎo)致程序中 斷。為 類型4.如果 操作數(shù)之一 是字符字段 (類型 C)且其它 操作數(shù)是十 六進(jìn)制字段 (類型 X),則系 統(tǒng)將類型 X 的操作數(shù)轉(zhuǎn) 換為類型 C。如果 操作數(shù)之一 是字符字段 (類型 C),其它 操作數(shù)為數(shù) 字字段(類 型 N),則系 統(tǒng)將這兩種 操作數(shù)都轉(zhuǎn) 換為類型 P。5.不 等于LT小 于小于LE小 于等于大于GE大 于等于=大 于等于SAP AG錯(cuò)誤!未定義書簽。比較

49、字符串 和數(shù)字串要比較字符 串(類型 C)和數(shù)字 文本(類型 N),可以 在邏輯表達(dá) 式中使用下 列運(yùn)算符。因?yàn)槌愋?N 和 C 外,系統(tǒng)不 能執(zhí)行任何 其它類型轉(zhuǎn) 換,所以, 在進(jìn)行包含 這些運(yùn)算之 一的比較時(shí) ,操作數(shù)應(yīng) 該是類型 N 或 C。運(yùn)算符的功 能如下:CO (僅包含)如果 僅包含 中的字符, 則邏輯表達(dá) 式 CO 為真。該比 較區(qū)分大小 寫,并包括 尾部空格。 如果比較結(jié) 果為真,則 系統(tǒng)字段 SY-FD包括 的長度。如 果為假,則 SY-FD包含 中第一個(gè)未 在 內(nèi)出現(xiàn)的字 符的偏移量 。CN (不僅包含 )如果 還包含 之外的其他 字符,則邏 輯表達(dá)式 CN 為真。該比

50、較區(qū)分大小 寫,并包括 尾部空格。 如果比較結(jié) 果為真,則 系統(tǒng)字段 SY-FD包含 中第一個(gè)未 同時(shí)在 中出現(xiàn)的字 符的偏移量 。如果為假 ,SY-FD包含 的長度。CA (包含任何 )如果 至少包含 的一個(gè)字符 ,則邏輯表 達(dá)式 CA 為真。該比 較區(qū)分大小 寫。如果比 較結(jié)果為真 ,則系統(tǒng)字 段 SY-FD包含 中第一個(gè)也 在 中出現(xiàn)的字 符的偏移量 。如果為假 ,SY-FD包含 的長度。NA (不包含任 何)如果 不包含 的任何字符 ,則邏輯表 達(dá)式 NA 為真。該比 較區(qū)分大小 寫。如果比 較結(jié)果為真 ,則系統(tǒng)字 段 SY-FD SY-FD包含 中在 內(nèi)出現(xiàn)的第 一個(gè)字符的 偏移量。

51、包含 的 長度。如果 為假,則CS (包含字符 串)如果 包含字符串 , 則邏輯表達(dá) 式 CS 含 義CO僅包 含CN不僅 包含CA包 含任何NA不 包含任何CS包 含字符串NS不 包含字符串CP包含模 式NP不包 含模式這里,在 IF 語句中使用 兩個(gè)邏輯表 達(dá)式。如果 邏輯表達(dá)式 為真,則屏 幕上顯示出 來。如果邏 輯表達(dá)式為 假,則將相 反表達(dá)式顯 示在屏幕上 。SAP AG為真。忽略 尾部空格并 且比較不區(qū) 分大小寫。如果比較結(jié) 果為真,則 系統(tǒng)字段 SY-FD包含 在 中的偏移量 。如果為假 ,SY-FD包含 的長度。NS (不包含字 符串)如果 不包含字符 串 , 則邏輯表達(dá) 式

52、NS 為真。忽略 尾部空格且 比較不區(qū)分 大小寫。如 果比較為真 ,系統(tǒng)字段 SY-FD包含 的長度。如 果為假,系 統(tǒng)字段 SY-FD包含 在 中的偏移量 。CP (包含模式 )如果 包含模式 , 則邏輯表達(dá) 式 CP 為真。如果 屬于類型 C,則可以 在 中使用下列 通配符:_* 用于任何字 符串_+ 用于任何單 個(gè)字符忽略尾部空 格且比較不 區(qū)分大小寫 。如果比較 結(jié)果為真, 系統(tǒng)字段 SY-FD包含 在 中的偏移量 。如果為假 ,SY-FD包含 的長度。如果要對 中的特殊字 符進(jìn)行比較 ,請將換碼 字符 # 放到其前面 ??梢允褂?換碼字符 # 指定_大小寫字 符通配符 *(輸 入 #

53、*)通配符 + (輸入 #+)換碼符號 本身 (輸入 #)字符串結(jié) 尾的空格 (輸入 # )NP (不包含模 式)如果 不包含模式 , 則邏輯表達(dá) 式 NP 為真。在中 ,可以使用 與 CP 相同的通配 符和換碼字 符。忽略尾部空 格且比較不 區(qū)分大小寫 。如果比較 結(jié)果為真, 則系統(tǒng)字段 SY-FD包含 . 的長度,如 果為假,SY-FD包含 在 中的偏移量 。SAP AG錯(cuò)誤!未定義書簽。二進(jìn)制位結(jié) 構(gòu)的比較要將邏輯表 達(dá)式初始操 作數(shù)第一字 節(jié)的二進(jìn)制 位結(jié)構(gòu)與第 二操作數(shù)的 進(jìn)行比較, 請使用下列 操作符。第二 操作數(shù)的長 度應(yīng)為一個(gè) 字節(jié)。沒有必要對 第二操作數(shù) 使用長度為 1 的十

54、六進(jìn)制 字段(類型 X),但卻 較方便,因 為其長度為 一個(gè)字節(jié)且 數(shù)字值直接 與二進(jìn)制位 結(jié)構(gòu)相關(guān)。操作符功能 如下:O (二進(jìn)制位 是 1)如果 中二進(jìn)制位 是 1 的位置,在 中是 1,則邏輯 表達(dá)式 O 為真。Z (二進(jìn)制位 是0)如果 中二進(jìn)制位 是 1 的位置,在 中是 0,則邏輯 表達(dá)式 Z 為真。M (混合二進(jìn) 制位)如果從 中二進(jìn)制位 是 1 的位置起, 中至少一個(gè) 是 1,一個(gè)是 0,則邏輯 表達(dá)式 M 為真。含 義O二進(jìn)制 位是 1Z二進(jìn)制 位是 0M混合二 進(jìn)制位ABcdeCAbD假5ABAB NAAB假0ababaNAAB真5ABcdeCSbC真1ABcdeCSce假

55、5ABcdeNSbC假1ABcdece真5ABcdeCP*b*真1ABcdeCP*#b*假5ABcdeNP*b*假1ABcdeNP*#b*真5SAP AGSAP AG錯(cuò)誤!未定義書簽。檢查字段是 否屬于某一 范圍要檢查值是 否屬于特定 范圍,請使 用下列帶有 BETN 參數(shù)的邏輯 表達(dá)式:語法. BETN AND .如果 在 和 之間的范圍 內(nèi)發(fā)生,則 表達(dá)式為真 。它是下列 邏輯表達(dá)式 的短格式:IF GE AND LE .字 符C的 二進(jìn)制位結(jié) 構(gòu)由其 ASCII 碼 67 為當(dāng)前硬件進(jìn)行定 義。與用戶 看到的一樣 ,列表輸出 中出現(xiàn)的數(shù) 字,填寫 1 的二進(jìn)制位 位置與 67 的二進(jìn)制位

56、 結(jié)構(gòu)一樣。SAP AG錯(cuò)誤!未定義書簽。檢查選擇條 件要檢查字段 內(nèi)容是否與 選擇表中的 選擇條件匹 配,可以如 下使用帶有 IN 參數(shù)的邏輯 表達(dá)式:語法. IN .如果字段 內(nèi)容的符合 選擇表 中的條件, 則表達(dá)式為 真。關(guān)于選擇條 件的詳細(xì)信 息,參見 使用選擇標(biāo)準(zhǔn)。關(guān)于邏輯表 達(dá)式中檢查 選擇條件的 詳細(xì)信息, 包括示例, 參見 使用邏輯表達(dá)式中的選擇表。錯(cuò)誤!未定義書簽。組合幾個(gè)邏 輯表達(dá)式通過使用邏 輯連接運(yùn)算 符 AND、OR 和 NOT,可 以將幾個(gè)邏 輯表達(dá)式組 合為單個(gè)表 達(dá)式:_要將幾個(gè) 邏輯表達(dá)式 組合為單個(gè) 表達(dá)式,且 該表達(dá)式僅 當(dāng)所有組件 表達(dá)式為真 時(shí)才為真,

57、則表達(dá)式之 間要用 AND 連接。要將幾個(gè) 邏輯表達(dá)式 組合為單個(gè) 表達(dá)式,且 只要其中一 個(gè)組件表達(dá) 式為真時(shí), 該表達(dá)式即為真,則表 達(dá)式之間要 用 OR 連接。_要轉(zhuǎn)化邏 輯表達(dá)式的 結(jié)果,請?jiān)?其前面指定 NOT。NOT 優(yōu)先于 AND,AND 優(yōu)先于 OR。但是 ,可以用任 何括弧組合 指定處理順 序。由于 ABAP/4 將括弧解釋 為單字,前 面或后面必 須至少有一 個(gè)空格。ABAP/4 從左到右處 理邏輯表達(dá) 式。如果確 定組件表達(dá) 式之一是真 或假,就不 再執(zhí)行該組 件中其余的 比較比較 放置在 AND 鏈的或檢查 。這意味著 采取這種方 法組織邏輯 表達(dá)式可以 提高性能, 就

58、是將經(jīng)常 為開頭, 而將費(fèi)時(shí)的 比較,如字 符串查找放 等到最后。ELSE.WRITE / Flag is not initial.ENDIF.這產(chǎn)生如下 輸出: Flag is not initial Flag is initial.這里,DATA 語句之后, 字符串 FLAG 不包含初始 值,因?yàn)橛?VALUE 參數(shù)設(shè)置為 X。執(zhí) 行 CLEAR 語句之后, 將其重置為 初始值。SAP AG錯(cuò)誤!未定義書簽。編程分支和 循環(huán)可以在程序 中定義條件 和無條件分 支和循環(huán)。 為此,ABAP/4 提供了幾個(gè) 在下列中描述的語 句。分支循環(huán)錯(cuò)誤!未定義書簽。使用 IF 的條件分支IF 語句允許依

59、據(jù)條件將程 序流轉(zhuǎn)到特 定的語句塊 中。該語句 塊包括 IF 語句及其后 面的 ELSEIF、 ELSE 或ENDIF 之間的所有 命令。語法.IFELSEIF. ement block. ement blocks ELSEIFs. ELSE.ENDIF.如果第一個(gè) 條件是真, 系統(tǒng)將執(zhí)行 所有語句直 到第一個(gè)語 句塊結(jié)束, 然后繼續(xù)處 理 ENDIF 語句之后的 程序。要采 用選擇性條 件,可以使 用 ELSEIF 語句。如果 第一個(gè)條件 是假,系統(tǒng) 使用與 IF 語句一樣的 方式處理后 面的 ELSEIF 語句。如果 IF 或 ELSEIF 條件都為假 ,則執(zhí)行 ELSE 開始的語句 塊。

60、最后的 語句塊必須 用 ENDIF 結(jié)束。要用公式表 達(dá) IF 和 ELSEIF 語句中的條 件,可以使 用任何 編程邏輯表 達(dá)式 (頁 8) 描述的邏輯 表達(dá) 式。在本例中, 在 IF 語句中使用 邏輯表達(dá)式 。如果邏輯 表達(dá)式為真 ,則將其在 屏幕上顯示 出來。如果 為假,則屏 幕上出現(xiàn)相 反的表達(dá)式 。SAP AG錯(cuò)誤!未定義書簽。使用 CASE 的條件分支要根據(jù)特殊 數(shù)據(jù)字段的 內(nèi)容執(zhí)行不 同的語句塊 ,可以如下 使用 CASE 語句:語法CASE .WHEN .WHEN .WHEN .WHEN .WHEN OTHERS.ENDCASE.系統(tǒng)執(zhí)行 WHEN 語句之后的 語句塊,如 果

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論