ABAP基礎語法


1.數據類型及屬性

類型

說明

C

 

N

0到9之間字符組成的數字字符串

D

日期格式必須為 YYYYMMDD

T

格式為 24-hour的 HHMMSS

I

-2.147.483.648 to +2.147.483.647

F

小數位最大可以到17位,即可精確到小數點后17位

P

兩個數字位壓縮后才占一個字節,由於0-9的數字只需要4Bit位,所以一個字節實質上允許存儲二位數字,這就是P數據類型為壓縮數據類型的由來。並借用半個字節來存儲小數點位置、正號、負號相關信息

X

十六進制字符 0-9, A-F具體的范圍為:00~FF

類型X是十六進制類型,可表示內存字節實際內容,使用兩個十六制字符表示一個字節中所存儲的內容。但直接打印輸出時,輸出的還是賦值時字面意義上的值,而不是Unicode解碼后的字符

如果未在 DATA 語句中指定參數<length>,則創建長度為 1

注:如果值是字母,則一定要大寫

語法示例:

DATA: number(16) TYPE p DECIMALS 14 VALUE '12345678901234567.89012345678901'.

"16 * 2 = 32表示了整個字面意義上允許的最大字面個數,而14表示的是字面上小數點后面允許的最大小數位,而不是指14個字節,只有這里定義時的16才表示16個字節

 

predefined ABAP types

Type

Length

Standard length

Description

b

1 Byte

 

1 byte integer (internal)

c

1 to 65,535 characters

1 character

Text field

cursor

as i

as i

Database cursor

d

8 characters

 

Date field

f

8 bytes

 

Floating point number

i

4 bytes

 

4 byte integer

n

1 to 65,535 characters

1 character

Numeric text

p

1 to 16 bytes

8 bytes

Packed number

string

variable

 

Text string

s

2 bytes

 

2 byte integer (internal)

t

6 characters

 

Time field

x

1 to 65,535 bytes

1 byte

Byte field(hexadecimal)

xstring

variable

 

Byte string

 

數據字典預置類型與ABAP類型對應關系。

數據字典預置類型

ABAP類型

運行長度

說明

ACCP

N(6)

6

會計計算周期

CHAR

C(n)

1-255

字符

CLNT

C(3)

3

集團,數據區域代碼

CUKY

C(5)

5

貨幣代碼

CURR(n,m)

P((n+1)/2)DECIMALm

42736

貨幣金額

DATS

D(8)

8

日期

DEC n,m

P((n+1)/2)DECIMALm

n(1-31)m(1-17)

數值計算

FLTP

F(8)

18

浮點數

INT1

X(1)(類型b)

3

單字節整形數

INT2

X(2)(類型s)

5

雙字節整形數

INT4

X(4)(類型i)

10

四字節整形數

LANG

C(1)

內部1位外部2位

語言代碼

LCHR

C(n)

256-最大值

長字符

LRAW

X(n)

256-最大值

長位字串

NUMC n

N(n)

1-255

數值文字

PREC

X(2)

16

精確度

QUAN n,m

P((n+1)/2)DECIMALm

42736

數量

RAW n

X(n)

1-255

位字串

TIMS

T(6)

6

時間

VARC n

C(n)

255-最大值

長字符(僅3.0前可用)

STRING

STRING

1-最大值

字符串

RAWSTRING

XSTRING

1-最大值

位字符串

UNIT

C(n)

2~3

單位

SAP系統變量

SY-SUBRC: 系統執行某指令后,表示執行成功與否的變量,’0’ 表示成功

