# SAP_ABAP_邊學邊記錄_宣告變數 ###### tags: `SAP` abap在vscode上面也有套件可以下載,不無小補,作業起來應該會比較sap上操作來的好一點。 ## 宣告方式 SAP的結尾是用『.』一定要記得點上,如javascript的var『;』 ### TYPES 如用系統內建的型態無法滿足的時候,可以透過TYPES來做自定義! 也可以用於宣告一個結構,但無法直接使用,還是需要透過DATA來實體化。 感覺起來像是類別實做成物件..用法的話,可用於重覆需要宣告的資料結構! ### DATA 用於宣告變數的前贅詞,如javascript的var、let或是vb的dim... ### TYPE 用於宣告的變數的時候指定資料型別 ### LIKE 用法同TYPE,不同的是,LIKE是用於有值的資料。 ### CONSTANT 宣告常數,常數部份無法更動。如javascript的const ### STATICS 宣告一個臨時變數,用完了就自動釋放了! ## 變數類型 | 類型 | 說明 | 備註 | | -------- | -------- | -------- | | C | 字串 | | | D | 日期 | YYYYMMDD_'2017/07/24' | | F | 浮點數 | 長度8 | | I | 整數 | | | N | 數值組成的字串 | '123' | | P | 小數點數值 | 1.0123456 | | T | 時間 | HHMMSS_'08:50:00' | | X | 16進制數 | FFF0 | ## 宣告方式 DATA 變數名稱(長度) TYPE 變數型別 VALUE 初始值 ### DATA宣告範例 ``` DATA ABC TYPE C. --宣告ABC是一個字串,但是未給長度,初始值為1 DATA ABC(10) TYPE C. --宣告ABC是一個長度10的字串 DATA ABC TYPE P DECIMALS 5 VALUE '3.14159'. --宣告變數ABC為P且小數點五位... DATA DEF LIKE SY-UNAME. -- 宣告DEF的值為當前系統帳號(SY-UNAME為系統變數) ``` ### CONSTANT宣告範例 ``` CONSTANT GHI TYPE P DECIMALS 5 VALUE '3.14159'. ``` ### STATIC宣告範例 ``` STATIC JKL TYPE C VALUE 'HELLO WORLD!'. ``` ### TYPES宣告範例 ``` TYPES:NAMES(10) TYPE C, COUNTS(20) TYPE C . DATA:PLAYER TYPE NAMES VALUE 'HELLO HEY' ``` ### 其他說明 如果要一次宣告多變數的話,可以透過DATA:的作法 ``` DATA: ABC TYPE C DEF TYPE C GHI TYPE F . <---這個點很重要,如javascript中的結尾分號,沒了,就錯了! ``` ## 宣告方式(引入TABLE-COLUMN型別) 在為了避免宣告的類別與TABLE取出有差異的情況下,我們可以直接去宣告成該TABLE欄位的型別! 這部份跟鼎新的TT、T100系列開發的時候還蠻像的!(ORACLE內也可以這樣處理) DATA 變數名稱 TYPE TABLE-COLUMN ### 宣告範例 ``` DATA ABC TYPE CTABLE-ACOLUMN --宣告ABC的型別為CTABLE的ACOLUMN ``` ## 系統變數說明 | 變數 | 說明 | 備註 | | -------- | -------- | -------- | |SY-SUBRC|系統執行某指令後,表示執行成功與否的變數,'0'表示成功|| |SY-UNAME|當前使用者登入SAP的USERNAME|| |SY-DATUM|當前系統日期|| |SY-UZEIT|當前系統時間|| |SY-TCODE|當前執行程式的Transaction code|| |SY-INDEX|當前LOOP循環過的次數|| |SY-TABIX|當前處理的是internal table的第幾筆|| |SY-TMAXL|Internal table的總筆數|| |SY-SROWS|螢幕總行數|| |SY-SCOLS|螢幕總列數|| |SY-MANDT|CLIENT NUMBER|| |SY-VLINE|畫豎線|| |SY-ULINE|畫橫線|| |SY-REPID|當前程序的程序名|不能更改| |SY-CPROG|調用程序的程序名|可修改|