ABAP开发基础.docx
《ABAP开发基础.docx》由会员分享,可在线阅读,更多相关《ABAP开发基础.docx(43页珍藏版)》请在冰豆网上搜索。
ABAP开发基础
[推薦]ABAP編程基礎
Ø資料類型
C:
字串
D:
日期型格式為YYYYMMDD 例:
'1999/12/03'
F:
浮點數 長度為8
I:
整數
N:
數值組成的字串如:
011,'302'
P:
PACKED數用於小數點數值 如:
12.00542
T:
時間格式為:
HHMMSS如:
'14:
03:
00'
X:
16進制數如:
'1A03'
*-------------------------------------------------------------------------------------*
Ø變數宣告
DATA[][][decimals]
變數名稱
變數類型及長度
初值
小數位數
exp:
DATA:
COUNTER TYPEPDECIMALS3.
NAME(10)TYPECVALUE'DELTA'.
S_DATE TYPEDVALUE'19991203'.
exp:
DATA:
BEGINOFPERSON,
NAME(10)TYPEC,
AGE TYPEI,
WEIGHT TYPEDECIMALS2,
ENDOFPERSON.
另外,有關DATA宣告的指令還有:
CONSTANTS(宣告常數)、STATICS(臨時變數宣告).
exp:
CONSTANTS PI TYPE P DECIMALS 5 VALUE '3.14159'.
STATICS敍述
宣告的變數僅在目前的程式中使用,結束後會自動釋放
語法:
STATICS[][][]
Ø系統專用變數說明
系統內部專門創建了SYST這個STRUCTURE,裏面的欄位存放系統變數,常用的系統變數有:
SY-SUBRC:
系統執行某指令後,表示執行成功與否的變數,'0'表示成功
SY-UNAME:
當前使用者登入SAP的USERNAME;
SY-DATUM:
當前系統日期;
SY-UZEIT:
當前系統時間;
SY-TCODE:
當前執行程式的Transactioncode
SY-INDEX:
當前LOOP迴圈過的次數
SY-TABIX:
當前處理的是internaltable的第幾筆
SY-TMAXL:
Internaltable的總筆數
SY-SROWS:
螢幕總行數;
SY-SCOLS:
螢幕總列數;
SY-MANDT:
CLIENTNUMBER
SY-VLINE:
畫豎線
SY-ULINE:
畫橫線
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:
'USERNAMEIS:
',SY-UNAME.
二.指定螢幕輸出位置
指定輸出位置的語句格式為:
WRITE:
[AT][/][][()]資料項[]
其中:
/:
在下一行輸出
:
指定輸出的行號;
():
指定輸出位數(長度)
:
指定顯示格式參數,參數有:
LEFT-JUSTIFIED 資料靠左對齊
CENTERED 數據靠中間對齊
RIGHT-JUSTIFIED資料靠右對齊
UNDER 正對在資料項目的下麵顯示
NO-GAP 緊接著顯示,不留空格
USINGEDITMASK:
使用內嵌子元顯示,如12:
03:
20
USINGNOEDITMASK:
不使用內嵌子元
NO-ZERO:
數位元前面0的部分不顯示
NO-SIGN:
不顯示正負號
DECIMALS:
顯示位元小數
EXPOENT:
F(浮點數)指數的值
ROUND:
四捨五入至小數點後位
CURRENCY:
幣別顯示
DD/MM/YY:
日期顯示格式
MM/DD/YY:
YY/MM/DD:
YY/DD/MM
MM/DD/YYYY:
DD/MM/YYYY
YYYY/MM/DD:
YYYY/DD/MM:
例如1:
WRITE:
/10(6)'ABCDEFGHIJK'.
輸出結果為:
ABCDEF
例如2:
DATA:
XTYPEIVALUE'112030',
A(5) TYPECVALUE'AB CDE'.
WRITE:
/XUSINGEDITMASK'__:
__:
__'.
WRITE:
/XUSINGEDITMASK'$___,___'.
WRITE:
/YNO-GAP.
輸出結果為:
11:
20:
30
$112,030
ABCDEF
例如3:
DATA:
LENTYPEIVALUE10,
POSTYPEIVALUE11,
TEXT(10) VALUE'1234567890'
WRITE'Thetext------------appearsinthetext.'.
WRITEATPOS(LEN)TEXT.
WRITETO語句的基本形式
要將值(文字)或源字段內容寫入目標欄位,可以使用WRITETO語句:
語法
WRITETO[
DATA:
NUMBERTYPEFVALUE'4.3',
TEXT(10),
FLOATTYPEF,
PACK TYPEPDECIMALS1.
WRITENUMBER.
WRITENUMBERTOTEXTEXPONENT2.
WRITE/TEXT.
WRITENUMBERTOFLOAT.
WRITE/FLOAT.
WRITENUMBERTOPACK.
WRITE/PACK.
MOVENUMBERTOPACK.
WRITE/PACK.
exp:
DATA:
NAME(10) VALUE'SOURCE',
SOURCE(10)VALUE'Antony',
TARGET(10).
...
WRITE(NAME)TOTARGET.
WRITE:
TARGET.
exp:
DATA:
COUNTERTYPEI.
COMPUTECOUNTER=COUNTER+1.
COUNTER=COUNTER+1.
ADD1TOCOUNTER.
在此,三條運算語句進行相同算術運算
輸出螢幕上的線和空行
用下列語法,可以在輸出螢幕上生成水準線:
語法
ULINE[AT[/][][()]].
它等同於
WRITE[AT[/][][()]]SY-ULINE.
AT後的格式規範,與在在螢幕上定位元WRITE輸出(頁28)中為WRITE語句說明的格式規範完全一樣。
如果沒有格式規範,系統則開始新的一行,並用水準線填充該行。
否則,只按指定輸出水準線。
生成水準線的另一種方法,是在WRITE語句中鍵入恰當數量的連字元,如下所示:
WRITE[AT[/][][()]]'-----...'.
垂直線
用下列語法,可以在輸出螢幕上生成垂直線:
語法
WRITE[AT[/][]]SY-VLINE.
或
WRITE[AT[/][]]'|'.
空行
用下列語法,可以在輸出螢幕上生成空行:
語法
SKIP[].
該語句從當前行開始,在輸出螢幕上生成個空行。
如果沒有指定的值,就輸出一個空行。
要將輸出定位元在螢幕的指定行上,請使用:
語法
SKIPTOLINE.
該語句允許將輸出位置向上或向下移動。
四. 顯示圖示:
語法:
WRITE:
ASSYMBOL.
WRITE:
ASICON.
例如:
INCLUDE .
INCLUDE .
WRITE:
/'Phonesymbol:
',SYM_PHONEASSYMBOL.
WRITE:
/'AlarmIcon:
',ICON_VOICE_OUTPUTASICON.
要查看系統所提供有那些符號及圖示,可選擇'EDIT'下的'InsertStatement',選擇'Write',接下來選擇要查看的群組,如SYMBOL或ICON,接下來按'Display'即可.
*-------------------------------------------------------------------------------------*
Ø一. InternalTable的宣告
ABAP/4中的InternalTable是一種DataStructure,類似於其他語言中的STRUTURE,它可以由幾個不同類型的欄位(field)組成,用來表示具有不同屬性的某一事物,單獨一筆資料表示某個事物,多筆資料表示具有相同屬性的多個事物.
Internaltable的定義有以下幾種格式:
格式一. DATA:
BEGINOF OCCURS ,
TYPE,
[ TYPE,
TYPE,
… ]
ENDOF .
語法:
DATA OCCURS [WITH HEADER LINE]
Example:
DATA VECTOR TYPE I OCCURS 10 WITH HEADER LINE.
格式二. TYPES:
BEGINOF,
TYPE,
[ TYPE,
TYPE,
… ]
ENDOF.
TYPESTYPEOCCURS.
格式三. DATA:
BEGINOF.
INCLUDESTRUCTURE.
DATA:
ENDOF.
DATA:
LIKEOCCURS.
exp:
TYPESVECTORTYPEIOCCURS10.
TYPES:
BEGINOFLINE,
COLUMN1TYPEI,
COLUMN2TYPEI,
COLUMN3TYPEI,
ENDOFLINE.
TYPESITABTYPELINEOCCURS10.
TYPES:
BEGINOFDEEPLINE,
TABLE1TYPEVECTOR,
TABLE2TYPEITAB,
ENDOFDEEPLINE.
TYPESDEEPTABLETYPEDEEPLINEOCCURS10.
本示例創建與上例相同的內表資料類型(VECTOR和ITAB)。
然後創建資料類型DEEPLINE作為欄位串,包含這些內表作為組件。
通過該欄位串,數據類型DEEPTABLE被創建為內表。
因此該內表的元素本身就是內表。
exp:
TYPES:
BEGINOFLINE,
COLUMN1TYPEI,
COLUMN2TYPEI,
COLUMN3TYPEI,
ENDOFLINE.
TYPESITABTYPELINEOCCURS10.
DATATAB1TYPEITAB.
DATATAB2LIKETAB1WITHHEADERLINE.
同創建內表數據類型(頁99)中所示,該示例創建數據類型ITAB作為內表。
通過使用DATA語句的TYPE參數引用ITAB,使資料物件TAB1與ITAB結構相同。
通過使用DATA語句的LIKE參數引用TAB1,使資料物件TAB2結構相同。
創建的TAB2帶表頭行。
因此,可以在程式中使用TAB2-COLUMN1、TAB2-COLUMN2和TAB2-COLUMN3等定位表格工作區域TAB2。
exp:
DATAFLIGHT_TABLIKESFLIGHTOCCURS10.
本示例創建資料物件FLIGHT_TAB,其結構與數據庫表格SFLIGHT相同。
本示例介紹如何採用兩種不同的步驟創建同一內表。
TYPESVECTOR_TYPETYPEIOCCURS10.
DATAVECTORTYPEVECTOR_TYPEWITHHEADERLINE.
在此創建一個內表資料類型VECTOR_TYPE,其行包含首先創建的基本類型I欄位。
然後,通過引用VECTOR_TYPE創建資料對象VECTOR。
通過使用WITHHEADERLINE選項還創建表格工作區域VECTOR。
在這種情況下,表格工作區域包含一種類型I欄位,可以通過名稱VECTOR定位。
DATAVECTORTYPEIOCCURS10WITHHEADERLINE.
在這種情況下,通過直接在DATA語句中使用OCCURS選項創建完全一樣的數據類型VECTOR。
*-------------------------------------------------------------------------------------*
1.TYPEStype.
2.TYPEStype(len).
3.TYPES:
BEGINOFstructype ...
ENDOFstructype.
4.TYPESitabtype{TYPEtabkindOFlinetypeLIKEtabkindOFlineobj}
[WITH[UNIQUE|NON-UNIQUE]keydef][INITIALSIZEn].
5.TYPESitabtypeTYPERANGEOFtype.
TYPESitabtypeLIKERANGEOFf.
6.TYPESitabtype{TYPElinetype|LIKElineobj}OCCURSn.
*-------------------------------------------------------------------------------------*
APPENDLINE
格式:
APPENDTO
舉例一:
(使用WORKAREA)
DATA:
BEGINOFLINE,
COL1TYPEI,
COL2TYPEI,
ENDOFLINE.
DATAITABLIKELINEOCCURS10.
DO2TIMES.
LINE-COL1=SY-INDEX.
LINE-COL2=SY-INDEX**2.
APPENDLINETOITAB.
ENDDO.
LOOPATITABINTOLINE.
WRITE:
/LINE-COL1,LINE-COL2.
ENDLOOP.
舉例二(不使用WORKAREA)
DATA:
BEGINOFITABOCCURS10,
COL1TYPEI,
COL2TYPEI,
ENDOFITAB.
DO2TIMES.
ITAB-COL1=SY-INDEX.
ITAB-COL2=SY-INDEX**2.
APPENDITAB.
ENDDO.
LOOPATITAB.
WRITE:
/ITAB-COL1,ITAB-COL2.
ENDLOOP.
exp:
DATA:
BEGINOFITABOCCURS10,
COL1TYPEC,
COL2TYPEI,
ENDOFITAB.
DO3TIMES.
APPENDINITIALLINETOITAB.
ITAB-COL1=SY-INDEX.ITAB-COL2=SY-INDEX**2.?
?
?
APPENDITAB.
ENDDO.
LOOPATITAB.
WRITE:
/ITAB-COL1,ITAB-COL2.
ENDLOOP.
舉例三.(加入另一個Internaltable的元素)
格式:
APPENDLINESOF[FROM][TO]TO.
將的元素加入至中,可選取自至的範圍.
APPENDLINESOFITABTOJTAB.
COLLECTLINE
COLLECT指令也是將元素加入Internaltable中,與APPEND的區別是:
COLLECT指令在非數值欄位相同的情況下,將數值欄位匯總.
格式:
COLLECT[INTO]
DATA:
BEGINOFITABOCCURS3,
COL1(3) TYPEC,
COL2 TYPEI,
ENDOFITAB.
ITAB-COL1='ABC'. ITAB-COL2=10.
COLLECT ITAB.
ITAB-COL1='XYZ'. ITAB-COL2=20.
COLLECT ITAB.
ITAB-COL1='ABC'. ITAB-COL2=80.
COLLECT ITAB.
此時,internaltable中放的是2筆資料,分別為:
ITAB-COL1 ITAB-COL2
'ABC' 90
'XYZ' 20
*-------------------------------------------------------------------------------------*
INS