事件流(6个):
INITIALIZATION(初始化)
AT SELECTION-SCREEN(屏幕跳出前)
START-OF-SELECTION(取数据)
END-OF-SELECTION(展示数据)
TOP-OF-PAGE(普通报表输出页头)
END-OF-PAGE(普通报表输出页尾)
(来自互联网)
1. 引用类型z_ref数据对象myref在程序中的声明方式:
DATA myref TYPE z_ref.
CREATE DATA myref TYPE z_ref.
2. 参照数据字典中的表类型生成内表对象或结构体:
DATA mytable TYPE z_table,”数据字典表类型,声明内表.
myline TYPE LINE OF z_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. 常量声明:CONSTANT const(len) TYPE type|LIKE dobj [DECIMALS dec] [VALUE val].
14. 确定数据对象属性:DESCRIBE FIELD f [LENGTH l] [TYPE t [CONPONENTS n]] [OUTPUT-LENGTH o] [DECIMALS d] [EDIT MASK m] [HELP-ID h].
15. 数据赋值:MOVE source TO destination.或destination = source.
16. 设定初始值:CLEAR F.
17. 检查字段是否为初始值:f IS INITIAL….
18. 检查字段是否被分配:fs IS ASSIGNED…..
19. 检查过程中的参数是否被实参填充:p IS [SUPPLIED|REQUESTED]….
20. 检查数据对象的值是否属于某范围之间:f1 BETWEEN f2 AND f3…..
21. 检查数据对象f的内容是否遵从某个选择表的逻辑条件:f in seltab….
22. WRITE: /10 g,”在10个空格后输出变量g
/(8) time using edit mask ‘__:__:__’.”输出的变量time保持8位的长度.
23. 将光标移动到下一行:SKIP.
24. 强制结束循环:EXIT,STOP或REJECT.
25. 循环的中止:CONTINUE无条件中止当前循环并开始下一轮循环,CHECK条件为真时循环,为假时结束本次循环并开始下一轮循环,EXIT无条件中止并退出整个循环.
26. 将字符串左移:SHIFT string.
27. 连接字符串:CONCATENATE s1 s2 …..sn INTO s_dest [SEPARATED BY sep].如果结果出现被截断的情况,将SY-SUBRC返回4,否则返回0.符号&用于在字字符串换行时的连接.
28. 根据分隔符sep拆分字符串:SPLIT s_source AT sep INTO s1 s2 ……sn.使用内表操作可以避免被截断的情况:SPLIT s_source AT sep INTO TABLE itab.此语句根据子串数目生成n行的内表.
29. 循环输出内表的每一行数据:LOOP AT itab INTO text.ENDLOOP.
30. 替换字段内容:REPLACE str1 WITH str2 INTO s_dest [LENGTH len]. 字段SY-SUBRC的返回值为0时表示己成功替换.
31. 确定字段长度:[COMPUTE] n = STRLEN( str ).
32. 删除字符串中的多余空格:CONDENSE
33. 字符转换,如将ABC转换为abc:TRANSLATE
34. 创建一个可以排序的格式:CONVERT TEXT.
35. 用一个字符串覆盖另一个字符串:OVERLAY
36. WRITE TO赋值时将忽略数据对象的类型,而将其视为字符类型数据.
37. 字符串比较中的换码字符:#,用于转换比较时使用的通配符:*或+.及进行区分大小写,空格的比较,如#A表示比较大写的A.
38. 定位操作子串:strName[+0][(1)].
39. 字段符号,数据引用:动态数据对象.
40. 子过程定义:FORM subroutine_name USING parameters1 parameters2…. ….ENDFORM.
41. 子程序调用:PERFORM subroutine_name USING actual_parameters1 p2…. (其中USING可换成CHANGING)
42. ULINE.输出下划线.
43. 错误查看:ST22
44. 程序打包release:SE01:找到对应的程序,点开后点上面小汽车,再选中上面的后再点小汽车.点check.程序修改后需要重新打包.
45. 制作T-CODE:SE93,TCODE应按顺序编号:ZMF+流水号,我的程序名
46. 创建table:t-code:se11,attributes:Delivery class:C.开发类别:ZFI,当自定义Field type时,名称需为Z+…..格式.->设置技术属性(Technical Setting):Logical storage parameters中Data class:APPL1,Size category:4à创建function group:SE80,创建好后将创建的TABLE挂接到function grouph上去:用se11查出table,点utilites->table maintenance generator:Authorization groups:&NC&,Function group中填刚才创建的功能组名称->one step->overview screen中必须填未使用的number,此处screen number与table是一一对应的关系,也可让点系统上面的按钮:find screen number来自动搜索适合的scr. Number.->create,成功后,找到对应的function group中的screen number双击即可看到生成的代码.需要修改域名可在function group中的element list或layout中.-->se93创建t-code,start object选transaction with parameters(parameter transaction)->default values for->transantion:SM30->Default Values->name of screen field:viewname\update,value:table name\X.
47. field-sign:,field—option:,field-low:表示选择条件中起始值
48. 在where子句中如果只有一个表的话,可以不用指定表名.
49. 获取用户IP地址及用户名:
call function 'TH_USER_INFO' " Get user IP,hostname
importing
hostaddr = iporg”转化前的IP地址
terminal = host”计算机名
exceptions
others = 1.
"Conv.IP addr to format 'xxx.xxx.xxx.xxx'
call function 'ZGJ_IPADR2STRING' "Conv.IP addr
exporting
ipadr = iporg”转化前的IP地址
importing
string = ipdec.”转化后的最终需要的IP地址
50.删除内表中数据完全相同的行,只保留一行: delete adjacent duplicates from itab1 COMPARING <f1> <f2> / COMPARING ALL FIELDS.
51. spro:后台设定
52. 输出选择框write:/ itab1-flag as checkbox
第四章 ABAP基础
4.1.5 程序运行
1.程序内部调用,如下表:
功能 |
报表调用语句 |
事务调用语句 |
无返回调用 |
SUBMIT |
LEAVE TO TRANSACTION |
调用并返回 |
SUBMIT AND RETURN |
CALL TRANSACTION |
例:
REPORT z_calling_program.
START-OF-PROGRAM.
WRITE ‘This program calls another program.’.”此内容在输出界面看不到
SUBMIT z_simple_program.”上面的输出被此程序覆盖.
如果改用SUBMIT AND RETURN来调用则可以输出以上内容.
2.结束程序:LEAVE PROGRAM.可在任意点强制结束当前运行的程序.
4.1.6 内存管理
SAP程序同一个用户和系统可进行最多6个SAPGUI主会话.
4.2.1 数据定义
TYPES:BEGIN OF t_staff,
S_no(3) type n,
Name(20),
END OF t_staff.
DATA staff TYPE t_staff.
上例中定义了一个结构类型t_staff,并根据其声明了一个结构体对象staff.
数据类型中的扁平结构与纵深结构:
扁平类型:运行时长度固定的类型.
纵深类型:运行时长度可峦的类型.
4.2.2 ABAP内置基本数据类型:
数据 类型 |
默认大小 |
有效大小 |
初始值 |
说明 |
示例 |
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 |
字符串(长度可峦) |
‘A String’ |
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 …TYPE l_type…
参照程序中已经声明的数据对象生成新数据语法:
TYPES|DATA …LIKE dobj…
3.结构类型和结构体
参照结构类型生成的数据对象称为结构体.
TYPES|DATA:BEGIN OF structure.
k1 [TYPE type |LIKE dobj]…,
k2 [TYPE type |LIKE dobj]…,
…
kn [TYPE type |LIKE dobj]…,
END OF structure.
参照生成:
参照结构生成:TYPES|DATA structure TYPE str_type |LIKE str_dobj...
参照数据库表生成:TYPES|DATA structure TYPE dbtab.
4.表类型和内表
表类型的对象称为内表.
4.2.4 数据字典中的类型
l 数据元素(Data elements),相当于ABAP中的基本类型和引用类型.
l 结构(Structures),由数据元素字段构成,对应ABAP中的结构类型.
l 表类型(Table types),对应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)DECIMAL m |
1~17 |
货币金额 |
DATS |
D(8) |
8 |
日期 |
DEC n,m |
P((n+1)/2)DECIMAL m |
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)DECIMAL m |
1~17 |
数量 |
RAW n |
X(n) |
1~255 |
位字符串 |
TIMS |
T(6) |
6 |
时间 |
VARC n |
C(n) |
255~最大值 |
长字符(仅V3.0前可用) |
STRING |
STRING |
1~最大值 |
字符串 |
RAWSTRING |
XSTRING |
1~最大值 |
位字符串 |
UNIT |
C(n) |
2~3 |
单位 |
4.2.5 程序中的数据对象
1.文字对象
当字符文字长度超过编辑器的一行时,可以使用”&”进行连接,避免因换行而产生的多余空格,如:long = ‘This is ‘&
‘a long sentence’.
如果需要输出“’”,则需要在前面多加一个“’”转回愿意.
2.有名称的数据对象
常量声明:
CO