1、ABAP基础知识学习ABAP基礎知識學習 資料類型C :字串D :日期型 格式為 YYYYMMDD 例:1999/12/03F : 浮點數 長度為8I :整數N :數值組成的字串 如:011,302P : PACKED數 用於小數點數值 如:12.00542T : 時間 格式為:HHMMSS 如:14:03:00X : 16進制數 如:1A03*-*變數宣告DATA decimals變數名稱變數類型 及 長度初值小數位數exp:DATA : COUNTER TYPE P DECIMALS 3.NAME(10) TYPE C VALUE DELTA.S_DATE TYPE D VALUE 199
2、91203.exp:DATA : BEGIN OF PERSON,NAME(10) TYPE C,AGE TYPE I,WEIGHT TYPE DECIMALS 2,END OF PERSON.另外,有關DATA宣告的指令還有: CONSTANTS(宣告常數)、STATICS(臨時變數宣告).exp:CONSTANTS PI TYPE P DECIMALS 5 VALUE 3.14159.STATICS 敘述宣告的變數僅在目前的程式中使用, 結束後會自動釋放 語法: STATICS 系統專用變數說明系統內部專門創建了SYST這個STRUCTURE,裏面的欄位存放系統變數,常用的系統變數有:SY
3、-SUBRC : 系統執行某指令後,表示執行成功與否的變數,0 表示成功SY-UNAME: 當前使用者登入SAP的USERNAME;SY-DATUM: 當前系統日期;SY-UZEIT: 當前系統時間;SY-TCODE: 當前執行程式的Transaction codeSY-INDEX : 當前LOOP循環過的次數SY-TABIX: 當前處理的是internal table 的第幾筆SY-TMAXL: Internal table的總筆數SY-SROWS: 螢幕總行數;SY-SCOLS: 螢幕總列數;SY-MANDT: CLIENT NUMBERSY-VLINE: 畫豎線SY-ULINE: 畫橫線
4、TYPE 敘述用來指定資料型態或宣告自定資料型態Example:TYPES: BEGIN OF MYLIST,NAME(10) TYPE C,NUMBER TYPE I,END OF MYLIST.DATA LIST TYPE MYLIST.LIKE 敘述跟TYPE敘述使用格式相同, 如DATA TRANSCODE LIKE SY-TCODE.不同的是 LIKE 用在已有值的資料項, 如系統變數, 而TYPE敘述則是用在指定資料型態。*-*輸出一. WRITE 語句ABAP/4用來在螢幕上輸出資料的指令是WRITE指令,例如:WRITE: USER NAME IS:, SY-UNAME.二.
5、指定螢幕輸出位置指定輸出位置的語句格式為:WRITE: AT / () 資料項 其中: / : 在下一行輸出: 指定輸出的行號;():指定輸出位數(長度): 指定顯示格式參數,參數有:LEFT-JUSTIFIED 資料*左對齊CENTERED 資料*中間對齊RIGHT-JUSTIFIED 資料*右對齊UNDER 正對在資料項的下麵顯示NO-GAP 緊接著顯示,不留空格USING EDIT MASK : 使用內嵌子元顯示, 如 12:03:20USING NO EDIT MASK: 不使用內嵌子元NO-ZER 數字前面 0 的部分不顯示NO-SIGN: 不顯示正負號DECIMALS : 顯示 位
6、小數EXPOENT : F(浮點數)指數的值ROUND : 四捨五入至小數點後位CURRENCY : 幣別顯示DD/MM/YY : 日期顯示格式MM/DD/YY: YY/MM/DD: YY/DD/MMMM/DD/YYYY:DD/MM/YYYYYYYY/MM/DD:YYYY/DD/MM:例如1: WRITE: /10(6) ABCDEFGHIJK.輸出結果為: ABCDEF例如2: DATA: X TYPE I VALUE 11:20:30,A(5) TYPE C VALUE AB CDE.WRITE: / X USING EDIT MASK _:_:_.WRITE: / X USING EDI
7、T MASK $_,_.WRITE: / Y NO-GAP.輸出結果為:11:20:30$112,030ABCDEF例如3: DATA: LEN TYPE I VALUE 10,POS TYPE I VALUE 11,TEXT(10) VALUE 1234567890WRITE The text - appears in the text.WRITE AT POS(LEN) TEXT.WRITE TO 語句的基本 形式要將值(文 字)或源字 段內容寫入 目標欄位, 可以使用 WRITE TO 語句:語法WRITE TO .DATA: NUMBER TYPE F VALUE 4.3,TEXT(1
8、0),FLOAT TYPE F,PACK TYPE P DECIMALS 1.WRITE NUMBER.WRITE NUMBER TO TEXT EXPONENT 2.WRITE / TEXT.WRITE NUMBER TO FLOAT.WRITE / FLOAT.WRITE NUMBER TO PACK.WRITE / PACK.MOVE NUMBER TO PACK.WRITE / PACK.exp:DATA: NAME(10) VALUE SOURCE,SOURCE(10) VALUE Antony,TARGET(10).WRITE (NAME) TO TARGET.WRITE: TAR
9、GET.exp :DATA: COUNTER TYPE I.COMPUTE COUNTER = COUNTER + 1.COUNTER = COUNTER + 1.ADD 1 TO COUNTER.在此,三條 運算語句進 行相同算術 運算輸出螢幕上 的線和空行用下列語法 ,可以在輸 出螢幕上生 成水平線:語法ULINE AT /().它等同於WRITE AT /() SY-ULINE.AT 後的格式規 範,與在 在螢幕上定 位元 WRITE 輸出 (頁 28) 中為 WRITE 語句說明的 格式規範完 全一樣。如果沒有格 式規範,系 統則開始新 的一行,並 用水平線填 充該行。否 則,只按指
10、定輸出水準 線。生成水平線 的另一種方 法,是在 WRITE 語句中鍵入 恰當數量的 連字元,如 下所示:WRITE AT /() -.垂直線用下列語法 ,可以在輸 出螢幕上生 成垂直線:語法WRITE AT / SY-VLINE.或WRITE AT / |.空行用下列語法 ,可以在輸 出螢幕上生 成空行:語法SKIP .該語句從當 前行開始, 在輸出螢幕 上生成 個空行。如 果沒有指定 的值,就輸 出一個空行 。要將輸出定 位元在螢幕的 指定行上, 請使用:語法SKIP TO LINE .該語句允許 將輸出位置 向上或向下 移動。四. 顯示圖示:語法: WRITE: AS SYMBOL.WR
11、ITE: AS ICON.例如: INCLUDE .INCLUDE .WRITE: / Phone symbol:, SYM_PHONE AS SYMBOL.WRITE: / Alarm Icon:, ICON_VOICE_OUTPUT AS ICON.要查看系統所提供有那些符號及圖示,可選擇EDIT下的Insert Statement,選擇Write,接下來選擇要查看的群組,如SYMBOL 或ICON, 接下來按Display即可.*-*一. Internal Table 的宣告ABAP/4中的Internal Table是一種Data Structure,類似於其他語言中的STRUTURE
12、,它可以由幾個不同類型的欄位(field)組成,用來表示具有不同屬性的某一事物,單獨一筆資料表示某個事物,多筆資料表示具有相同屬性的多個事物.Internal table 的定義有以下幾種格式:格式一. DATA: BEGIN OF OCCURS ,TYPE , TYPE ,TYPE , END OF .語法:DATA OCCURS WITH HEADER LINEExample:DATA VECTOR TYPE I OCCURS 10 WITH HEADER LINE.格式二. TYPES: BEGIN OF ,TYPE , TYPE ,TYPE , END OF .TYPES TYPE O
13、CCURS .格式三. DATA: BEGIN OF .INCLUDE STRUCTURE .DATA: END OF .DATA: LIKE OCCURS .exp:TYPES VECTOR TYPE I OCCURS 10.TYPES: BEGIN OF LINE,COLUMN1 TYPE I,COLUMN2 TYPE I,COLUMN3 TYPE I,END OF LINE.TYPES ITAB TYPE LINE OCCURS 10.TYPES: BEGIN OF DEEPLINE,TABLE1 TYPE VECTOR,TABLE2 TYPE ITAB,END OF DEEPLINE.
14、TYPES DEEPTABLE TYPE DEEPLINE OCCURS 10.本示例創建 與上例相同 的內表資料 類型(VECTOR 和 ITAB) 。然後創建 資料類型 DEEPLINE 作為欄位串 ,包含這些 內表作為組 件。通過該 欄位串,數 據類型 DEEPTABLE 被創建為內 表。因此該 內表的元素 本身就是內 表。exp :TYPES: BEGIN OF LINE,COLUMN1 TYPE I,COLUMN2 TYPE I,COLUMN3 TYPE I,END OF LINE.TYPES ITAB TYPE LINE OCCURS 10.DATA TAB1 TYPE ITAB.
15、DATA TAB2 LIKE TAB1 WITH HEADER LINE.同 創建內表數 據類型 (頁 99) 中所示,該 示例創建數 據類型 ITAB 作為內表。 通過使用 DATA 語句的 TYPE 參數引用 ITAB, 使資料物件 TAB1 與 ITAB 結構相同。 通過使用 DATA 語句的 LIKE 參數引用 TAB1, 使資料物件 TAB2 結構相同。 創建的 TAB2 帶表頭行。 因此,可以 在程式中使 用 TAB2-COLUMN1、 TAB2-COLUMN2 和 TAB2-COLUMN3 等定位表格 工作區域 TAB2。exp :DATA FLIGHT_TAB LIKE SFL
16、IGHT OCCURS 10.本示例創建 資料物件 FLIGHT_TAB, 其結構與數 據庫表格 SFLIGHT 相同。本示例介紹 如何採用兩 種不同的步 驟創建同一 內表。TYPES VECTOR_TYPE TYPE I OCCURS 10.DATA VECTOR TYPE VECTOR_TYPE WITH HEADER LINE.在此創建一 個內表資料 類型 VECTOR_TYPE, 其行包含首 先創建的基 本類型 I 欄位。然後 ,通過引用 VECTOR_TYPE 創建資料對 象 VECTOR。 通過使用 WITH HEADER LINE 選項還創建 表格工作區 域 VECTOR。 在這
17、種情況 下,表格工 作區域包含 一種類型 I 欄位,可以 通過名稱 VECTOR 定位。DATA VECTOR TYPE I OCCURS 10 WITH HEADER LINE.在這種情況 下,通過直 接在 DATA 語句中使用 OCCURS 選項創建完 全一樣的數 據類型 VECTOR。*-*1. TYPES type. 2. TYPES type(len).3. TYPES: BEGIN OF structype . END OF structype. 4. TYPES itabtype TYPE tabkind OF linetype LIKE tabkind OF lineobjWI
18、TH UNIQUE|NON-UNIQUE keydef INITIAL SIZE n. 5. TYPES itabtype TYPE RANGE OF type.TYPES itabtype LIKE RANGE OF f. 6. TYPES itabtype TYPE linetype|LIKE lineobj OCCURS n. *-*APPEND LINE 格式:APPEND TO 舉例一:(使用WORK AREA)DATA : BEGIN OF LINE,COL1 TYPE I,COL2 TYPE I,END OF LINE.DATA ITAB LIKE LINE OCCURS 10.
19、DO 2 TIMES.LINE-COL1 = SY-INDEX.LINE-COL2 = SY-INDEX * 2.APPEND LINE TO ITAB.ENDDO.LOOP AT ITAB INTO LINE.WRITE : / LINE-COL1,LINE-COL2.ENDLOOP.舉例二 (不使用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.EN
20、DDO.LOOP AT ITAB.WRITE : / ITAB-COL1,ITAB-COL2.ENDLOOP.exp:DATA: BEGIN OF ITAB OCCURS 10,COL1 TYPE C,COL2 TYPE I,END OF ITAB.DO 3 TIMES.APPEND INITIAL LINE TO ITAB.ITAB-COL1 = SY-INDEX. ITAB-COL2 = SY-INDEX * 2.APPEND ITAB.ENDDO.LOOP AT ITAB.WRITE: / ITAB-COL1, ITAB-COL2.ENDLOOP.舉例三. (加入另一個Internal
21、table的元素)格式: APPEND LINES OF FROM TO TO .將的元素加入至中,可選取自至的範圍.APPEND LINES OF ITAB TO JTAB.COLLECT LINECOLLECT 指令也是將元素加入Internal table中,與APPEND 的區別是: COLLECT指令在非數值欄位相同的情況下,將數值欄位匯總.格式: COLLECT INTO DATA: BEGIN OF ITAB OCCURS 3,COL1(3) TYPE C,COL2 TYPE I,END OF ITAB.ITAB-COL1 = ABC. ITAB-COL2 = 10.COLLEC
22、T ITAB.ITAB-COL1 = XYZ. ITAB-COL2 = 20.COLLECT ITAB.ITAB-COL1 = ABC. ITAB-COL2 = 80.COLLECT ITAB.此時, internal table中放的是2筆數據, 分別為:ITAB-COL1 ITAB-COL2ABC 90XYZ 20*-*INSERT LINE將元素插入在指定的internal table位置之前.格式: INSERT INTO INITIAL LINE INTO INDEX 或者: INSERT LINES OF FROM TO INTO INDEX 其中: 即work area,工作區中
23、的元素.INITIAL LINE INTO :插入一筆初始化的記錄.: internal tableINDEX : internal table 的記錄號.(新加入的元素放在此記錄前面)Example: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=
24、200.INSERT LINE INTO ITAB INDEX 2. 插入在位置2之前LOOP AT ITAB INTO LINE.WRITE: / SY-TABIX,LINE-COL1,LINE-COL2. SY-TABIX為Table位置ENDLOOP. 執行結果:1 10 202 100 200 插入的元素3 20 404 30 60插入另一Internal Table元素語法:INSERT LINES OF FROM TO TO INDEX 將的元素插入至中, 位置在 之前, 可選取自至的範圍Example:APPEND LINES OF ITAB TO JTAB INDEX 3.將I
25、TAB所有元素插入JTAB中, 位置在第三個元素之前*-*讀取internal table格式一: LOOP AT INTO FROM TO WHERE ENDLOOP.Example:LOOP AT ITAB INTO LINE WHERE COL1 100.WRITE: / SY-TABIX,LINE-COL1.ENDLOOP.僅讀取 COL1 100 的元素格式二:READ TABLE INTO INDEX / WITH KEY 舉例. (格式二)DATA: BEGIN OF ITAB OCCURS 10,COL1 TYPE I,COL2 TYPE I,END OF ITAB.DO 10
26、 TIMES.ITAB-COL1 = SY-INDEX.ITAB-COL2 = SY-INDEX * 2.APPEND ITAB.ENDDO.READ TABLE ITAB INDEX 3.(或者: READ TABLE ITAB WITH KEY COL1 = 3.)WRITE: / ITAB-COL1 = , ITAB-COL1, ITAB-COL2 = , ITAB-COL2.執行結果同樣是: ITAB-COL1 = 3ITAB-COL2 = 6.Example:READ TABLE ITAB INTO LINE INDEX 5讀取 ITAB的第5個元素資料, 放入 LINE的欄位中根據
27、欄位內容尋找語法:READ TABLE INTO Example:ITAB-COL1 = ABC.READ TABLE ITAB INTO LINE.找出ITAB 中 COL1 欄位內容是 ABC 的元素, 找到的值放入 LINE 中若找到 SY-SUBRC傳回0, 找不到則傳回 4, 必須宣告有 work area*-*修改internal table 中的值格式: MODIFY FROM INDEX TRANSPORTING WHERE 舉例一. READ TABLE ITAB INDEX 3.LINE-COL1 = 29.MODIFY ITAB FROM LINE TRANSPORTING COL1.將第三筆記錄的COL1欄位的值修改為29.舉例二. T_SALARY - salary = 50.MODIFY T_SALARY TRANSPORTING salary WHERE birthday = 1999/1
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1