SY-DBCNT: 在open SQL語句中,表示執行影響到的數據條數 
SY-DBLNT: 被處理過的記錄的筆數 
SY-UNAME: 當前使用者登入SAP的USERNAME;
SY-DATUM: 當前系統日期;
SY-UZEIT: 當前系統時間;
SY-TCODE: 當前執行程序的Transaction code
SY-INDEX :
SY-TABIX:
SY-TMAXL: Internal table的總筆數
SY-SROWS: 屏幕總行數;
SY-SCOLS: 屏幕總列數;
SY-MANDT: 當前系統編號(CLIENT NUMBER)
SY-VLINE: 畫豎線
SY-ULINE: 畫橫線
SY-PAGNO: 當前頁號
SY-LINSZ: 當前報表寬度
SY-LINCT: 當前報表長度
SPACE: 空字符串
SY-LSIND: 列表索引頁
SY-LISTI: 上一個列表的索引
SY-LILLI: 絕對列表中選定行的行號
SY-CUROW: 屏幕上的行
SY-CUCOL: 光標列
SY-CPAGE: 列表的當前顯示頁
SY-STARO:真實行號
SY-LISEL: 選擇行的內容,長度為255
SY-LINNO: 當前行

q  系統內部有一個專門存放系統變量的結構SYST,其中最常用的系統變量有:
SY-SUBRC: 系統執行某指令后,表示執行成功與否的變量,’0’ 表示成功
SY-UNAME: 當前使用者登入SAP的USERNAME;
SY-DATUM: 當前系統日期;    

SY-DATAR:如果屏幕上至少有一個輸入字段的值被用戶或其他數據傳輸所更改, 值為X。但如果沒有修改,回車后的值是空。
SY-UZEIT: 當前系統時間;
SY-TCODE: 當前執行程序的Transaction code
SY-REPID: ABAP 程式名,目前的主程式
SY-DYNNR: 畫面號

SY-CPROG: ABAP 程式名
SY-SYSID: R/3 系統,R/3 系統名稱
SY-UCOMM: PAI 驅動的功能代碼,一般用來參照定義變量
SY-INDEX(DO) : 當前LOOP循環過的次數
SY-TABIX(LOOP READ): 當前處理的是internal table 的第幾筆

sy-langu:記錄登陸系統的語言。

 

 

2.數據與變量聲明

l  變量以字母作為首字符,長度不超過30字節(SPACE是預定義字段constant with C)。

l  如果沒有指定類型,默認使用類型C。

l  LIKE參數,既可以參照內部字段,也可以參照數據庫中的字段。只要在程序的一個地方中數據屬性發生改變,其他使用LIKE參數定義的數據也發生改變。

l  透明表(還有其它數據詞典中的類型,如結構)即可看作是一種類型,也可看作是對象,所以即可使用TYPE,也可以使用LIKE

TYPES:定義數據類型

-       數據類型是純粹的說明。

-       沒有與數據類型相關聯的內存。

-       數據類型描述數據對象的技術屬性。

-       數據類型是數據對象的屬性並與數據對象聯系緊密。

DATA:聲明數據對象(變量、常量)

-       數據對象是程序在運行時使用的物理單元。

-       每個數據對象都有分配給它的特定數據類型。

-       每個數據對象占據一些內存空間。

-       ABAP/4 根據數據對象的數據類型處理數據對象。

l  TABLES: spfli.

DATA spfli TYPE spfli.

以上兩個語句等價。即在定義內存變量時,可以將透明表當做結構體來使用

l  CONSTANTS 利用<value>參數指定的初始值,在程序的執行期間不能更改。

 

DATA 語句

用於創建變量

CONSTANTS 語句

用於創建常量(必須賦值),數字常量有數據類型P與I,文本常量有C與N。

STATICS語句

用於創建變量,這些變量在程序運行期間一直存在,但僅在過程中可見

TABLES語句

用於創建表工作區

TYPES 語句

用於創建用戶定義的數據類型

 

語法示例:

DATA : BEGIN OF address2,
  street(20) TYPE c,
  city(20) TYPE c,
  END OF address2.
DATA obj4 TYPE STANDARD TABLE OF address2."這里使用的實質上是詞典中的類型address2
DATA obj5 LIKE STANDARD TABLE OF address2."這里使用是的上面定義的變量address2

