版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、SAP AG 7: 錯誤!未定義書簽。 錯誤!未定義書簽??刂?ABAP/4 程序流概覽內容ABAP/4中 流控制的概 念.編程邏輯表 達式.比較所有的 字段類型.比較字符串 和數(shù)字串.二進制位結 構的比較.檢查字段是 否屬于某一 范圍.檢查初始值.檢查選擇條 件.組合幾個邏 輯表達式.編程分支和 循環(huán).使用 IF 的條件分支.使用 CASE 的條件分支.使用 DO 的無條件循 環(huán).使用 WHILE 的條件循環(huán).終止循環(huán).要根據(jù)一定 條件執(zhí)行程 序組件,或 要將重復語 句序列組合 在循環(huán)中, 可以使用 ABAP/4 提供的用于 控制程序流 的標準關鍵 字。ABAP/4 也包含重要 的附加特征
2、。ABAP/4 程序流可以控制和 外部控制。 ABAP/4 程序流的控制和外 部控制之間 的差別在ABAP/4中 流控制的概 念 (頁 錯誤!未定義書簽。) 中 解釋。流控 制。為此, 可使用其他 編程語言( 例如,C、 FORTRAN、 PASCAL 等本節(jié)主要等)中熟 悉的標準控 制關鍵字。下列描 述錯誤!未定義書簽。ABAP/4中 流控制的概 念與其他高級 編程語言一 樣(如,C、 FORTRAN 和 PASCAL 等等),ABAP/4 提供也用于 控制程序流 的標準關鍵 字。這些關 鍵字用于_分支 (IF、CASE)循環(huán) (DO、WHILE)然而,ABAP/4 與其他編程 語言不同之
3、處在于其具 有程序流的控制和 外部控制。_控制 由上述標準 關鍵字引導 。在程序代 碼中對其進 行定義。外部控制 由事件引導 。事件由 ABAP/4 程序(系統(tǒng) 程序或用戶 程序)或者 交互式用戶 輸入(例如 ,使用鼠標 在屏幕上單 擊)生成。 系統(tǒng)不必按 ABAP/4 程序中列出 的順序對進 行語句處理 。這使得 ABAP/4 成為事件驅 動編程語言 ,類似于的Visual Basic。時間事件和 ABAP/4 程序的連接由事件關鍵 字提供。ABAP/4 程序中的每 個語句都屬 于特別的事件關鍵字。 即使在程序 中沒有指定 任何事件關 鍵字,所有 語句都自動 歸屬于標準 事件關鍵字(STAR
4、T-OF-SELECTION) ,與程序中 事件語句的 次序完全不 相干。SAP AG所有屬于某 一特定事件 關鍵字的語 句形成一個 處理塊。處 理塊是一個 在事件發(fā)生 時執(zhí)行的模塊。處理塊 內的程序流 依賴于定義的順 序處理。ABAP/4 程序常規(guī)結 構如下:控制。系統(tǒng) 按順序處理 語句,或按 照前面提到 的標準關鍵 字關于外部控 制的詳細信 息,如事件 及其如何與 ABAP/4 程序相互作 用的信息, 參見 C通過事件 控制 ABAP/4 程序流。該節(jié)說明如 何使用外部 控制控制處 理塊內的程 序流。要控制 ABAP/4 程序中的流,請遵 循結構化編 程原則并將 程序模塊劃 分為單個邏 輯
5、相關語句 塊(這些組 成控制結構 )。其中的 每個語句塊 都執(zhí)行務的一部分 ??梢杂?IF、CASE、 DO 和 WHILE 之類的關鍵 字控制處理 塊中不同語 句之間的程 序流。這些 語句允許編 制條件和無 條件的分支 和循環(huán)。條 件使用邏輯 表達式,可 以是真,也 可以為假。錯誤!未定義書簽。編程邏輯表 達式使用條件控 制程序中的流。要 用公式指定 條件,請使 用比較數(shù)據(jù) 字段的邏輯 表達式,如 下所示:語法. .該表達式比 較兩個字段 ??赡転檎?,也可能為 假。在帶關 鍵字 IF、 CHECK 和 WHILE 的條件語句 中使用邏輯 表達式。根據(jù)操作數(shù) 和 的數(shù)據(jù)類型 ,可以使用 不同
6、的邏輯 運算符。允 許進行:要使程序易 于閱讀,應 該縮排控制 結構中的語 句塊。出于 布局需要, 可以使用 ABAP/4 編輯器功能 “編輯 - 語句.” 和“程序 - 整齊打印程 序”(詳細 信息,參見 ABAP/4 程 序布局 (頁 26)。假設當用戶 選擇一行后 ,生成列表 且提供一些 細分設備的 報表程序必 須作出反應 (詳細信息 ,參見 交互列表)。需要為 該事件處理 的代碼必須 事件關 鍵字 ILECTION之后。AT LILECTION. MOVE X TO FLAG.無論何時用 戶通過單擊 鼠標或按 F2 鍵在列表中 選擇一個項 目時, ILECTION 和下一個事 件關鍵字
7、之 間的所有語 句將被處理SAP AG除上述比較 之外,還可 以執(zhí)試:試 以檢查數(shù)據(jù) 字段是否完 全滿足一定 條件。可以 使用這些測另外,可以 將幾個邏輯 表達式組合 為一個簡單 邏輯表達式 。錯誤!未定義書簽。比較所有的 字段類型要比較所有 的字段類型 ,可以在邏 輯表達式中 使用下列運 算符:操作數(shù)可以 是數(shù)據(jù)庫字 段、字 段、文字或 常數(shù)。除基本字段 外,還可以 將結構數(shù)據(jù) 類型和上表 中的運算符 結合起來作 為操作數(shù)。字段串逐個 組件進行比 較,嵌套的 結構分為基 本的字段。關于比較內 表的詳細信 息,參見 比較內表 (頁 Error!Not a valid link.) 。如果有意義
8、 ,可以對不 同數(shù)據(jù)類型 的字段進行 比較。如果 字段可轉換 ,就可以進 行比較。在 比較之前, 系統(tǒng)將按照 下列層次規(guī) 則執(zhí)行自動 類型轉換( 參見 鍵入轉換 (頁 636) ):1.2.3.如果 操作數(shù)之一 是浮點數(shù)( 類型 F),則系 統(tǒng)將其它操 作數(shù)轉換為 類型 F。 如果 操作數(shù)之一 是壓縮字段 (類型 P),則系 統(tǒng)將其它操 作數(shù)轉換為 類型 P。如果 操作數(shù)之一 是日期字段 (類型 D)或時間 字段(類型 T),則系 統(tǒng)將其它操 作數(shù)轉換為 類型 D 或 T。不支持 日期和時間 字段之間的 比較,這會 導致程序中 斷。如果 操作數(shù)之一 是字符字段 (類型 C)且其它 操作數(shù)是十
9、六進制字段 (類型 X),則系 統(tǒng)將類型 X 的操作數(shù)轉 換為類型 C。如果 操作數(shù)之一 是字符字段 (類型 C),其它 操作數(shù)為數(shù) 字字段(類 型 N),則系 統(tǒng)將這兩種 操作數(shù)都轉 換為類型 P。4.5.含 義EQ等于=等于NE不 等于不 等于不 等于LT小于 小于LE小 于等于大于GE大 于等于=大 于等于SAP AG錯誤!未定義書簽。比較字符串 和數(shù)字串要比較字符 串(類型 C)和數(shù)字 文本(類型 N),可以 在邏輯表達 式中使用下 列運算符。因為除類型 N 和 C 外,系統(tǒng)不 能執(zhí)行任何 其它類型轉 換,所以, 在進行包含 這些運算之 一的比較時 ,操作數(shù)應 該是類型 N 或 C。運
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 語句中使用 兩個邏輯表 達式。如果 邏輯表達式 為真,則屏 幕上顯示出
11、來。如果邏 輯表達式為 假,則將相 反表達式顯 示在屏幕上 。SAP AGCO (僅包含)如果 僅包含 中的字符, 則邏輯表達 式 CO 為真。該比 較區(qū)分大小 寫,并包括 尾部空格。 如果比較結 果為真,則 系統(tǒng)字段 SY-FD包括 的長度。如 果為假,則 SY-FD移量 。包含 中第一個未 在 內出現(xiàn)的字 符的偏CN (不僅包含 )如果 還包含 之外的其他 字符,則邏 輯表達式 CN 為真。該比 較區(qū)分大小 寫,并包括 尾部空格。 如果比較結 果為真,則 系統(tǒng)字段 SY-FD包含 中第一個未 同時在 中出現(xiàn)的字 符的偏移量 。如果為假 ,SY-FD長度。包含 的CA (包含任何 )如果 至
12、少包含 的一個字符 ,則邏輯表 達式 CA 為真。該比 較區(qū)分大小 寫。如果比 較結果為真 ,則系統(tǒng)字 段 SY-FD包含 中第一個也在 中出現(xiàn)的字 符的偏移量 。如果為假 ,SY-FD包含 的長度。NA (不包含任 何)如果 不包含 的任何字符 ,則邏輯表 達式 NA 為真。該比 較區(qū)分大小 寫。如果比 較結果為真 ,則系統(tǒng)字 段 SY-FD包含 的 長度。如果 為假,則 SY-FD包含 中在 內出現(xiàn)的第 一個字符的 偏移量。CS (包含字符 串)如果 包含字符串 , 則邏輯表達 式 CS 為真。忽略 尾部空格并 且比較不區(qū) 分大小寫。 如果比較結 果為真,則 系統(tǒng)字段 SY-FD包含 在
13、中的偏移量 。如果為假 ,SY-FD包含 的長度。NS (不包含字 符串)如果 不包含字符 串 , 則邏輯表達 式 NS 為真。忽略 尾部空格且 比較不區(qū)分 大小寫。如 果比較為真 ,系統(tǒng)字段 SY-FD包含 的長度。如 果為假,系 統(tǒng)字段 SY-FD包含 在 中的偏移量 。CP (包含模式 )如果 包含模式 , 則邏輯表達 式 CP 為真。如果 屬于類型 C,則可以 在 中使用下列 通配符:_* 用于任何字 符串+ 用于任何單 個字符SAP AG忽略尾部空 格且比較不 區(qū)分大小寫 。如果比較 結果為真, 系統(tǒng)字段 SY-FD包含 在 中的偏移量 。如果為假 ,SY-FD包含 的長度。如果要對
14、 中的特殊字 符進行比較 ,請將換碼 字符 # 放到其前面 ??梢允褂?換碼字符 # 指定_大小寫字 符通配符 *(輸入 #*)通配符 + (輸入 #+)換碼符號 本身 (輸入 #)字符串結 尾的空格 (輸入 # )NP (不包含模 式)如果 不包含模式 , 則邏輯表達 式 NP 為真。在中 ,可以使用 與 CP 相同的通配 符和換碼字 符。忽略尾部空 格且比較不 區(qū)分大小寫 。如果比較 結果為真, 則系統(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í)行 結果,取決 于所用的運 算符和 F1 / F2 字段。SAP AG錯誤!未定義書簽。二進制
16、位結 構的比較要將邏輯表 達式初始操 作數(shù)第一字 節(jié)的二進制 位結構與第 二操作數(shù)的 進行比較, 請使用下列操作符。第二 操作數(shù)的長 度應為一個 字節(jié)。沒有必要對 第二操作數(shù) 使用長度為 1 的十六進制 字段(類型 X),但卻 較方便,因 為其長度為 一個字節(jié)且 數(shù)字值直接 與二進制位 結構相關。操作符功能 如下:O (二進制位 是 1)如果 中二進制位 是 1 的位置,在 中是 1,則邏輯 表達式 O 為真。Z (二進制位 是0)如果 中二進制位 是 1 的位置,在 中是 0,則邏輯 表達式 Z 為真。M (混合二進 制位)如果從 中二進制位 是 1 的位置起, 中至少一個 是 1,一個是
17、0,則邏輯 表達式 M 為真。DATA: C VALUE C, HEXDEC TYPE X, I TYPE I.含 義O二進制 位是 1Z二進制 位是 0M混合二 進制位ABcdeCP*b*真1ABcdeCP*#b*假5ABcdeNP*b*假1ABcdeNP*#b*真5SAP AG進制進制二進制 位結構00000000011000000010220000001003300000011406401000000416501000001426601000010436701000011字 符C的 二進制位結 構由其 ASCII 碼 67 為當前硬件進行定 義。與用戶 看到的一樣 ,列表輸出 中出現(xiàn)的數(shù)
18、 字,填寫 1 的二進制位 位置與 67 的二進制位 結構一樣。HEXDEC = 0.DO 256 TIMES. I = HEXDEC.IF C O HEXDEC.WRITE: / HEXDEC, I. ENDIF.HEXDEC = HEXDEC + 1.ENDDO.產(chǎn)生下列輸 出:0000110220334064416542664367這里,使用 運算符 O 將字符C 的二進制位 結構與所有 0與 FF(10 進制為 255)之 間的 16 進制數(shù)進行 比較。HEXDEC 的10 進制值 I ,在HEXDEC 分配到I 期間,通過 使用自動類 型轉換確定 。如果比較 結果為真, 則在屏幕上
19、顯式 進制數(shù)及其 進制值。下表列出這些 數(shù)的二進制 位結構。SAP AG錯誤!未定義書簽。檢查字段是 否屬于某一 范圍要檢查值是 否屬于特定 范圍,請使 用下列帶有 BETN 參數(shù)的邏輯 表達式:語法. BETN AND .如果 在 和 之間的范圍 內發(fā)生,則 表達式為真 。它是下列 邏輯表達式 的短格式:IF GE AND LE .錯誤!未定義書簽。檢查初始值要檢查字段 是否設置為 初始值,請 如下使用帶 有 IS INITIAL 參數(shù)的邏輯 表達式。語法. IS INITIAL .如果 包含本身類 型的初始值 ,則表達式 為真。通常 情況下,任 何字段,基 本的或結構 化的(字符 串和內表
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 的內容在 3 和 7 之間出現(xiàn), 字段 FLAG 設置為“X” 。 SAP AG錯誤!未定義書簽。檢查選擇條 件要檢查字段 內容是否與 選擇表中的 選擇條件匹 配,可以如 下使用帶有 IN 參數(shù)的邏輯 表達式:語法. IN .如果字段 內容的符合 選擇表 中的條件, 則表達式為 真。關于選擇條 件的詳細信 息,參見 使用選擇標準。關于邏輯表 達式中檢查 選擇條件的 詳細信息, 包括示例, 參見 使用邏輯表達式中的選擇表。錯誤!未定義書簽。組合幾個邏 輯表達式通過使用邏 輯連接運算 符 AND、OR 和 NOT,可 以將幾個邏 輯表達式組 合為單個表 達式:_要將幾個 邏輯表達式 組合為單
22、個 表達式,且 該表達式僅 當所有組件 表達式為真 時才為真,則表達式之 間要用 AND 連接。要將幾個 邏輯表達式 組合為單個 表達式,且 只要其中一 個組件表達 式為真時, 該表達式即為真,則表 達式之間要 用 OR 連接。要轉化邏 輯表達式的 結果,請在 其前面指定 NOT。_NOT 優(yōu)先于 AND,AND 優(yōu)先于 OR。但是 ,可以用任 何括弧組合 指定處理順 序。由于 ABAP/4將括弧解釋 為單字,前 面或后面必 須至少有一 個空格。ABAP/4 從左到右處 理邏輯表達 式。如果確 定組件表達 式之一是真 或假,就不 再執(zhí)行該組 件中其余的 比較或檢查 。這意味著 采取這種方 法組
23、織邏輯 表達式可以 提高性能, 就是將經(jīng)常 為假的比較 放置在 AND 鏈的開頭, 而將費時的 比較,如字 符串查找放 等到最后。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 不包含初始 值,因為用 VALUE 參數(shù)設置為 X。執(zhí) 行 CLEAR 語句之后, 將其重置為 初始值。SAP AG錯誤!未定義書簽。編程分支和 循環(huán)可以在程序 中定義條件 和無條件分 支和循環(huán)。 為此,ABAP/4 提供了幾個 在下列語 句。分支循環(huán)中描述的錯誤!未定義書簽。使用 IF 的條件分支IF 語句允許依 據(jù)條件將程 序流轉到特 定的語句塊 中。該語句 塊包括 IF 語句
25、及其后 面的ELSEIF、 ELSE 或 ENDIF 之間的所有 命令。語法IF.EIFs EIFs.E.s ENDIF. ement block. ement blockement block如果第一個 條件是真, 系統(tǒng)將執(zhí)行 所有語句直 到第一個語 句塊結束, 然后繼續(xù)處 理 ENDIF 語句之后的 程序。要采 用選擇性條 件,可以使 用 ELSEIF 語句。如果 第一個條件 是假,系統(tǒng) 使用與 IF 語句一樣的 方式處理后 面的 ELSEIF 語句。如果 IF 或 ELSEIF 條件都為假 ,則執(zhí)行 ELSE 開始的語句 塊。最后的 語句塊必須 用 ENDIF 結束。要用公式表 達 IF
26、 和 ELSEIF 語句中的條 件,可以使 用任何 編程邏輯表 達式 (頁 錯誤!未定義書簽。) 描述的邏輯 表達式。DATA: TEXT1(30) VALUE This is thetext, TEXT2(30) VALUE This is the second text,ABAP/4 允許無限地 嵌套 IF - ENDIF 語句塊,但 是必須在相 同的處理塊 中終止。換 句話說,就是 IF - ENDIF 塊不能包含 事件關鍵字 。下列邏輯表達式為真:( 456 ge 123 ) OR ( 123 le 1.000000000000000E+02 )在本例中, 在 IF 語句中使用 邏輯表
27、達式 。如果邏輯 表達式為真 ,則將其在 屏幕上顯示 出來。如果 為假,則屏 幕上出現(xiàn)相 反的表達式 。SAP AG錯誤!未定義書簽。使用 CASE 的條件分支要根據(jù)特殊 數(shù)據(jù)字段的 內容執(zhí)行不 同的語句塊 ,可以如下 使用 CASE 語句:語法CASE .WHEN .sement WHEN .sement WHEN .sement WHEN .WHEN OTHERS.blockblockblock系統(tǒng)執(zhí)行 WHEN 語句之后的 語句塊,如 果 內容等于的內容,且 繼續(xù)處理 ENDCASE語句后面的 語句。如果 的內容不等 于的內容,則 執(zhí)行選項 WHEN OTHERS 后面的語句 塊。最后的
28、 語句塊必須 用 ENDCASE 結束。使用 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.這里,第二 個邏輯表達 式 TEXT2 CS STRING 是真,因為 字符串“eco” 存在于 TEXT2 中。SAP AG錯誤!未定義書簽。使用 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 引導、ENDDO 結束的語句 塊(參見 終止循環(huán) (頁 錯誤!未定義書簽。) )??梢允褂?TIMES 選項限制循 環(huán)次數(shù)。 可以是文字 或變量。如 果 是 0 或負數(shù),系 統(tǒng)不執(zhí)行該 循環(huán)。系統(tǒng)字段 SY-INDEX 中包含已處 理過的循環(huán) 次數(shù)。使用 DO 語句時要避 免死循環(huán)。 如果不使用 TIMES 選項,則在 語句塊中至 少應包含一 個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 后面的語句 塊,因為 STRING 的內容“A” 不等于“X” 、“Y”或 “Z”,。在 ABAP/4 中,可以嵌
32、套 CASE - ENDCASE 塊,且可以 與 IF - ENDIF 結合使用, 但必須在同 一處理塊中 終止。SAP AG可以任意嵌 套 DO 循環(huán),也可 以與其他循 環(huán)組合使用 ??梢允褂?VARYING 選項在每次 循環(huán)中給變 量 重新賦值。 、 、 、 . 必需是內存 中類型相同 和長度相等 的一系列等 距字段。第 一次循環(huán)中 ,將 分配給 ,第 二次循環(huán)中 ,將 分配給 ,以 此類推???以在一個 DO 語句中使用 多個 VARYING 選項。如果在 DO 循環(huán)中改變 控制變量 ,則 系統(tǒng)將自動 改變相應的 字段。應保證循環(huán) 次數(shù)不超過 涉及到的變 量 、 、 的數(shù)量。本例顯示 2
33、 個嵌套循環(huán) ,都使用 TIMES 選項。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) 時循 環(huán)都執(zhí)行 3 次。注意系 統(tǒng)字段 SY-INDEX每個循 環(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錯誤!未定
34、義書簽。使用 WHILE 的條件循環(huán)如果只要條 件為真,就 不止一次執(zhí) 行語句,可 以如下使用 WHILE 語句編程:語法WHILE VARY FROM NEXT . ENDWHILE.只要 是真,或系 統(tǒng)發(fā)現(xiàn) EXIT、 STOP 或 REJECT 語句,系統(tǒng) 將繼續(xù)執(zhí)行 由 WHILE語句引導、 ENDWHILE 結束的語句 塊(參見 終止循環(huán) (頁 錯誤!未定義書簽。) )。對于 , 可以使用 編程邏輯表 達式 (頁 錯誤!未定義書簽。) 中描述的任 何邏輯表達 式。系統(tǒng)字段 SY-INDEX 中包含已執(zhí) 行的循環(huán)次 數(shù)。可以任意嵌 套 WHILE 循環(huán),也可 與其他循環(huán) 結合使用。WH
35、ILE 語句的 VARY 選項與 DO 循環(huán)的 VARYING 選項工作方 式一樣(參 見使用 DO 的無條件循 環(huán) (頁 錯誤!未定義書簽。) )。允許 每次執(zhí)行循 環(huán)時為變量 重新賦值。、 . 必需是內存 中類型相同 和長度相等 的一系列等 距字段。第 一次循環(huán)時 ,將 分配給 ,第 二次循環(huán)時 ,將 分配給 ,以 此類推???以在一個 WHILE 語句中使用 多個 VARY 選項。該示例說明 如何在 DO 循環(huán)中使用 VARYING 選項。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 代表內存中 四個等距字 段序列。每 次執(zhí)行第一 個 DO 循環(huán)時,都 依次將其組件分配到 STRING1 中。如果 STRING1 包含“is” ,則將其改 變?yōu)椤皐as” ,而且自動 將 TEXT-WORD2 改變?yōu)椤皐as”。每次執(zhí)行 第二個 DO 循環(huán)時,將 TEXT 的組件傳遞 給STRING1和 STRING2。SAP AG錯誤!未定義書簽。終止循環(huán)要終止循環(huán) 過程,請使 用下列關鍵 字之一。關 鍵字用途無 條件 終止 循環(huán) 過程 (頁錯誤!未 定
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)時,都將 字符串 一位,直到 僅包含空格 。選擇本例 主要是為了 說明 WHILE 語句。但是 ,確定字符 串長度更簡 便和有效的 辦法是通過 使用內置的 函數(shù) STRLEN, 這在示例中 也可看出。使用 WHILE 語句要避免 死循環(huán)。請 記住,在一 段時間之后 ,WHILE 語句條件應 變?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),用于 處理內表( 參見 循環(huán)處理 (頁 Error! Not a valid link.) )。_SELECT - ENDSELECT 循環(huán),用于 從數(shù)據(jù)表中( 參見 從幾行選擇所有數(shù)據(jù))。數(shù)據(jù)錯誤!未定義書簽。無條件終止 循環(huán)過程要立即無條 件終止循環(huán) ,請如下使 用 CONTINUE 語句:語法CONTINUE.在CONTINUE 語句之后, 系統(tǒ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)外 還可使用關 鍵字 CHECK 和 EXIT, 分別完成不 同的功能。 例如,可以 終止子程序 或整個程序 塊。關于 CHECK 和 EXIT 語句及其如 何在循環(huán)外 使用的詳細 信息,參見終止子系統(tǒng) 和 終止處理塊 。錯誤!未 定義 書簽。)CHEC K完 全終 止循 環(huán) (頁 錯誤!未定 義書簽。EXIT)SAP AG錯誤!未定義書簽。有條件終止 循環(huán)過程要有條件終 止循環(huán)過程 ,請如下使 用 CHECK 語句:語法CHECK .如果條件是
42、假,系統(tǒng)跳 過當前語句 塊中所有剩 余語句塊, 繼續(xù)后面的 循環(huán)過程。 對于, 可使用 編程邏輯表 達式 (頁 錯誤!未定義書簽。) 中描述的任 何邏輯表達 式。錯誤!未定義書簽。完全終止循 環(huán)要無條件完 全終止循環(huán) ,請如下使 用 EXIT 語句:語法EXIT.EXIT 語句之后, 系統(tǒng)立即退 出循環(huán),繼 續(xù)結束語句 (ENDDO、 ENDWHILE、 ENDSELECT)后 面 的處理。 在嵌套循環(huán) 中,系統(tǒng)僅 退出當前循 環(huán)。DO 4 TIMES.IF SY-INDEX = 3.EXIT. ENDIF.WRITE SY-INDEX. ENDDO.產(chǎn)生如下輸 出:12此處系統(tǒng)不 處理 WR
43、ITE 語句或第四 個循環(huán)過程 ,就在第三 個循環(huán)過程 中完全終止 循環(huán)。DO 4 TIMES.CHECK SY-INDEX BETN 2 and 3. WRITE SY-INDEX.ENDDO.產(chǎn)生如下輸 出:23此處系統(tǒng)不 處理 WRITE 語句就終止 第一個和第 四個循環(huán),因為 SY-INDEX 不在 2 和 3 之間。SAP AG 8:概覽內容ABAP/4中 流控制的概 念.編程邏輯表 達式.比較所有的 字段類型.比較字符串 和數(shù)字串.二進制位結 構的比較.檢查字段是 否屬于某一 范圍.檢查初始值.檢查選擇條 件.組合幾個邏 輯表達式.編程分支和 循環(huán).使用 IF 的條件分支.使用 C
44、ASE 的條件分支.使用 DO 的無條件循 環(huán).使用 WHILE 的條件循環(huán).終止循環(huán).要根據(jù)一定 條件執(zhí)行程 序組件,或 要將重復語 句序列組合 在循環(huán)中, 可以使用 ABAP/4 提供的用于 控制程序流 的標準關鍵 字。ABAP/4 也包含重要 的附加特征 。ABAP/4 程序流可以控制和 外部控制。ABAP/4 程序流的控制和外 部控制之間 的差別在ABAP/4中 流控制的概念 (頁本節(jié)主要錯誤!未定義書簽。)中 解釋。流控 制。為此, 可使用其他 編程語言( 例如,C、 FORTRAN、 PASCAL 等等)中熟 悉的標準控 制關鍵字。下列描 述錯誤!未定義書簽。ABAP/4中 流控制
45、的概 念與其他高級 編程語言一 樣(如,C、 FORTRAN 和 PASCAL 等等),ABAP/4 提供也用于 控制程序流 的標準關鍵 字。這些關 鍵字用于_分支 (IF、CASE)循環(huán) (DO、WHILE)然而,ABAP/4 與其他編程 語言不同之 處在于其具 有程序流的控制和 外部控制。_控制 由上述標準 關鍵字引導 。在程序代 碼中對其進 行定義。外部控制 由事件引導 。事件由 ABAP/4 程序(系統(tǒng) 程序或用戶 程序)或者 交互式用戶 輸入(例如 ,使用鼠標 在屏幕上單 擊)生成。 系統(tǒng)不必按 ABAP/4 程序中列出 的順序對進 行語ABAP/4的Visual Basic。句處理
46、 。這使得成為事件驅 動編程語言 ,類似于時間事件和 ABAP/4 程序的連接 由事件關鍵 字提供。ABAP/4 程序中的每 個語句都屬 于特別的事 件關鍵字。即使在程序 中沒有指定 任何事件關 鍵字,所有 語句都自動 歸屬于標準 事件關鍵字 (START-OF-SELECTION) ,與程序中 事件語句的 次序完全不 相干。所有屬于某 一特定事件 關鍵字的語 句形成一個 處理塊。處 理塊是一個 在事件發(fā)生 時執(zhí)行的模 塊。處理塊 內的程序流 依賴于 控制。系統(tǒng) 按順序處理 語句,或按 照前面提到 的標準關鍵 字定義的順 序處理。ABAP/4程序常規(guī)結 構如下:SAP AGSAP AG操作數(shù)可
47、以 是數(shù)據(jù)庫字 段、字 段、文字或 常數(shù)。除基本字段 外,還可以 將結構數(shù)據(jù) 類型和上表 中的運算符 結合起來作 為操作數(shù)。 字段串逐個 組件進行比 較,嵌套的 結構分為基 本的字段。 關于比較內 表的詳細信 息,參見 比較內表 (頁Error! Not a valid link.)。如果有意義 ,可以對不 同數(shù)據(jù)類型 的字段進行 比較。如果 字段可轉換 ,就可以進 行比較。在 比較之前, 系統(tǒng)將按照 下列層次規(guī) 則執(zhí)行自動 類型轉換( 參見 鍵入轉換 (頁 636) ):1.2.3.如果 操作數(shù)之一 是浮點數(shù)( 類型 F),則系 統(tǒng)將其它操 作數(shù)轉換為 類型 F。 如果 操作數(shù)之一 是壓縮字
48、段 (類型 P),則系 統(tǒng)將其它操 作數(shù)轉換為 類型 P。如果 操作數(shù)之一 是日期字段 (類型 D)或時間 字段(類型 T),則系 統(tǒng)將其它操 作數(shù)轉換D或 T。不支持 日期和時間 字段之間的 比較,這會 導致程序中 斷。為 類型4.如果 操作數(shù)之一 是字符字段 (類型 C)且其它 操作數(shù)是十 六進制字段 (類型 X),則系 統(tǒng)將類型 X 的操作數(shù)轉 換為類型 C。如果 操作數(shù)之一 是字符字段 (類型 C),其它 操作數(shù)為數(shù) 字字段(類 型 N),則系 統(tǒng)將這兩種 操作數(shù)都轉 換為類型 P。5.不 等于LT小 于小于LE小 于等于大于GE大 于等于=大 于等于SAP AG錯誤!未定義書簽。比較
49、字符串 和數(shù)字串要比較字符 串(類型 C)和數(shù)字 文本(類型 N),可以 在邏輯表達 式中使用下 列運算符。因為除類型 N 和 C 外,系統(tǒng)不 能執(zhí)行任何 其它類型轉 換,所以, 在進行包含 這些運算之 一的比較時 ,操作數(shù)應 該是類型 N 或 C。運算符的功 能如下:CO (僅包含)如果 僅包含 中的字符, 則邏輯表達 式 CO 為真。該比 較區(qū)分大小 寫,并包括 尾部空格。 如果比較結 果為真,則 系統(tǒng)字段 SY-FD包括 的長度。如 果為假,則 SY-FD包含 中第一個未 在 內出現(xiàn)的字 符的偏移量 。CN (不僅包含 )如果 還包含 之外的其他 字符,則邏 輯表達式 CN 為真。該比
50、較區(qū)分大小 寫,并包括 尾部空格。 如果比較結 果為真,則 系統(tǒng)字段 SY-FD包含 中第一個未 同時在 中出現(xiàn)的字 符的偏移量 。如果為假 ,SY-FD包含 的長度。CA (包含任何 )如果 至少包含 的一個字符 ,則邏輯表 達式 CA 為真。該比 較區(qū)分大小 寫。如果比 較結果為真 ,則系統(tǒng)字 段 SY-FD包含 中第一個也 在 中出現(xiàn)的字 符的偏移量 。如果為假 ,SY-FD包含 的長度。NA (不包含任 何)如果 不包含 的任何字符 ,則邏輯表 達式 NA 為真。該比 較區(qū)分大小 寫。如果比 較結果為真 ,則系統(tǒng)字 段 SY-FD SY-FD包含 中在 內出現(xiàn)的第 一個字符的 偏移量。
51、包含 的 長度。如果 為假,則CS (包含字符 串)如果 包含字符串 , 則邏輯表達 式 CS 含 義CO僅包 含CN不僅 包含CA包 含任何NA不 包含任何CS包 含字符串NS不 包含字符串CP包含模 式NP不包 含模式這里,在 IF 語句中使用 兩個邏輯表 達式。如果 邏輯表達式 為真,則屏 幕上顯示出 來。如果邏 輯表達式為 假,則將相 反表達式顯 示在屏幕上 。SAP AG為真。忽略 尾部空格并 且比較不區(qū) 分大小寫。如果比較結 果為真,則 系統(tǒng)字段 SY-FD包含 在 中的偏移量 。如果為假 ,SY-FD包含 的長度。NS (不包含字 符串)如果 不包含字符 串 , 則邏輯表達 式
52、NS 為真。忽略 尾部空格且 比較不區(qū)分 大小寫。如 果比較為真 ,系統(tǒng)字段 SY-FD包含 的長度。如 果為假,系 統(tǒng)字段 SY-FD包含 在 中的偏移量 。CP (包含模式 )如果 包含模式 , 則邏輯表達 式 CP 為真。如果 屬于類型 C,則可以 在 中使用下列 通配符:_* 用于任何字 符串_+ 用于任何單 個字符忽略尾部空 格且比較不 區(qū)分大小寫 。如果比較 結果為真, 系統(tǒng)字段 SY-FD包含 在 中的偏移量 。如果為假 ,SY-FD包含 的長度。如果要對 中的特殊字 符進行比較 ,請將換碼 字符 # 放到其前面 ??梢允褂?換碼字符 # 指定_大小寫字 符通配符 *(輸 入 #
53、*)通配符 + (輸入 #+)換碼符號 本身 (輸入 #)字符串結 尾的空格 (輸入 # )NP (不包含模 式)如果 不包含模式 , 則邏輯表達 式 NP 為真。在中 ,可以使用 與 CP 相同的通配 符和換碼字 符。忽略尾部空 格且比較不 區(qū)分大小寫 。如果比較 結果為真, 則系統(tǒng)字段 SY-FD包含 . 的長度,如 果為假,SY-FD包含 在 中的偏移量 。SAP AG錯誤!未定義書簽。二進制位結 構的比較要將邏輯表 達式初始操 作數(shù)第一字 節(jié)的二進制 位結構與第 二操作數(shù)的 進行比較, 請使用下列 操作符。第二 操作數(shù)的長 度應為一個 字節(jié)。沒有必要對 第二操作數(shù) 使用長度為 1 的十
54、六進制 字段(類型 X),但卻 較方便,因 為其長度為 一個字節(jié)且 數(shù)字值直接 與二進制位 結構相關。操作符功能 如下:O (二進制位 是 1)如果 中二進制位 是 1 的位置,在 中是 1,則邏輯 表達式 O 為真。Z (二進制位 是0)如果 中二進制位 是 1 的位置,在 中是 0,則邏輯 表達式 Z 為真。M (混合二進 制位)如果從 中二進制位 是 1 的位置起, 中至少一個 是 1,一個是 0,則邏輯 表達式 M 為真。含 義O二進制 位是 1Z二進制 位是 0M混合二 進制位ABcdeCAbD假5ABAB NAAB假0ababaNAAB真5ABcdeCSbC真1ABcdeCSce假
55、5ABcdeNSbC假1ABcdece真5ABcdeCP*b*真1ABcdeCP*#b*假5ABcdeNP*b*假1ABcdeNP*#b*真5SAP AGSAP AG錯誤!未定義書簽。檢查字段是 否屬于某一 范圍要檢查值是 否屬于特定 范圍,請使 用下列帶有 BETN 參數(shù)的邏輯 表達式:語法. BETN AND .如果 在 和 之間的范圍 內發(fā)生,則 表達式為真 。它是下列 邏輯表達式 的短格式:IF GE AND LE .字 符C的 二進制位結 構由其 ASCII 碼 67 為當前硬件進行定 義。與用戶 看到的一樣 ,列表輸出 中出現(xiàn)的數(shù) 字,填寫 1 的二進制位 位置與 67 的二進制位
56、 結構一樣。SAP AG錯誤!未定義書簽。檢查選擇條 件要檢查字段 內容是否與 選擇表中的 選擇條件匹 配,可以如 下使用帶有 IN 參數(shù)的邏輯 表達式:語法. IN .如果字段 內容的符合 選擇表 中的條件, 則表達式為 真。關于選擇條 件的詳細信 息,參見 使用選擇標準。關于邏輯表 達式中檢查 選擇條件的 詳細信息, 包括示例, 參見 使用邏輯表達式中的選擇表。錯誤!未定義書簽。組合幾個邏 輯表達式通過使用邏 輯連接運算 符 AND、OR 和 NOT,可 以將幾個邏 輯表達式組 合為單個表 達式:_要將幾個 邏輯表達式 組合為單個 表達式,且 該表達式僅 當所有組件 表達式為真 時才為真,
57、則表達式之 間要用 AND 連接。要將幾個 邏輯表達式 組合為單個 表達式,且 只要其中一 個組件表達 式為真時, 該表達式即為真,則表 達式之間要 用 OR 連接。_要轉化邏 輯表達式的 結果,請在 其前面指定 NOT。NOT 優(yōu)先于 AND,AND 優(yōu)先于 OR。但是 ,可以用任 何括弧組合 指定處理順 序。由于 ABAP/4 將括弧解釋 為單字,前 面或后面必 須至少有一 個空格。ABAP/4 從左到右處 理邏輯表達 式。如果確 定組件表達 式之一是真 或假,就不 再執(zhí)行該組 件中其余的 比較比較 放置在 AND 鏈的或檢查 。這意味著 采取這種方 法組織邏輯 表達式可以 提高性能, 就
58、是將經(jīng)常 為開頭, 而將費時的 比較,如字 符串查找放 等到最后。ELSE.WRITE / Flag is not initial.ENDIF.這產(chǎn)生如下 輸出: Flag is not initial Flag is initial.這里,DATA 語句之后, 字符串 FLAG 不包含初始 值,因為用 VALUE 參數(shù)設置為 X。執(zhí) 行 CLEAR 語句之后, 將其重置為 初始值。SAP AG錯誤!未定義書簽。編程分支和 循環(huán)可以在程序 中定義條件 和無條件分 支和循環(huán)。 為此,ABAP/4 提供了幾個 在下列中描述的語 句。分支循環(huán)錯誤!未定義書簽。使用 IF 的條件分支IF 語句允許依
59、據(jù)條件將程 序流轉到特 定的語句塊 中。該語句 塊包括 IF 語句及其后 面的 ELSEIF、 ELSE 或ENDIF 之間的所有 命令。語法.IFELSEIF. ement block. ement blocks ELSEIFs. ELSE.ENDIF.如果第一個 條件是真, 系統(tǒng)將執(zhí)行 所有語句直 到第一個語 句塊結束, 然后繼續(xù)處 理 ENDIF 語句之后的 程序。要采 用選擇性條 件,可以使 用 ELSEIF 語句。如果 第一個條件 是假,系統(tǒng) 使用與 IF 語句一樣的 方式處理后 面的 ELSEIF 語句。如果 IF 或 ELSEIF 條件都為假 ,則執(zhí)行 ELSE 開始的語句 塊。
60、最后的 語句塊必須 用 ENDIF 結束。要用公式表 達 IF 和 ELSEIF 語句中的條 件,可以使 用任何 編程邏輯表 達式 (頁 8) 描述的邏輯 表達 式。在本例中, 在 IF 語句中使用 邏輯表達式 。如果邏輯 表達式為真 ,則將其在 屏幕上顯示 出來。如果 為假,則屏 幕上出現(xiàn)相 反的表達式 。SAP AG錯誤!未定義書簽。使用 CASE 的條件分支要根據(jù)特殊 數(shù)據(jù)字段的 內容執(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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 居民區(qū)菜場租賃合同
- 商業(yè)綜合體力工施工合同
- 個性化定制相機租賃協(xié)議
- 信息技術部門績效評估
- 證券控股子公司投資決策流程
- 餐飲行業(yè)員工培訓會議指南
- 通信公司不動產(chǎn)管理方案
- 協(xié)調部危機應對機制
- 建筑工程財務報告編制合同模板
- 展覽館改造物業(yè)合同
- 佛教協(xié)會管理制度
- 江蘇科技大學高等數(shù)學期末考試試卷(含答案)
- 英語介紹家鄉(xiāng)省份江西
- 建設工程見證取樣管理規(guī)范
- 中國成人血脂異常防治指南解讀
- 醫(yī)學專家談靈芝孢子粉課件
- 彈性力學19年 吳家龍版學習通超星課后章節(jié)答案期末考試題庫2023年
- 有沒有租學位的協(xié)議書
- 住宅小區(qū)綠化管理規(guī)定
- 土建工程定額計價之建筑工程定額
- 2022年7月云南省普通高中學業(yè)水平考試物理含答案
評論
0/150
提交評論