版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 SAP ABAP基本語法概述目 錄 TOC o 1-2 h z HYPERLINK l _Toc38914022 1ABAP基礎(chǔ) PAGEREF _Toc38914022 h 3 HYPERLINK l _Toc38914023 1.1創(chuàng)建簡(jiǎn)單的ABAP程序 PAGEREF _Toc38914023 h 3 HYPERLINK l _Toc38914024 1.2ABAP程序幫助 PAGEREF _Toc38914024 h 7 HYPERLINK l _Toc38914025 1.3ABAP語法和程序格式 PAGEREF _Toc38914025 h 8 HYPERLINK l _Toc3
2、8914026 1.4輸出數(shù)據(jù)到屏幕 PAGEREF _Toc38914026 h 11 HYPERLINK l _Toc38914027 1.5賦值 PAGEREF _Toc38914027 h 13 HYPERLINK l _Toc38914028 1.6運(yùn)算符及函數(shù) PAGEREF _Toc38914028 h 17 HYPERLINK l _Toc38914029 1.7流控制 PAGEREF _Toc38914029 h 18 HYPERLINK l _Toc38914030 1.8注釋結(jié)構(gòu) PAGEREF _Toc38914030 h 21 HYPERLINK l _Toc3891
3、4031 2內(nèi)表 PAGEREF _Toc38914031 h 21 HYPERLINK l _Toc38914032 2.1內(nèi)表索引 PAGEREF _Toc38914032 h 21 HYPERLINK l _Toc38914033 2.2訪問內(nèi)表 PAGEREF _Toc38914033 h 21 HYPERLINK l _Toc38914034 2.3內(nèi)表的聲明 PAGEREF _Toc38914034 h 23 HYPERLINK l _Toc38914035 2.4內(nèi)表的使用 PAGEREF _Toc38914035 h 25 HYPERLINK l _Toc38914036 3S
4、QL指令 PAGEREF _Toc38914036 h 33 HYPERLINK l _Toc38914037 3.1SELECT指令 PAGEREF _Toc38914037 h 33 HYPERLINK l _Toc38914038 3.2INSERT指令 PAGEREF _Toc38914038 h 36 HYPERLINK l _Toc38914039 3.3UPDATE指令 PAGEREF _Toc38914039 h 37 HYPERLINK l _Toc38914040 3.4MODIFY指令 PAGEREF _Toc38914040 h 37 HYPERLINK l _Toc3
5、8914041 3.5DELETE指令 PAGEREF _Toc38914041 h 37 HYPERLINK l _Toc38914042 3.6數(shù)據(jù)庫(kù)指針 PAGEREF _Toc38914042 h 38 HYPERLINK l _Toc38914043 4數(shù)據(jù)庫(kù) PAGEREF _Toc38914043 h 39 HYPERLINK l _Toc38914044 4.1數(shù)據(jù)庫(kù)數(shù)據(jù)的選取、更新、刪除、插入 PAGEREF _Toc38914044 h 39 HYPERLINK l _Toc38914045 4.2數(shù)據(jù)庫(kù)的事務(wù) PAGEREF _Toc38914045 h 40 HYPER
6、LINK l _Toc38914046 4.3SE16檢查表的內(nèi)容 PAGEREF _Toc38914046 h 40 HYPERLINK l _Toc38914047 4.4SE11定義表結(jié)構(gòu) PAGEREF _Toc38914047 h 43 HYPERLINK l _Toc38914048 4.5檢查數(shù)據(jù)表是否鎖定 PAGEREF _Toc38914048 h 46ABAP基礎(chǔ)創(chuàng)建簡(jiǎn)單的ABAP程序在上述界面中輸入SE38鍵入回車進(jìn)入ABAP編輯器界面,如圖1-1所示。功能操作區(qū)編輯、查看、創(chuàng)建選項(xiàng)區(qū)ABAP程序名圖1-1創(chuàng)建程序名稱時(shí)請(qǐng)遵守這些命名約定:報(bào)表程序(以列表格式輸出數(shù)據(jù)分析
7、):Yaxxxxxx 或 Zaxxxxxx。用應(yīng)用程序區(qū)的分類字母替換 a。用任何有效字符替換 x 。注意SAP報(bào)表程序遵守相似的命名約定:Raxxxxxx。任何其它ABAP/4 程序(培訓(xùn)程序或事務(wù)程序): SAPMYxxx 或SAPMZxxx。用有效字符替換x。注意標(biāo)準(zhǔn)SAPABAP/4 程序遵守相似的命名約定:SAPMaxxx,其中a代表某應(yīng)用程序區(qū)。輸入程序名,點(diǎn)擊創(chuàng)建,則進(jìn)入以下界面,如圖1-2所示。圖1-2Title:程序描述或功能說明,Report時(shí)為顯示的標(biāo)題。Type: Execute mode: 1(Stand-along Program 如Reports)、I(Inclu
8、de Program)、 M(Module Pool)、F(Function Group)、S(Subroutine Pool)。Status: Program development status: P (SAP standard production program)、K (Customer production program)、S(System program)、T(Test program)。Application: 程序所屬的application module, 如F表 Financial accountingDevelopment class: 用于同一系統(tǒng)中各個(gè)program
9、, 如果不屬任一class(開發(fā)類), 可使用$TMP,如圖1-3所示。保存輸入$TMP點(diǎn)擊保存或者點(diǎn)擊下面的本地對(duì)象則保存到本地圖1-3保存后會(huì)進(jìn)入程序的編輯界面,在里面輸入ABAP代碼即可,代碼中每一行最后要有一個(gè)語句結(jié)束符.,空格為分隔符選擇如圖,可進(jìn)入文本編輯,如圖1-4所示。代碼編輯區(qū)圖1-4選擇界面上的文本圖1-5運(yùn)行結(jié)果:完成程序后,進(jìn)行擴(kuò)張檢查(事務(wù)代碼SLIN),如圖1-6所示。選擇標(biāo)準(zhǔn)執(zhí)行要檢查的程序名圖1-6運(yùn)行后,出現(xiàn)以下界面,如圖1-7所示。圖1-7ABAP程序幫助在程序處選需要的內(nèi)容后,按F1鍵,如圖1-8所示。樣例庫(kù)選所需內(nèi)容查看幫助內(nèi)容圖1-8雙擊樣例庫(kù),進(jìn)入以
10、下界面,如圖1-9所示。查看樣例程序圖1-9樣例程序代碼圖1-10ABAP語法和程序格式1、語句結(jié)構(gòu)2、ABAP數(shù)據(jù)元素ABAP的數(shù)據(jù)形態(tài),如表1-1所示。類型長(zhǎng)度范圍初始值描述C11-65535ByteSpace字符串?dāng)?shù)據(jù), 如ProgramD88Byte00000000日期數(shù)據(jù), 格式為YYYYMMDDF88Byte0浮點(diǎn)數(shù)I4-231至231-10整數(shù)N11-65535Byte000數(shù)值所組成的字符串 P81-16Byte0Packed 數(shù), 用在小數(shù)點(diǎn)數(shù)T66Byte000000時(shí)間數(shù)據(jù), 格式為HHMMSSX11-65535ByteX0016進(jìn)位數(shù)表1-13、變量聲明變量聲明包含na
11、me,type,length和structure四個(gè)部分,用于變量聲明的有如下指令:data、type、like、statics、tables(同時(shí)聲明多個(gè)變量的時(shí)候,data、statics和tables后面加冒號(hào),各變量之間用逗號(hào)隔開)type語句:用來指定數(shù)據(jù)形態(tài)或聲明自定義數(shù)據(jù)形態(tài),定義數(shù)據(jù)類型,語法如下:TYPES .TYPE |LIKE Example:TYPES: BEGIN OF TY_TAB, NAME(10) TYPE C, NUMBER1 TYPE I, NUMBER2 TYPE P DECIMALS 2, END OF TY_TAB.DATA: WA_TAB TYPE
12、TY_TAB, IT_TAB TYPE TABLE OF TY_TAB.like語句:與type類似,不同的是like用在已有值的數(shù)據(jù)項(xiàng),而type敘述的則是用在指定的數(shù)據(jù)形態(tài),type對(duì)應(yīng)一個(gè)已定義的type,like對(duì)應(yīng)一個(gè)已定義的object,不能是結(jié)構(gòu),而是定義好的對(duì)象,語法如下:DATA LIKE Example:DATA L_TABIX LIKE SY-TABIX.data語句:用于聲明變量,語法如下:DATA TYPE |LIKE VALUE DECIMALS 其中 :變量名稱,最長(zhǎng)30個(gè)字符,不可含有+ . , : ( ;等特殊字符:變量長(zhǎng)度,還可使用關(guān)鍵字length來說明變
13、量的長(zhǎng)度:數(shù)據(jù)類型: 數(shù)據(jù)對(duì)象:初始值:小數(shù)位數(shù)Example:DATA: COUNTER TYPE P VALUE 1, FLAG TYPE C VALUE IS INITIAL, 初始值為空 WEIGHT TYPE P DECIMALS 2 VALUE 1.25, 小數(shù)用單引號(hào) CHAR(30). 沒有用type或like給變量指定類型則默認(rèn)類型為Cstatics語句(盡量不要使用):聲明的變量為當(dāng)前程序的全局變量,僅在目前的程序中使用,結(jié)束后會(huì)自動(dòng)釋放,語法如下:STATICS TYPE |LIKE VALUE DECIMALS Example:PROGRAM FORM_TEST.PER
14、FORM DATATEST1.PERFORM DATATEST1.PERFORM DATATEST2.PERFORM DATATEST2.FORM DATATEST1. TYPES F_WORD(5) TYPE C. DATA F_TEXT TYPE F_WORD VALUE INIT. WRITE F_TEXT. F_TEXT = 12345. WRITE F_TEXT.ENDFORM.FORM DATATEST2. TYPES F_WORD(5) TYPE C. STATICS F_TEXT TYPE F_WORD VALUE INIT. WRITE F_TEXT. F_TEXT = AB
15、CDE. WRITE F_TEXT.ENDFORM.運(yùn)行結(jié)果為:INIT 12345 INIT 12345 INIT ABCDE ABCDE ABCDEtables語句:按照表的結(jié)構(gòu)定義工作區(qū),語法如下:TABLES 其中為數(shù)據(jù)庫(kù)表名稱Example:TABLES: BKPF.SELECT SINGLE * FROM BKPF.WRITE: BKPF-BUKRS, BKPF-BELNR, BKPF-GJAHR.4、常數(shù)聲明聲明常數(shù)的關(guān)鍵字是constants,語法如下:CONSTANTS TYPE |LIKE VALUE DECIMALS CONSTANTS: CNAME(10) VALUE
16、周慶日, BIRTH_DAY TYPE D VALUE 19890824, BEGIN OF MYADDRESS, NAME(20) TYPE C VALUE Chongqing, NUMBER TYPE I VALUE 23, POSTCODE(6) TYPE N VALUE 405407, END OF MYADDRESS.5、系統(tǒng)所定義數(shù)據(jù)系統(tǒng)中有定義一些專有名詞,如:SPACE 空白字符串SY-SUBRC 系統(tǒng)執(zhí)行傳回值,0表示成功SY-UNAME 當(dāng)前系統(tǒng)登錄的登錄名SY-DATUM 當(dāng)前系統(tǒng)日期SY-UZEIT 當(dāng)前系統(tǒng)時(shí)間SY-TCODE 目前使用的transaction cod
17、eSY-COLNO 當(dāng)前列SY-LINNO 當(dāng)前行更多系統(tǒng)數(shù)據(jù)參見數(shù)據(jù)表SYST輸出數(shù)據(jù)到屏幕1、屏幕畫線,語法如下:ULINE AT / /:換行符:線的起始位置:線的長(zhǎng)度如果沒有格式規(guī)范,系統(tǒng)則開始新的一行,并用水平線填充該行。否則,只按指定輸出水平線。2、write語句是ABAP用來在屏幕上輸出數(shù)據(jù)的指令,語法如下:WRITE 資料項(xiàng)可以輸出常數(shù)或常量指定屏幕位置顯示,語法如下: WRITE AT / 資料項(xiàng)/:換行:屏幕X坐標(biāo):顯示資料的長(zhǎng)度指定格式顯示,語法如下: WRITE 資料項(xiàng) 顯示格式參數(shù):LEFT-JUSTIFIED 資料靠左顯示CENTERED 資料中間顯示RIGHT-J
18、USTIFIED 資料靠右顯示UNDER 在資料項(xiàng)的X軸開始坐標(biāo)顯示NO-GAP 緊接著顯示,不留空格USING EDIT MASK 使用內(nèi)嵌字符顯示, 如 11:20:30USING NO EDIT MASK 不使用內(nèi)嵌字符NO-ZERO 數(shù)字前面0的部分不顯示NO-SIGN 不顯示正負(fù)號(hào)DECIMALS 顯示 d 位小數(shù)字?jǐn)?shù)EXPONENT F(浮點(diǎn)數(shù)) exponent 的值ROUND 四舍五入至小數(shù)位數(shù)下 r 位CURRENCY currency 幣別顯示DD/MM/YY | MM/DD/YY | DD/MM/YYYY | MM/DD/YYYY | DDMMYY | MMDDYY |
19、YYMMDD 日期顯示格式產(chǎn)生空白列,語法如下: SKIP :空白的列數(shù),如果沒有指定,則默認(rèn)為空一列顯示圖示,語法如下: WRITE AS SYMBOL WRITE AS ICON:R/3系統(tǒng)所提供的符號(hào)名:R/3系統(tǒng)所提供的圖標(biāo)名Example: INCLUDE . INCLUDE . WRITE: / Phone Symbol:, SYM_PHONE AS SYMBOL. WRITE: / Alarm Icon:, ICON_ALARM AS ICON.執(zhí)行結(jié)果:要查看系統(tǒng)所提供有那些符號(hào)及圖標(biāo), 可選擇 “pattern” 下的 “Insert Statement”, 選擇 “WRIT
20、E”, 接下來選擇要查的群組, 如SYMBOL 或 ICON, 按下 “Display” 即可。跳至指定列坐標(biāo),語法如下: SKIP TO LINE :屏幕的Y坐標(biāo)顯示CHECK BOX資料,語法如下: WRITE AS CHECKBOX以字符串?dāng)?shù)據(jù)內(nèi)容的第一個(gè)字符為 CHECK BOX的輸出, 如果是空白, CHECK BOX 顯示 為空白, 相反則顯示 X , 可用在邏輯判斷檢查。Example:DATA: FLAG1 VALUE , FLAG2 VALUE X .WRITE: / Check Flag 1:, FLAG1 AS CHECKBOX.WRITE: / Check Flag 2
21、:, FLAG2 AS CHECKBOX.執(zhí)行結(jié)果:賦值1、普通賦值語法: MOVE TO 將F1的值存至變量 F2 中, 也可寫成 F2 = F1Example:MOVE CHAR TO M_NAME. 等價(jià)于M_NAME = CHAR.2、帶偏移量的賦值語法: MOVE +() TO +將變量F1從O1+1位置開始len1長(zhǎng)度的字符串賦值給變量F2從O2+1位置處開始的len2長(zhǎng)度的字符串Example: DATA: F1(10) TYPE C VALUE ABCDEFGHIJ, F2(5) TYPE C. MOVE F1+3(5) TO F2. 相當(dāng)于F2 = F1+3(5). 自F1第
22、4個(gè)開始的5個(gè)字符長(zhǎng)度的串賦值給F2,即F2 = DEFGH.3、Field String 組件的復(fù)制語法: MOVE-CORRESPONDING TO .將Strings1中的field組件的數(shù)據(jù)復(fù)制至String2中, 僅復(fù)制相同名稱的組件。 Example:DATA: BEGIN OF ADDRESS, FIRSTNAME(10) TYPE C VALUE Zhongsheng, LASTNAME(10) TYPE C VALUE Xu, TEL(12) TYPE C VALUE END OF ADDRESS. DATA:BEGIN OF NAME, FIRST
23、NAME(10) TYPE C , LASTNAME(10) TYPE C , E_MAIL(30) TYPE C , END OF NAME. MOVE-CORRESPONDING ADDRESS TO NAME. 結(jié)果:NAME-FIRSTNAME = Zhongsheng,NAME-LASTNAME = Xu,NAME-E_MAIL= 4、變量 CALL BY VALUE 的使用語法: WRITE () TO Example:DATA: NAME(20) TYPE C VALUE SOURCE, SOURCE(10) TYPE C VALUE LILY, TARGET(10) TYPE
24、C . WRITE (NAME) TO TARGET. WRITE / TARGET. 屏幕可打印出 LILY。5、清除變量?jī)?nèi)容,清空工作區(qū)和列表語法: CLEAR 清除變量現(xiàn)在內(nèi)容,恢復(fù)成初值。Example:DATA N TYPE I VALUE 100. CLEAR N. 變量 N 的內(nèi)容變成 0 6、字符串?dāng)?shù)據(jù)處理字符串移位語法: SHIFT BY PLACES : (1)空白,字符串往左移一位 (2)LEFT,字符串往左移 n 位 (3)RIGHT, 字符串往右移n位(4)CIRCULAR,字符串往左以環(huán)狀方式移位Example:DATA STRING(10) TYPE C VALU
25、E ABCDEFGHIJ. SHIFT STRING. 得到 BCDEFGHIJ SHIFT STRING BY 2 PLACES RIGHT. 得到 ABCDEFGH SHIFT STRING BY 2 PLACES CIRCULAR. 得到CDEFGHIJAB取代字符串內(nèi)容語法: REPLACE WITH INTO 將字符串 中的 以 來取代Example:DATA: STRING(10) TYPE C VALUE ABCDEFGHI, STR1(3) TYPE C VALUE DEF, STR2(3) TYPE C VALUE 123. REPLACE STR1 WITH STR2 IN
26、TO STRING. “STRING = ABC123GHI大小寫的轉(zhuǎn)換語法:TRANSLATE TO UPPER CASE. 轉(zhuǎn)成大寫 TRANSLATE TO LOWER CASE. 轉(zhuǎn)成小寫在字符串中尋找部分字符串語法:SEARCH FOR 會(huì)存至兩個(gè)變量:SY-SUBRC和SY-FDPOS若找到則SY-SUBRC 為 0,SY-FDPOS 存開始位迭 若找不到則 SY-SUBRC為4,SY-FDPOS為 0字符串長(zhǎng)度語法: STRLEN()Example:INT = STRLEN(XYZABC). 得到 6 INT = STRLEN(ABC). 得到 3取部分字符串語法: +Examp
27、le:DATA T(10) TYPE C VALUE ABCDEFGHIJ. WRITE / T+2(4). 得到 CDEF合并字符串(常用)語法: CONCATENATE . INTO SEPARATED BY .將字符串c1到cn合并到字符串c中,中間用s間隔Example:DATA: C1(10) VALUE Sum,C2(3) VALUE mer, C3(5) VALUE holi ,C4(10) VALUE day, C5(30), SEP(3) VALUE - .CONCATENATE C1 C2 C3 C4 INTO C5. 得到SummerholidayCONCATENATE
28、C1 C2 C3 C4 INTO C5 SEPARATED BY SEP.得到Sum-mer-holi-day分割字符串(常用)語法:SPLIT AT INTO . .將字符串c在分割符del處分割,子串分別存放到c1到cn,如果del在c中出現(xiàn)多于n-1次,則后面所有的字符串和分割符都放在最后一個(gè)字符串cn中(如下面例子中的P4)Example:DATA: STRING(60), P1(20) VALUE +,P2(20) VALUE +,P3(20) VALUE +,P4(20) VALUE +, DEL(3) VALUE *.STRING = Part1*Part2*Part3*Part
29、4*Part5.SPLIT STRING AT DEL INTO P1 P2 P3 P4. P1 = Part1,P2 = Part2,P3 = Part3,P4 = Part4*Part5替換字符串語法:REPLACE WITH INTO LENGTH .將字符串c中的str1子串的前I個(gè)字符替換成str2子串,替換后超出c的長(zhǎng)度的部分被丟棄 Example:DATA: T(10) VALUE abcdefghij, STRING LIKE T, STR1(4) VALUE cdef,STR2(4) VALUE klmn, STR3(2) VALUE kl,STR4(6) VALUE klm
30、nop , LEN TYPE I VALUE 2.STRING = T. STRING = abcdefghijREPLACE STR1 WITH STR2 INTO STRING. STRING = abklmnghijSTRING = T.REPLACE STR1 WITH STR2 INTO STRING LENGTH LEN.STRING = abklmnefghSTRING = T.REPLACE STR1 WITH STR3 INTO STRING. STRING = abklghijSTRING = T.REPLACE STR1 WITH STR4 INTO STRING. 越界
31、部分被丟棄STRING = abklmnopgh去前置空格語法: CONDENSE (F) NO-GAPS.其中: NO-GAPS 去所有空格加前導(dǎo)0,去前導(dǎo)0(適用于數(shù)字字符串)加前導(dǎo)0:CALL FUNCTION CONVERSION_EXIT_ALPHA_INPUT去前導(dǎo)0:CALL FUNCTION CONVERSION_EXIT_ALPHA_OUTPUT運(yùn)算符及函數(shù)1、算術(shù)符號(hào)符號(hào) */+-DIVMOD描述乘冪乘除加減整數(shù)除法余數(shù)除法2、數(shù)值函數(shù) (很少用)ABS(N): 傳回?cái)?shù)值 N 的絕對(duì)值SIGN(N): 1(N 0時(shí)); 0(N = 0時(shí)); -1(N 0時(shí))CEIL(N):
32、 傳回大于數(shù)值N的最小整數(shù) Example: WRITE CEIL(-5.65) 5.00WRITE CELL(4.54) 5.00FLOOR(N): 傳回小于數(shù)值N的最大整數(shù)Example:WRITE FLOOR(-5.65) 6.00WRITE FLOOR(4.54) 4.00TRUNC(N): 傳回?cái)?shù)值N的整數(shù)部分Example:WRITE TRUNC(5.65) 5.00FRAC(N): 傳回?cái)?shù)值 N 的小數(shù)部分Example:WRITE FRAC(5.65) 0.65COS(A),SIN(A),TAN(A): 三角函數(shù) cos A, sin A,tan A 的值,A為弧度值EXP(N
33、):傳回 eN 值LOG(N): 傳回 log eN 值LOG10(N): 傳回 log N值SQRT(N): 傳回 N 的平方根值3、日期與時(shí)間的運(yùn)算日期數(shù)據(jù)的運(yùn)算日期數(shù)據(jù)可以直接運(yùn)算, 如加法與減法的運(yùn)算Example: DATA: Mdata TYPE D.Mdate = 19971015. Mdate+6(2) = 01. Mdate 變成 19971001 Mdate = Mdate - 1 Mdate 變成 19970931時(shí)間數(shù)據(jù)的運(yùn)算時(shí)間格式為 hhmmss, 如 212030 表示 21:20:30Example:DATA: HOURS TYPE I,MINUTES TYPE
34、 I, T2 TYPE T VALUE 200000, T1 TYPE T VALUE 183000.HOURS = (T2 - T1) / 3600. 計(jì)算T1和T2之間相差幾小時(shí)MINUTES = (T2 T1) / 60. 計(jì)算T1和T2之間相差幾分鐘流控制1、比較符號(hào)= 或 =ANDORNOTEQNELTLEGTGE等于不等于小于小于等于大于大于等于并且或非2、條件語句IF語句(與C語言中if.else if.else.語句相同)語法: IF .ELSEIF . . ELSE. ENDIF. 注:在每個(gè)判斷語句之后要加上 語句結(jié)束符.CASE 語句(與C語言中switch.case.語
35、句相同)語法: CASE . WHEN . WHEN . . WHEN OTHERS. ENDCASE.3、循環(huán)語句計(jì)數(shù)循環(huán)語句語法: DO n TIMES VARYING FROM TO . ENDDO.選項(xiàng)n TIMES:循環(huán)n次選項(xiàng)VARYING FROM TO :從start循環(huán)到end,將當(dāng)前循環(huán)的值賦值給fExample1: DO 2 TIMES. WRITE / X. ENDDO.執(zhí)行結(jié)果: X XExample2: DO VARYING I FROM1 TO 10. S = S + I. ENDDO. WRITE: / ,1+2+3+10=,S執(zhí)行結(jié)果:1+2+3+10=55條
36、件循環(huán)語法: WHILE . ENDWHILE內(nèi)表循環(huán)語法:LOOP AT ASSIGNING |INTO WHERE . ENDLOOP.用于內(nèi)表數(shù)據(jù)條目的循環(huán),詳細(xì)內(nèi)容在內(nèi)表一節(jié)敘述4、循環(huán)控制語句CONTINUE: 跳至循環(huán)的下一次Example:DO 3 TIMES.執(zhí)行結(jié)果: 1 3 IF SY-INDEX = 2. CONTINUE. ENDIF. WRITE: / SY-INDEX. ENDDO. CHECK CHECK 之后條件成立才繼續(xù)往下執(zhí)行循環(huán)執(zhí)行結(jié)果:2 3 4Example:DO 5 TIMES. CHECK SY-INDEX BETWEEN 2 AND 4. WRI
37、TE / SY-INDEX. ENDDO.EXIT:跳離循環(huán)語句Example:DO 10 TIMES. IF SY-INDEX = 4.執(zhí)行結(jié)果:1 2 3 EXIT. ENDIF WRITE / SY-INDEX. ENDDO. 5、無窮循環(huán)語法: DO . ENDDO.無窮循環(huán)必須配合 EXIT語句來執(zhí)行注釋結(jié)構(gòu)可以在程序的任意處插入注釋行,在程序中有兩種方法表明注釋:如果要整行加入注釋,則可在行開始處輸入星號(hào)(*);如果要某行的一部分(后面一部分)變?yōu)樽⑨專瑒t在注釋之前輸入雙引號(hào)()。例:PROGRAM SAPMTEST.* The following line contains a
38、WRITE statementWRITE First Program. Output on List內(nèi)表內(nèi)表索引表內(nèi)部的索引索引是表格行的序列號(hào),不是表格字段,但由系統(tǒng)自動(dòng)創(chuàng)建和管理??梢杂?DELETE、INSERT、MODIFY、LOOP 和READ語句來使用索引。在這些語句中, 可以將索引指定為文字或變量。處理完內(nèi)表的特定行后,系統(tǒng)字段sy-tabix一般包含該行的索引。訪問內(nèi)表內(nèi)表是按行進(jìn)行訪問的。必須使用某個(gè)工作區(qū)域作為與表格互相傳輸數(shù)據(jù)的接口 。從內(nèi)表中讀取數(shù)據(jù)時(shí),已定址的表格行內(nèi)容覆蓋工作區(qū)域的內(nèi)容。然后可以在程序中引用工作區(qū)域的內(nèi)容。將數(shù)據(jù)寫入內(nèi)表時(shí),必須首先在工作區(qū)域(從中系
39、統(tǒng)可以將數(shù)據(jù)傳輸給內(nèi)表)中輸入數(shù)據(jù),如圖2-1所示。圖2-1為了避免不一致,最好是工作區(qū)域與內(nèi)表行有相同的數(shù)據(jù)類型。創(chuàng)建與內(nèi)表兼容的工作區(qū)域的一種安全步驟是在說明內(nèi)表和工作區(qū)域時(shí)使用相同的數(shù)據(jù)類型。在該環(huán)境中,可以區(qū)分ABAP/4中兩種類型的內(nèi)表的差別:帶表頭行的內(nèi)表、不帶表頭行的內(nèi)表如果創(chuàng)建帶表頭行的內(nèi)表,系統(tǒng)自動(dòng)創(chuàng)建與內(nèi)表行數(shù)據(jù)類型相同的工作區(qū)域。該工作區(qū)域稱為表頭行或表格工作區(qū)域,對(duì)內(nèi)表的作用與由TABLES語句創(chuàng)建的數(shù)據(jù)庫(kù)表格工作區(qū)域相同。表格工作區(qū)域和內(nèi)表本身同名。在所有用于訪問內(nèi)表的ABAP/4 語句中,可以指定要使用的工作區(qū)域。對(duì)于帶表頭行的內(nèi)表,可以忽略這一指定。這樣,系統(tǒng)隱式
40、使用表格工作區(qū)域,如圖2-2所示。圖2-2不帶表頭行的內(nèi)表沒有可以隱式使用的表格工作區(qū)域。要訪問沒有表頭行的內(nèi)表,必須在相應(yīng)的ABAP/4語句中顯式指定工作區(qū)域。決定創(chuàng)建的內(nèi)表是否帶表頭行時(shí),必須考慮是喜歡隱式還是顯式用于內(nèi)表訪問的工作區(qū)域。請(qǐng)記住,對(duì)于帶表頭行的內(nèi)表,內(nèi)表本身和表格工作區(qū)域同名。如果在語句中使用該名稱,系統(tǒng)將其解釋為表格工作區(qū)域的名稱,而不是表格本身,要用表格本身,則需要在表名后加上。Example: DATA: BEGIN OF WA_ITAB OCCURS 0, . END OF WA_ITAB. CLEAR: WA_ITAB, 清空工作區(qū)的內(nèi)容 WA_ITAB. 清空內(nèi)
41、表的內(nèi)容內(nèi)表的聲明ABAP/4的內(nèi)部表如同其它語言的數(shù)組結(jié)構(gòu),在操作上可以有復(fù)制、刪除、新增、插入等功能。 1、使用 TYPE 語句語法: TYPES TYPE OCCURS 聲明一個(gè)數(shù)組 ,型態(tài)為 ,長(zhǎng)度為 Example1: TYPES A TYPE I OCCURS 10. A 是個(gè)10個(gè)元素的數(shù)值內(nèi)部表Example2:TYPES: BEGIN OF LINE, COL1 TYPE I, COL2 TYPE I, COL3 TYPE I, END OF LINE. TYPES ITAB TYPE LINE OCCURS 10. 對(duì)應(yīng)一個(gè)內(nèi)表的類型 聲明一個(gè)內(nèi)部表 ITAB, 總共有10
42、個(gè)元素, 其工作區(qū)名稱為 LINE (用到OCCURS分配內(nèi)存,意思是內(nèi)部表,否則是指作業(yè)領(lǐng)域) Example: DATA: WA_DD02 TYPE LINE. 作業(yè)領(lǐng)域WA_DD02定義如果LINE由DATA定義,則為變量,定義內(nèi)部表示用: DATA ITAB LIKE LINE OCCURS 10. 如果LINE由TYPE定義,則為一種新的數(shù)據(jù)類型,定義內(nèi)部表的時(shí)候使用:TYPES ITAB TYPE LINE OCCURS 10.2、使用 DATA 語句 若使用DATA語句來聲明內(nèi)部表, 可分成要不要有HEADER LINE(表頭),HEADER LINE就是所謂的作業(yè)領(lǐng)域, 用于內(nèi)
43、表數(shù)據(jù)的存取。語法: DATA OCCURS WITH HEADER LINEExample:DATA VECTOR TYPE I OCCURS 10 WITH HEADER LINE.內(nèi)表只有一個(gè)字段 3、直接聲明, 不使用作業(yè)領(lǐng)域語法:DATA: BEGIN OF OCCURS , END OF .Example: DATA: BEGIN OF ITAB OCCURS 10, COL1 TYPE I, COL2 TYPE I, END OF ITAB.如此產(chǎn)生的內(nèi)部表不會(huì)有作業(yè)領(lǐng)域, 也就是聲明時(shí)不會(huì)引用其它的Conponent 聲明。4、內(nèi)部表和作業(yè)領(lǐng)域的區(qū)別: 內(nèi)部表可以被包含兩行及兩
44、行以上的紀(jì)錄,作業(yè)領(lǐng)域只能有一行紀(jì)錄。 5、內(nèi)部表的區(qū)分a.根據(jù)定義方式區(qū)分如: TYPES: BEGIN OF T_DD02.END OF T_DD02.語法1: DATA TYPE |LIKE OCCURS 0 WITH HEADER LINE. Example: DATA: IT_DD02 TYPE T_DD02 OCCURS 0 WITH HEADER LINE.語法2: DATA TYPE|LIKE OF WITH INITIAL SIZE WITH HEADER LINE.Example:DATA ITAB TYPE HASHED TABLE OF SPFLI WITH UNIQU
45、E KEY CARRID CONNID.內(nèi)表有三種類型:標(biāo)準(zhǔn)表(Standard)、排序表(Sorted)、哈希表(Hashed)其中,排序表和哈希表是索引表b.根據(jù)表的屬性區(qū)分帶HEADLINEExample1:DATA IT_TC TYPE T_DD02 OCCURS 0 WITH HEADER LINE.Example2:DATA: BEGIN OF T_DD02 OCCURS 0, .END OF IT_TC. 不帶HEADLINEExample1:DATA IT_TC TYPE T_DD02 OCCURS 0. DATA IT_TC TYPE TABLE OF T_DD02. Exa
46、mple2: DATA: BEGIN OF IT_TC, .END OF IT_TC.一般不要使用帶表頭的內(nèi)表,帶表頭的內(nèi)表容易造成程序BUG,而且將逐漸被SAP淘汰一般使用標(biāo)準(zhǔn)表,如果需要大量處理數(shù)據(jù)并且數(shù)據(jù)查找頻繁的時(shí)候建議使用排序表或哈希表c.帶KEY的內(nèi)部表定義語法:DATA IT_TC TYPE TABLE OF T_DD02 WITH UNIQUE|NON-UNIQUE .內(nèi)表的使用1、Append行語法1: APPEND | TO Initial Line To . 可不帶headlineInitial Line To 為增加一預(yù)設(shè)初值的元素語法2: APPEND . 帶head
47、lineExample1:使用Work AreaDATA: BEGIN OF LINE, COL1 TYPE I, COL2 TYPE I, END OF LINE. DATA ITAB LIKE LINE OCCURS 10. DO 2 TIMES. LINE-COL1 = SY-INDEX. SY-INDEX為循環(huán)的 Counter LINE-COL2 = SY-INDEX * 2. APPEND LINE INTO ITAB. 新增至 內(nèi)部 表中 ENDDO. LOOP AT ITAB INTO LINE. ITAB 總共有行 WRITE: / LINE-COL1,LINE-COL2.
48、ENDLOOP. 執(zhí)行結(jié)果為: 1 1 2 4Example2:不使用 Work Area DATA: BEGIN OF ITAB OCCURS 10, COL1 TYPE I, COL2 TYPE I, END OF ITAB. DO 2 TIMES. ITAB-COL1 = SY-INDEX. ITAB-COL2 = SY-INDEX * 2. APPEND ITAB. 新增至 內(nèi)部 表中 ENDDO. LOOP AT ITAB. ITAB 總共有兩個(gè)元素 WRITE: / ITAB-COL1,ITAB-COL2. ENDLOOP. 執(zhí)行結(jié)果與上面的一樣2、加入另一內(nèi)部表的元素語法:APP
49、END LINES OF FROM TO TO 將內(nèi)表itab1的元素追加至內(nèi)表itab2中,可選取條目自n1至n2的范圍Example:APPEND LINES OF ITAB TO JTAB. 將ITAB所有元素追加到JTAB中3、匯總行語法: COLLECT | INTO 在加入新元素時(shí)將有相同standard key(非數(shù)值字段)的數(shù)值字段匯總Example: DATA: BEGIN OF ITAB OCCURS 3, COL1(3) TYPE C, COL2 TYPE I, END OF ITAB. ITAB-COL1 = ABC. ITAB -COL2 = 10. COLLECT
50、ITAB. ITAB-COL1 = XYZ. ITAB-COL2 = 20. COLLECT ITAB. ITAB-COL1 = ABC. ITAB-COL2 = 30. COLLECT ITAB. 匯總COL2 至 COL1=ABC 的元素上 LOOP AT ITAB. WRITE: / ITAB-COL1,ITAB-COL2. ENDLOOP. 執(zhí)行結(jié)果: ABC 40 XYZ 204、插入行插入元素在指定的內(nèi)部表位置之前語法1:INSERT | INTO INITIAL LINE INTO TABLE INDEX INITIAL LINE INTO 為增加一預(yù)設(shè)初值的元素,可不帶head
51、line語法2:INSERT 帶headlineExample: DATA: BEGIN OF LINE, COL1 TYPE I, COL2 TYPE I, END OF LINE. DATA ITAB LIKE LINE OCCURS 10. DO 3 TIMES. LINE-COL1 = SY-INDEX *10. LINE-COL2 = SY-INDEX *20. APPEND LINE INTO ITAB. ENDDO. LINE-COL1=100. LINE-COL2=200. INSERT LINE INTO ITAB INDEX 2. 插入在位置2處 LOOP AT ITAB
52、INTO LINE. WRITE: / SY-TABIX,LINE-COL1,LINE-COL2. SY-TABIX為表位置 ENDLOOP. 執(zhí)行結(jié)果: 1 10 20 2 100 200 插入的行 3 20 40 4 30 605、插入另一內(nèi)部表元素語法:INSERT LINES OF FROM TO TO INDEX 將itab1的元素插入至itab2中,位置在 idx之前,可選取自n1至n2的范圍Example:INSERT LINES OF ITAB TO JTAB INDEX 3. 將ITAB所有元素插入JTAB中, 位置在第三個(gè)元素之前6、內(nèi)部表元素?cái)?shù)據(jù)的讀取語法: LOOP A
53、T INTO |ASSIGNING FROM TO WHERE ENDLOOP根據(jù)設(shè)定的范圍選取原素資料,讀完后自動(dòng)移往下一項(xiàng)Example1:LOOP AT ITAB INTO LINE WHERE COL1 100. WRITE: / SY-TABIX,LINE-COL1. ENDLOOP.僅讀取 COL1 100 的元素 Example2: LOOP AT IT_ ITAB INTO WA_ ITAB. IT_ ITAB可為不帶表頭的內(nèi)部表在數(shù)據(jù)量大的時(shí)候,建議用ASSIGN 代替INTO ,這樣會(huì)明顯提高程序的執(zhí)行效率,但是注意程序中對(duì)的修改是直接對(duì)內(nèi)表內(nèi)容的修改7、讀取內(nèi)部表指定位置
54、的元素語法: READ TABLE INTO |ASSIGNING INDEX 自指定位置 或指定的字段讀取元素?cái)?shù)據(jù)Example:READ TABLE IT_ITAB INTO WA_LINE INDEX 5.讀取 IT_ITAB的第5個(gè)條目的數(shù)據(jù), 放入工作區(qū) WA_LINE對(duì)應(yīng)的字段中8、根據(jù)字段內(nèi)容尋找語法: READ TABLE INTO |ASSIGNING WITH TABLE KEY = A = B .BINARY SEARCH 1、用WHERE選項(xiàng)的時(shí)候必須用系統(tǒng)字段sy-subrc的值來判斷是否讀取成功,讀取成功的情況下(sy-subrc = 0)才能對(duì)其工作區(qū)()或數(shù)據(jù)域
55、()進(jìn)行操作、 2、使用BINARY SEARCH之前必須先對(duì)內(nèi)表進(jìn)行排序(sort)且WHERE后面的字段最好與排序的字段一致或者為其子集數(shù)據(jù)量大的時(shí)候,為提高程序效率,建議用二分查找(BINARY SEARCH)Example:READ TABLE IT_TC WITH KEY COL1 = ABC. IT_TC為帶表頭的內(nèi)部表當(dāng)IT_TC中有多個(gè)條目中滿足條件COL1 = ABC的時(shí)候,只順序讀取第一條滿足條件的記錄,不帶表頭的內(nèi)部表必須指定工作區(qū)或數(shù)據(jù)域(即必須用INTO 或ASSIGNING 選項(xiàng))9、讀取內(nèi)部表的元素MOVE-CORRESPONDING IT_TC TO WA_TC
56、. IT_TC必須是帶headline的把表頭賦給一個(gè)結(jié)構(gòu)READ TABLE IT_TC INTO WA_TC INDEX I.MOVE-CORRESPONDING WA_TC TO WA_2. 不帶headline的用法10、指定特別處理選項(xiàng)語法:READ TABLE INTO |ASSIGNING COMPARING . | ALL FIELDSTRANSPORTING . | ALL FIELDS| NO FIELDS. 使用COMPARING選項(xiàng): 在TRANSPORTING前,使用工作區(qū)的相應(yīng)的字段與表中的字段 .比較 使用ALL FIELDS選項(xiàng):比較所有字段 使用TRANSPO
57、RTING選項(xiàng):傳送將指定字段輸入到工作區(qū)的字段中這種情況一般用于內(nèi)表結(jié)構(gòu)與工作區(qū)域結(jié)構(gòu)不一樣的時(shí)候11、修改元素內(nèi)容語法:MODIFY FROM | INDEX TRANSPORTING WHERE TRANSPORTING . : 指定修改的字段名稱Example1: LINE-COL1 = 4. LINE-COL2 = 100. MODIFY ITAB FROM LINE. 將目前位置元素以LINE的內(nèi)容修改Example2: LINE-COL1 = 10. MODIFY ITAB FROM LINE INDEX 3 TRANSPORTING COL1. 將第三個(gè)元素的COL1字段修改為
58、 10Example3:IT_TC 帶headline的用法:MODIFY TABLE IT_TC WHERE MODIFY IT_TC.MODIFY IT_TC INDEX SY-TABIX.Example4:不帶headline的用法:MODIFY TABLE IT_TAB FROM WA_TAB.MODIFY IT_TAB FROM WA_TAB TRANSPORTING COL2 WHERE COL1 = 10. 12、刪除行 刪除內(nèi)部表的元素語法1: DELETE INDEX Example1: DELETEITAB INDEX 4. 刪除第四個(gè)元素,ITAB帶HEADLINE語法2
59、: DELETE FROM TO WHERE Example2: DELETE ITAB FROM 3 TO 10. 刪除第3至第10個(gè)元素,ITAB帶HEADLINEExample3: DELETE IT_TC WHERE CHECKED = C_CHECKED. Example4: DELETE ITAB FROM WA_TC. ITAB可不帶表頭13、內(nèi)部表排序語法: SORT ASCENDING |DESCENDING BY DESCENDING為降序,ASCENDING為升序,省略時(shí)為升序。 :為指定的字段 Example1: SORT ITAB DESCENDING BY COL2
60、. 將 ITAB 根據(jù) COL2字段降序排列Example2: SORT ITAB BY ZXHINMEI WERKS.內(nèi)表在使用重復(fù)項(xiàng)刪除(DELETE ADJACENTDUPLICATESFROM)或二分讀?。˙INARY SEARCH)前一定要進(jìn)行排序操作14、LOOP 循環(huán)語法:LOOP AT WHERE . .ENDDLOOP.Example:帶headlineLOOP AT IT_TAB. IT_TAB-COL1 = 2. MODIFY IT_ITAB.ENDLOOP.不帶headlineLOOP AT IT_TAB_NOHEADLINE INTO WA_TAB. WA_TAB-C
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度鐘點(diǎn)清潔工綜合清潔服務(wù)合同
- 二零二五年度特種車輛抵押貸款合同協(xié)議
- 2025年度酒店客房租賃與設(shè)施設(shè)備維修責(zé)任合同
- 2025版漁業(yè)養(yǎng)殖害蟲防治及消毒管理合同3篇
- 定制化大型企業(yè)ERP系統(tǒng)開發(fā)合同(2025年度)2篇
- 2025年度個(gè)人失業(yè)保險(xiǎn)合同規(guī)范范本4篇
- 主體工程建筑勞務(wù)合作具體分包合同(2024版)版B版
- 2024通信工程節(jié)能技術(shù)服務(wù)分包合同范本3篇
- 2025版模具加工廢料回收與資源化利用合同4篇
- 二零二五版智能機(jī)器人技術(shù)進(jìn)出口貿(mào)易協(xié)議2篇
- 《社會(huì)工作實(shí)務(wù)》全冊(cè)配套完整課件3
- 單位違反會(huì)風(fēng)會(huì)書檢討書
- 2024年4月自考00832英語詞匯學(xué)試題
- 《電力用直流電源系統(tǒng)蓄電池組遠(yuǎn)程充放電技術(shù)規(guī)范》
- 《哪吒之魔童降世》中的哪吒形象分析
- 信息化運(yùn)維服務(wù)信息化運(yùn)維方案
- 汽車修理廠員工守則
- 公安交通管理行政處罰決定書式樣
- 10.《運(yùn)動(dòng)技能學(xué)習(xí)與控制》李強(qiáng)
- 冀教版數(shù)學(xué)七年級(jí)下冊(cè)綜合訓(xùn)練100題含答案
- 1神經(jīng)外科分級(jí)護(hù)理制度
評(píng)論
0/150
提交評(píng)論