3.數據賦值

l  Value參數賦予字段相應的初始值。

WRITE {source|(source_name)} TO destination.

The data objects source_name and destination must be character type and flat.

語法示例:

DATA: date_short TYPE c LENGTH 8,
      date_long  TYPE c LENGTH 10,
      date_mask  TYPE c LENGTH 8.
WRITE sy-datum TO: date_short,
                   date_long,
                   date_mask DD/MM/YY.

WRITE ICON_OKAY AS ICON TO PUBU2. "給PUBU2按鈕添加圖標,並且在給按鈕賦值之前,否則將會把文字替換。

 

MOVE source {TO|?TO} destination.

destination1 = destination2 = ... = destination = source.

MOVE-CORRESPONDING struc1 TO struc2.

UNPACK source TO destination.

For source, the data type p of length 16 without decimal places is expected. The data type of destination must be character-type and flat.

READ LINE line_num FIELD VALUE num.

4.數據清除.

CLEAR dobj [ {WITH val [IN {BYTE|CHARACTER} MODE] } 所有的space被var替代
           | {WITH NULL} ].
如果使用有表頭行的內表,CLEAR 僅清除表格工作區域,CLEAR dobj[] 都清除

 

REFRESH itab.清除內表所有行

FREE  dobj.”內存釋放

5.字符串處理

CONCATENATE

{dobj1 dobj2 ...}|{LINES OF itab}
INTO result
[IN {BYTE|CHARACTER} MODE]
[SEPARATED BY sep] ”用sep分割

SPLIT dobj AT sep INTO
      { {result1 result2 ...} | {TABLE result_tab} }
      [IN {BYTE|CHARACTER} MODE].


[RESPECTING BLANKS].“對於c, d, n, t類型的字符串有一個RESPECTING BLANKS選項可使用,表示尾部空格也會保留。

