引用类型zref数据对象myref在程序中的声明方式.docx
《引用类型zref数据对象myref在程序中的声明方式.docx》由会员分享,可在线阅读,更多相关《引用类型zref数据对象myref在程序中的声明方式.docx(47页珍藏版)》请在冰豆网上搜索。
![引用类型zref数据对象myref在程序中的声明方式.docx](https://file1.bdocx.com/fileroot1/2023-1/9/b8c7d9ec-8a37-41ec-9841-465f9696595e/b8c7d9ec-8a37-41ec-9841-465f9696595e1.gif)
引用类型zref数据对象myref在程序中的声明方式
1.引用類型z_ref數據對象myref在程序中的聲明方式:
DATAmyrefTYPEz_ref.
CREATEDATAmyrefTYPEz_ref.
2.參照數據字典中的表類型生成內表對象或結構體:
DATAmytableTYPEz_table,”數據字典表類型,聲明內表.
mylineTYPELINEOFz_table.”表類型的行結構,聲明結構體.
3.取系統日期:
SY-DATUM,
4.取系統時間:
SY-UZEIT.0
5.系統字段定位:
SY-FDPOS.字符比較結果為真時,此字段將給出偏移量信息.
6.系統字段SY-FDPOS給出字符的位置信息.(P109)
7.系統字段SY-INDEX記錄循環語句中的循環次數
8.操作內表行結束后系統字段SY-TABIX返回該行索引.對於所有行操作,如果操作成功,系統變量SY-SUBRC返回0,否則返回非0值.
9.系統用戶名:
SY-UNAME.
10.SY-HOST?
屏幕序號:
sy-dynnr.
11.OK代碼:
SY-UCOMM或SYST-UCOMM
12.屏幕組ID:
SY-DYNGR.
13.常量聲明:
CONSTANTconst(len)TYPEtype|LIKEdobj[DECIMALSdec][VALUEval].
14.確定數據對象屬性:
DESCRIBEFIELDf[LENGTHl][TYPEt[CONPONENTSn]][OUTPUT-LENGTHo][DECIMALSd][EDITMASKm][HELP-IDh].
15.數據賦值:
MOVEsourceTOdestination.或destination=source.
16.設定初始值:
CLEARF.
17.檢查字段是否為初始值:
fISINITIAL….
18.檢查字段是否被分配:
fsISASSIGNED…..
19.檢查過程中的參數是否被實參填充:
pIS[SUPPLIED|REQUESTED]….
20.檢查數據對象的值是否屬于某範圍之間:
f1BETWEENf2ANDf3…..
21.檢查數據對象f的內容是否遵從某個選擇表的邏輯條件:
finseltab….
22.WRITE:
/10g,”在10個空格后輸出變量g
/(8)timeusingeditmask‘__:
__:
__’.”輸出的變量time保持8位的長度.
23.將光標移動到下一行:
SKIP.
24.強制結束循環:
EXIT,STOP或REJECT.
25.循環的中止:
CONTINUE無條件中止當前循環並開始下一輪循環,CHECK條件為真時循環,為假時結束本次循環並開始下一輪循環,EXIT無條件中止並退出整個循環.
26.將字符串左移:
SHIFTstring.
27.連接字符串:
CONCATENATEs1s2…..snINTOs_dest[SEPARATEDBYsep].如果結果出現被截斷的情況,將SY-SUBRC返回4,否則返回0.符號&用于在字字符串換行時的連接.
28.根據分隔符sep拆分字符串:
SPLITs_sourceATsepINTOs1s2……sn.使用內表操作可以避免被截斷的情況:
SPLITs_sourceATsepINTOTABLEitab.此語句根據子串數目生成n行的內表.
29.循環輸出內表的每一行數據:
LOOPATitabINTOtext.ENDLOOP.
30.替換字段內容:
REPLACEstr1WITHstr2INTOs_dest[LENGTHlen].字段SY-SUBRC的返回值為0時表示己成功替換.
31.確定字段長度:
[COMPUTE]n=STRLEN(str).
32.刪除字符串中的多余空格:
CONDENSE
33.字符轉換,如將ABC轉換為abc:
TRANSLATE
34.創建一個可以排序的格式:
CONVERTTEXT.
35.用一個字符串覆蓋另一個字符串:
OVERLAY
36.WRITETO賦值時將忽略數據對象的類型,而將其視為字符類型數據.
37.字符串比較中的換碼字符:
#,用於轉換比較時使用的通配符:
*或+.及進行區分大小寫,空格的比較,如#A表示比較大寫的A.
38.定位操作子串:
strName[+0][
(1)].
39.字段符號,數據引用:
動態數據對象.
40.子程序定義:
FORMsubroutine_nameUSINGparameters1parameters2….….ENDFORM.
41.子程序調用:
PERFORMsubroutine_nameUSINGactual_parameters1p2….(其中USING可換成CHANGING)
42.ULINE.輸出下劃線.
43.錯誤查看:
ST22
44.程序打包release:
SE01:
找到對應的程序,點開后點上面小汽車,再選中上面的后再點小汽車.點check.程序修改后需要重新打包.
45.制作T-CODE:
SE93,TCODE應按順序編號:
ZMF+流水號,我的程序名
46.創建table:
t-code:
se11,attributes:
Deliveryclass:
C.開發類別:
ZFI,當自定義Fieldtype時,名稱需為Z+…..格式.->設置技術屬性(TechnicalSetting):
Logicalstorageparameters中Dataclass:
APPL1,Sizecategory:
4創建functiongroup:
SE80,創建好后將創建的TABLE挂接到functiongrouph上去:
用se11查出table,點utilites->tablemaintenancegenerator:
Authorizationgroups:
&NC&,Functiongroup中填剛才創建的功能組名稱->onestep->overviewscreen中必須填未使用的number,此處screennumber與table是一一對應的關系,也可讓點系統上面的按鈕:
findscreennumber來自動搜索適合的scr.Number.->create,成功后,找到對應的functiongroup中的screennumber雙擊即可看到生成的代碼.需要修改欄位名稱可在functiongroup中的elementlist或layout中.-->se93創建t-code,startobject選transactionwithparameters(parametertransaction)->defaultvaluesfor->transantion:
SM30->DefaultValues->nameofscreenfield:
viewname\update,value:
tablename\X.
47.field-sign:
field—option:
field-low:
表示選擇條件中起始值
48.在where子句中如果只有一個表的話,可以不用指定表名.
49.獲取用戶IP地址及用戶名:
callfunction'TH_USER_INFO'"GetuserIP,hostname
importing
hostaddr=iporg”轉化前的IP地址
terminal=host”電腦名
exceptions
others=1.
"Conv.IPaddrtoformat'xxx.xxx.xxx.xxx'
callfunction'ZGJ_IPADR2STRING'"Conv.IPaddr
exporting
ipadr=iporg”轉化前的IP地址
importing
string=ipdec.”轉化后的最終需要的IP地址
50.刪除內表中數據完全相同的行,只保留一行:
deleteadjacentduplicatesfromitab1COMPARING/COMPARINGALLFIELDS.
51.spro:
后臺設定
52.輸出選擇框write:
/itab1-flagascheckbox
第四章ABAP基礎
4.1.5程序運行
1.程序內部調用,如下表:
功能
報表調用語句
事務調用語句
無返回調用
SUBMIT
LEAVETOTRANSACTION
調用並返回
SUBMITANDRETURN
CALLTRANSACTION
例:
REPORTz_calling_program.
START-OF-PROGRAM.
WRITE‘Thisprogramcallsanotherprogram.’.”此內容在輸出界面看不到
SUBMITz_simple_program.”上面的輸出被此程序覆蓋.
如果改用SUBMITANDRETURN來調用則可以輸出以上內容.
2.結束程序:
LEAVEPROGRAM.可在任意點強制結束當前運行的程序.
4.1.6內存管理
SAP程序同一個用戶和系統可進行最多6個SAPGUI主會話.
4.2.1數據定義
TYPES:
BEGINOFt_staff,
S_no(3)typen,
Name(20),
ENDOFt_staff.
DATAstaffTYPEt_staff.
上例中定義了一個結構類型t_staff,並根據其聲明了一個結構體對象staff.
數據類型中的扁平結構與縱深結構:
扁平類型:
運行時長度固定的類型.
縱深類型:
運行時長度可巒的類型.
4.2.2ABAP內置基本數據類型:
數據
類型
默認大小
有效大小
初始值
說明
示例
C
1
1-65535
SPACE
文本字符(串)
‘name’
N
1
1-65535
’00…0’
數字文本
‘0123’
T
6
6
‘000000’
時間(HHMMSS)
‘123010’
D
8
8
‘00000000’
日期(YYYYMMDD)
‘20080101’
I
4
4
0
整型(整數)
99
F
8
8
0
浮點數
5E+04
P
8
1-16
0
壓縮數
12.91
X
1
1-65535X
‘0’
十六進制數
‘3A’
String
1
無限定
SPACE
字符串(長度可巒)
‘AString’
XString
1
無限定
SPACE
十六進制字符串
‘A3FF’
注意:
1.其中C,N,T,D,I,F,P,X為定長類型,即在運行期間長度不能改變.
2.類型T,D,I,F的數據存儲長度是固定的,不能指定參照其生成的數據對象占用的內存字節數.
3.基于類型C,N,P,X生成的數據對象需要在聲明時指定其長度.否則取默認值.
4.如果在聲明一個數據對象時未指明其數據類型,則該數據默認為C類型.
5.類型I的數值範圍:
-231到231-1的整數.如果運算時出現非整型結果則進行四舍五入取值.而不是截斷小數.
6.類型P用于聲明小數位固定的壓縮數,其占據內存字節數和數值範圍取決於定義時指定的整個數據的大小和小數點后位數,如果不指定小數位,則將其視為I類型數據.有效大小可以是從1~16字節的任意值,小數點后最多允許14個數字.
7,類型F為浮點數,浮點意思是數字在內存中以字節形式表示,數值範圍:
1*10-307到1*10308,因系統將F類型轉換為二進制數,所以可能出現舍入誤差,若用戶要求較高精度且數值較大時,應使用P類型數據.
8.長度可巒的內置類型String,XString是通過引用實際動態的數據對象的固定內存地址來操作.
4.2.3程序內部數據定義
參照自定義類型或內置類型生成數據的語法格式:
TYPES|DATA…TYPEl_type…
參照程序中已經聲明的數據對象生成新數據語法:
TYPES|DATA…LIKEdobj…
3.結構類型和結構體
參照結構類型生成的數據對象稱為結構體.
TYPES|DATA:
BEGINOFstructure.
k1[TYPEtype|LIKEdobj]…,
k2[TYPEtype|LIKEdobj]…,
…
kn[TYPEtype|LIKEdobj]…,
ENDOFstructure.
參照生成:
參照結構生成:
TYPES|DATAstructureTYPEstr_type|LIKEstr_dobj...
參照數據庫表生成:
TYPES|DATAstructureTYPEdbtab.
4.表類型和內表
表類型的對象稱為內表.
4.2.4數據字典中的類型
●數據元素(Dataelements),相當於ABAP中的基本類型和引用類型.
●結構(Structures),由數據元素字段構成,對應ABAP中的結構類型.
●表類型(Tabletypes),對應ABAP中的表類型.
數據字典中的數據類型與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
1~17
貨幣金額
DATS
D(8)
8
日期
DECn,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~最大值
長位字符
NUMCn
N(n)
1~255
數值文字
PREC
X
(2)
16
精確度
QUANn,m
P((n+1)/2)DECIMALm
1~17
數量
RAWn
X(n)
1~255
位字串
TIMS
T(6)
6
時間
VARCn
C(n)
255~最大值
長字符(僅V3.0前可用)
STRING
STRING
1~最大值
字符串
RAWSTRING
XSTRING
1~最大值
位字符串
UNIT
C(n)
2~3
單位
4.2.5程序中的數據對象
1.文字對象
當字符文字長度超過編輯器的一行時,可以使用”&”進行連接,避免因換行而產生的多余空格,如:
long=‘Thisis‘&
‘alongsentence’.
如果需要輸出“’”,則需要在前面多加一個“’”轉回願意.
2.有名稱的數據對象
常量聲明:
CONSTANT:
const(len)TYPE|LIKEdobj[DECIMALSdec]VALUEval.
結構體常量聲明(每個組件必須指定初始值):
CONSTANT:
BEGINOFstructure,
str1TYPE|LIKEdobj[DECIMALSdec]VALUEval,
str2TYPE|LIKEdobj[DECIMALSdec]VALUEval,
...,
strnTYPE|LIKEdobj[DECIMALSdec]VALUEval,
ENDOFstructure.
3.系統數據對象(見附表)
4.查明數據對象屬性
DESCRIBEFIELDfLENGTHlen.此語句將字段f的長度寫入變量len.
●LENGTH:
確定數據對象長度.
●TYPE:
確定數據對象類型.
●OUTPUT-LENGTH:
確定實際輸出長度.
●DECIMALS:
確定P類型小數位長.
●EDITMASK:
確定在數據字典中定義轉換例程.
●HELP-ID:
確定在數據字典中定義的F1幫助信息.
4.3基本數據操作
4.3.1數據賦值
●MOVEsourceTOincept.等介於:
incept=source.
●CLEARdobj.將數據對象dobj還原為初始值.
●結構體間賦值:
struct2=struct1.(組件結構相同).
●MOVE-CORRESPONDINGstruct1TOstruct2.(部分組件結構相同).
4.3.2類型轉換(見附表).
4.3.3數值運算
1.算術運算
運算
數學表達式語句
關鍵字語句
加法
n=x+y.
ADDyTOx.
減法
n=x–y.
SUBTRACTyFROMx.
乘法
n=x*y.
MULTIPLYxBYy.
除法
n=x/y.
DIVIDExBYy.
整除
n=xDIVy.
無
取余
n=xMODy.
無
冪(乘方)
n=x**y.
無
兩個結構體的同名字段之間可以整體進行算術運算:
ADD-CORRESPONDINGstruct1TOstruct2.
SUBTRACT-CORRESPONDINGstruct1FROMstruct2.
MULTIPLY-CORRESPONDINGstruct2BYstruct1.
DIVIDE-CORRESPONDINGstruct2BYstruct1.
以上將對兩個結構體中的同名字段進行相應運算(非數值類型數據會引起錯誤).
2.數學函數
任意類型參數的函數列表:
函數名
說明
ABS(dobj)
返回參數絕對值
SIGN(dobj)
返回參數符號:
正數返回1,0返回0,負數返回-1.
TRUNC(dobj)
返回參數的整數部分
FRAC(dobj)
返回參數的小數部分
CEIL(dobj)
返回不小於輸入參數的最小整數值
FLOOR(dobj)
返回不大於輸入參數的最大整數值
注意:
函數名與左括號間不能有空格,括號與參數間必須有空格.
F類型參數的函數列表(其它類型參數將首先被轉換為F類型).
函數名
說明
COS,SIN,TAN
三角函數
ACOS,ASIN,ATAN
反三角函數
COSH,SINH,TANH
雙曲函數
EXP
底數為e(2.7182818285)的冪函數
LOG
底數為e的自然對數
LOG10
底數為10的對數
SQRT
平方根
4.3.4數據輸出
輸出格式化選項:
選項
應用類型
說明
LEFT-JUSTIFIED
所有類型
左對齊
CENTERED
所有類型
居中
RIGHT-JUSTIFIED
所有類型
右對齊
UNDERg
所有類型
輸出直接開始於字段g
NO-GAP
所有類型
忽略輸出時字段后的一位空格
USINGEDITMASKm
所有類型
指定數據字典中定義的格式模板m
USINGNOEDITMASK
所有類型
撤消對格式模板的激活
NO-ZERO
所有類型
用空格替代所有有前導零
NO-SIGN
數值類型
不輸出前導符號
DECIMALSd
數值類型
輸出d定義小數點后的數字位數,如需截斷,則四舍五入
EXPONENTe
數值類型
對F類型字段在e>定義冪指數
ROUNDr
數值類型
用10的負r次方乘P類型字段,然后取整
CURRENCYc
數值類型
按系統表格TCURX中定義的格式將貨幣c格式化
DD/MM/YY|MM/DD/YY
時間日期
格式調整,”/”為用戶主記錄中定義的分隔符
DD/MM/YYYY,...(同上)
時間日期
格式調整,”/”為用戶主記錄中定義的分隔符
DDMMYY...(同上)
時間日期
格式調整,無分隔符
注:
用戶主記錄System->Userprofile->Owndata(SU01).
4.3.5邏輯表達式
通用邏輯表達式列表:
運算符
意義
EQ或=
等於
NE或<>或><
不等于
LT或<
小于
LE或<=
小于等于
GT或>
大于
GE或>=
大于等于
3.IS操作符
●...fISINITIAL...:
檢查字段f是否為初始值.
●...fsISASSIGNED...:
檢查字段符號是否被分配.
●...pIS[SUPPLIED|REQUESTED]...:
檢查過程中的參數是否被實參填充.
4.BETWEEN操作符
●...f1BETWEENf2ANDf3...:
檢查數據對象的值是否屬于特定範圍之間.
5.IN操作符(P110)
●...fINseltab...:
檢查一個數據對象的內容是否遵從某個選擇表的邏輯條件.
6.組合邏輯表達式
●AND:
與.
●OR:
或.
●NOT:
非.
注:
括號與操作數間至少要有一個空格,如:
IF(c>n)AND(c4.4結構控制
程序代碼分三種結構:
●順序結構:
語句逐行執行.
●分支結構:
根據不同的條件執行不同語句塊.
●循環結構:
反復執行某個語句.
4.4.1分支控制
1.IF/ENDIF結構:
IF.
ELSEIF.
......
ELSE.
ENDIF.
注:
可嵌套.
2.CASE/ENDCASE結構:
CASEf.
WHENf11[ORf12OR...].
......
[WHENOTHERS.]
ENDCASE.
其中,f為變量,fij可以是變量或者固定值.
4.4.2循環控制
1.無條件循環
DO[nTIMES].
ENDDO.
說明:
n為循環次數,可以是文字或變量,如果沒有限定n值,則必須用EXIT,STOP或REJECT等語句強制結束循環.DO循環可嵌套,SY-INDEX為當前循環次數.
2.條件循環
WHILE.
ENDWHILE.
注:
可嵌套,其它同上.
3.循環中止