ABAP基礎語法

1.數據類型及屬性

類型html

說明node

C數據庫

 

Nexpress

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

Dspa

日期格式必須爲 YYYYMMDDcode

Thtm

格式爲 24-hour的 HHMMSS對象

Iblog

-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兩個變量地址起始位置的距離

相關文章
相關標籤/搜索