FIND [{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF]  pattern
IN [section_of] dobj     
pattern:{[SUBSTRING] sub_string} | {REGEX regex}” sub_string in pattern is an empty string or is of type c, d, n, or t and only contains empty characters,  regex in pattern contains a regular expression that is the same as the empty character string,
[IN {BYTE|CHARACTER} MODE]
[{RESPECTING|IGNORING} CASE]
[MATCH COUNT  mcnt]
“成功匹配次數
{ {[MATCH OFFSET moff] [MATCH LENGTH mlen]} ”
最后一次整體匹配到的串(整體串,最外層分組,而不是指正則式最內最后一個分組)起始位置與長度
|[RESULTS result_tab|result_wa]}
result_tab接收所有匹配結果,result_wa只能接收最后一次匹配結果
[SUBMATCHES s1 s2 ...].
通常與前面的MATCH OFFSET/ LENGTH一起使用。只會接收使用括號進行分組的子組。如果變量s1 s2 ...比分組的數量多,則多余的變量被initial;如果變量s1 s2 ...比分組的數量少,則多余的分組將被忽略;且只存儲第一次或最后一次匹配到的結果

REPLACE [{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF] pattern
IN [section_of] dobj WITH new
[IN {BYTE|CHARACTER} MODE]
[{RESPECTING|IGNORING} CASE]
[REPLACEMENT COUNT rcnt]
{ {[REPLACEMENT OFFSET roff] [REPLACEMENT LENGTH rlen]}
| [RESULTS result_tab|result_wa] }.

l   SHIFT dobj {BY num PLACES} | {UP TO sub_string} “sub_string開始

[LEFT|RIGHT][CIRCULAR]  ” CIRCULAR:將移出的字符串放在左邊或者左邊

{ {LEFT DELETING LEADING}|{RIGHT DELETING TRAILING} } pattern

執行結果返回給系統變量SY-SUBRC,若執行成功時,返回值為"0",倘若子串與原字符串不匹配,返回值為"4"。

l   CONDENSE text [NO-GAPS]. 如果是C類型只去掉前面的空格(因為是定長,即使后面空格去掉了,左對齊時后面會補上空格),如果是String類型,則后面空格也會被去掉;字符串中間的多個連續的空格使用一個空格替換(String類型也是這樣);NO-GAPS:字符串中間的所有空格都也都會去除(String類型也是這樣);空格去掉后會左對

l   CONVERT TEXT text INTO SORTABLE CODE hex. 數據對象文本(X)的內容被轉換為可排序的字節序列,結果被分配給變量hex;數據對象文本保持不變,若hexxstring類型,則其長度將自動調整。

l   TRANSLATE text {TO {UPPER|LOWER} CASE}
             | {USING pattern}.

l   SEARCH <c> FOR <str>.

語法示例:

DATA text TYPE string.
text = `Barbcbdbarb`.
TRANSLATE text USING 'rVcX'. ”BaVbXbdbaVb
TRANSLATE text TO UPPER CASE. ”BABVXBDBAVB
WRITE:/ text.

6.PARAMETERS語句

PARAMETERS {para[(len)]}|{para [LENGTH len]}
           [
type_options]
           [
screen_options]
           [
value_options]
           [
ldb_options].

l  type_options:

{ TYPE type [DECIMALS dec] } | { LIKE dobj } |{ LIKE (name)}.

 TYPE type:參照某一類型對象定義PARAMETERS。
 ...DECIMALS dec:定義小數位,對輸入參數自動格式化,該語法只對P類型有效(參數某一類型定義關鍵字TYPE)。
 ...LIKE dobj:參照某一字典對象定義PARAMETERS。

l  screen_options:

{ {[OBLIGATORY|NO-DISPLAY] [VISIBLE LENGTH vlen]}
    | {AS CHECKBOX [USER-COMMAND fcode]}
    | {RADIOBUTTON GROUP group [USER-COMMAND fcode]}
    | {AS LISTBOX VISIBLE LENGTH vlen [USER-COMMAND fcode]
                                      [OBLIGATORY]} }
    [MODIF ID modid].

 ...MEMORY ID pi:將PARAMETERS存儲在SAP內存,參數名長度不能超過三位 ...NO-DISPLAY:將PARAMETERS設置為隱藏,不會的屏幕上輸出。
 ...OBLIGATORY:限制該PARAMETERS為必填,否則會提示輸入。...AS CHECKBOX:創建CHECKBOX對象。

...RADIO BUTTON GROUP radi:創建(RADIO)單選框。...VISIBLE LENGTH vlen:定義顯示長度。
 ...USER-COMMAND ucom:為創建對象分配對象名,該值保存在內表中可供其它對象操作。 ...AS LISTBOX VISIBLE LENGTH vlen:創建一個下拉框,並指定長度.

l   value_options

... [DEFAULT val]
    [LOWER CASE]
    [MATCHCODE OBJECT search_help]
    [MEMORY ID pid]
    [VALUE CHECK] ... .若要使值表檢查生效,則首先需要將此 Domain 引用到表字段,再對此表字段通過 按鈕進行外鍵分配,並且外鍵一定是來自的值表的主鍵,最后使用 PARAMETERS 定義屏幕參數時要參照此表字段,

AS CHECKBOX, RADIOBUTTON, or NO-DISPLAY 不能同時使用...DEFAULT f:定義默認值。 ...LOWER CASE:輸入值中不允許輸入小寫字符,否則會自動轉換為大寫。

l   ldb_options

... FOR {TABLE|NODE} node
    [HELP-REQUEST]
    [VALUE-REQUEST]
    [AS SEARCH PATTERN] ... .

... ON <field>:該語法用於控制屏幕元素輸入時的遇錯處理,檢查具體輸入字段(SELECTION-OPTIONS或PARAMETERS)是否完整或正確,若輸入有錯或不滿足條件,其它屏幕元素會變成灰色,不接受輸入直到該字段輸入正確為止。
      ...ON VALUE-REQUEST FOR <field low/high>:SELECT-OPTIONS按選擇幫助<F4>鍵時觸發該事件。
      ...ON HELP-REQUEST FOR <field low/high>:SELECTION-OPTIONS按選擇幫助<F1>鍵時鍵發該事件。

LISTBOX下拉列表

   FUNCTION ”F4IF_INT_TABLE_VALUE_REQUEST”

   FUNCTION ”VRM_SET_VALUES”.

語法示例:

PARAMETERS:          P1 RADIOBUTTON GROUP GRP1 DEFAULT 'X',
                             P2 RADIOBUTTON GROUP GRP1.

7.字段符號

FIELD-SYMBOLS <fs> { typing | STRUCTURE struc DEFAULT dobj }.

l   FIELD-SYMBOLS:<fs>.

l   FIELD-SYMBOLS <fs> TYPE itab."將<fs>定義成了具體限定類型

8.字段的動態分配

ASSIGN ... TO <fs>:將某個內存區域分配給字段符號,這樣字段符號就代表了該內存區域

l   ASSIGN name TO <fs>."結果是<fs>與name變量等同"靜態分配:編譯時就知道要分配的對象

l   ASSIGN (name) TO <fs>."結果是是<fs>的值為str變量值 "通過變量名動態訪問變量

l   UNASSIGN:該語句是初始化<FS>字段符號,執行后字段符號將不再引用內存區域

l    CLEAR:與UNASSIGN不同的是,只有一個作用就是初始化它所指向的內存區域,而不是解除分

語法示例:

DATA: BEGIN OF line,
  col1 TYPE i VALUE '11',
  col2 TYPE i VALUE '22',
  col3 TYPE i VALUE '33',
END OF line.
DATA comp(5) VALUE 'COL3'.
FIELD-SYMBOLS: <f1>, <f2>, <f3>.
ASSIGN line TO <f1>.
ASSIGN comp TO <f2>.

"還可以直接使用以下的語法訪問其他程序中的變量
ASSIGN ('(ZJDEMO)SBOOK-FLDATE') TO <fs>.

"通過索引動態的訪問結構成員
ASSIGN COMPONENT sy-index OF STRUCTURE <f1> TO <f3>.

"通過字段名動態的訪問結構成員
ASSIGN COMPONENT <f2>OF STRUCTURE <f1> TO <f3>.

9.預置函數

... func( arg ) ...

l   數值運算及算術運算函數

ADD 10 to int.

SUBSTRACT 10 from int.

MULTIPLY int by 10.

DIVIDE int by 10.

語法示例:

DATA: i1 TYPE I,i2 TYPE I,i3 TYPE I,
      f1 TYPE p DECIMALS 1, f2 TYPE p VALUE '2.3' DECIMALS 1,f3 TYPE p DECIMALS 1,
word1 TYPE string VALUE 'ABCD',word2 TYPE string VALUE 'EFG',xstr TYPE XSTRING.
 f1 = ( i1 + EXP( f2 ) ) * i2 / SIN( 3 - i3 ).
    COMPUTE f3 = SQRT( SQRT( ( i1 + 12 ) * i3 ) + f2 ).”注意符號間間距
     i1 = STRLEN( word1 ) + STRLEN( word2 ).
WRITE:/ i1,i2,i3,f1,f2,f3.

10. DESCRIBE

DESCRIBE TABLE itab[KIND knd][LINES lin][OCCURS n].

KIND knd :T 時代表標准表,為S時代表排序表,為H時代表哈希表

 LINES lin  內表表行數量

 OCCURS n在內表用選項initial size 或者老式的選項ocurs創建期間決定內表所需要的初始化內存大小

DESCRIBE DISTANCE

DESCRIBE DISTANCE BETWEEN dobj1 AND dobj2 INTO dst
                          IN {BYTE|CHARACTER} MODE.

dobj1 and dobj2兩個變量地址起始位置的距離


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM