1 / 14
文档名称:

ABAP基本语法.pdf

格式:pdf   大小:383KB   页数:14页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

ABAP基本语法.pdf

上传人:花开花落 2023/3/20 文件大小:383 KB

下载得到文件列表

ABAP基本语法.pdf

文档介绍

文档介绍:该【ABAP基本语法 】是由【花开花落】上传分享,文档一共【14】页,该文档可以免费在线阅读,需要了解更多关于【ABAP基本语法 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:.
ABAP基本语法
目录


:
:




























:.







ABAP/4:AdvancedBusinessApplicationProgramming

Tables:表名[,表名].声明多个表时可用逗号分隔
当你声明了一个数据表的同时,系统也同时自动生成了一个和数据表同名的结构,
结构的变量集等于数据表里面的字段。

Data:v1[(l)][typet][decimalsd][value'xxx'].
v1是变量名。
(l)是变量的长度。
t是数据类型。
d是小数位。
'xxx'是缺省值。
如:datanum(10)typepdecimals3value''.
数据类型描述缺省长度最大长度可用字符缺省值
C字符型165536任意字符空
N数字文本1655360~90
D日期8(固定)-0~900000000
T时间8(固定)-0~9000000
X十六进制1655360~9,A~
数F
数据类型描述缺省长度最大长度最大小数位缺省值
I整型4(固定)-00
P十进制数816140

:
算术符描述:.
+加法
-减法
*乘法
/除法
**取幂
DIV整除
MOD取模
:
比较操作描述
v1=v2等于
v1<>v2不等于
v1>v2大于
v1<v2小于
v1>=v2大于等于
v1<=v2小于等于
v1betweenv2andv3在……之间
notv1betweenv2andv3不在……之间

total=10.
mess='thisisatest!'.
如果字符串中包括'号,用''进行付值,如:mess='thisisa''test''!'.

ifi=2.
write'i等于2'.
[else.
write'i不等于2'.]
endif.


'i=1'.
'i=2'.
['i<>1andi<>2'.]
endcase.

do[n]:.
[执行代码]
enddo.

while[条件].类似于VFP中的DOWHILE语句
[执行语句]
endwhile.

select*from数据表[where条件].
[操作语句]
endselect.
如:select*fromt000[wheremandt<200].
write:/t000-mandt,t000-mtext.
endselect.

selectsingle*from数据表[where条件].注:仅取出符合条件的第一
行记录
selectsingle字段from数据表into变量[where条件].

write:[/][定位][数据1][,[定位][数据2]]……
[/]为插入一行空行,注意单独write一个[/]和在其它数据之前加[/]的效果是
不一样的,单独的write[/]在插入空行后光标定位在空行的下面,在其它数据前
加[/]在插入空行后光标定位于所插的空行。



uline/。
uline和write‘|’一起使用可实现画表格的功能。





作用:定义一些不会改变的数据,如一年的月数、圆围率等。
语法:constantsc1[(l)][typet][decimalsd]value'xxx'.
或者:constantsc1likecvvalue'xxx'.
例如:constantspitypepvalue‘’.:.

(1)基本结构
data:beginof结构名,
f1[(l)][typet][decimalsd][value'xxx'],
f2[(l)][typet][decimalsd][value'xxx'],
……
endof结构名.
(2)结构中包含另一结构
data:beginof结构名,
f1[(l)][typet][decimalsd][value'xxx'],
f2[(l)][typet][decimalsd][value'xxx'],
f3like另一结构名,
……
endof结构名.
(3)定义结构的另一种写法:
databeginof结构名.
dataf1[(l)][typet][decimalsd][value'xxx'].
dataf2[(l)][typet][decimalsd][value'xxx'].
[includestructure另一个结构.]
:此种写法data后可以加冒号也可以不加
例如:
data:beginofperson,
educ(10)typec,
train(10)typec,
endofperson.
data:beginofemployee,
code(10)typec,
name(10)typec,
department(20)typec,
addresslikeperson,"person为另一个结构名
……
endofemployee.
employee-code='1001'.
employee-name='张三'.
employee-department='IT部'.
employee-person-educ='本科':.
employee-person-train='工程师'
write:/employee-code,employee-name,employee-department,employee-
person-educ.
write:/employee.

将结构定义成数据类型,这样在程序中可以象定义一个变量那样简单地定义一个结
构。语法同定义结构,只是把data换成types即可。
如:
types:beginofemployee,
code(10)typec,
name(10)typec,
endofemployee.
types:address(50)typec.
data:emptypeemployee.“使用TYPES定义的结构类型
data:myaddtypeaddress.“使用TYPES定义的变量类型
emp-code='1001'.
emp-name='张三'.
myadd='thisisaaddress'.
write:/emp.
write:/myadd.

tables:t000.
data:p(20)typec.
data:p1liket000."p1拥有了和t000相同的结构
data:p2liket000-mandt."p2的定义等同于t000中mandt这个字段
"的定义
data:p3likep."p3的定义和p相同,为20长度的字符

data:t111liket000occurs0withheaderline."定义一个和t000
一样的内表

要让一个变量成为可输入的参数,只需在定义变量时把data改为parameters即
可。
parametersp1likev1...
...[default'xxx'][obligatory][lowercase]
[ascheckbox][radiobuttongroupg].:.
使用DEFAULT后缀为参数指定缺省值。
使用obligatory后缀来标识参数为必输项。
输入参数默认会把输入的字符转为大写,如果要去掉该转换,使用lowercase后
缀。
使用ascheckbox后缀使参数以复选框的形式出现。使用复选框的参数一定为长度
为1的字符串,其内容只能为'X'或'',如:
parameters:p1ascheckbox.
parameters:p2ascheckboxdefault'X'.
使用radiobuttongroupg后缀使输入参数以单选框的形式出现。使用单选框的参
数一定为长度为1的字符串,其内容只能为'X'或'',如:
parameters:p1radiobuttongroup1.
parameters:p2radiobuttongroup1.
parameters:p3radiobuttongroup2.
parameters:p4radiobuttongroup2default'X'.

selection-screenbeginofblock块名withframetitle[text-(titlename)].
parameters:v1(10)typec.
parameters:aaliket000-mandt."将出现圆钮选择项,也可以自定义圆
钮选择项
parameters:v2(10)typecmatchcodeobjectzhlp.
这是自定义的圆钮选择项,在SE38中创建搜索帮助,zhlp为创建的搜索帮助
名称
selection-screenendofblock块名.
selection-screenuline.“在输入屏幕上画线

内表的定义和结构很相似,所差别只是内表需要指定记录的条数。
data:beginof内表名occursn,
f1[(l)][typet][decimalsd][value'xxx'],
f2[(l)][typet][decimalsd][value'xxx'],
...
endof内表名.
n为该内表的记录条数,不过当内表的记录数超过了该数值后,内表会自动的填大
这个数目,定义该数值只是为了系统的效率考虑,如果n为0,则系统会在一开始
就分配8KB的空间。
内表同时也可以以已存在的数据表或结构进行定义,格式为:
data:内表名like[结构名或数据表名]:.
例如:(使用like语句通常需要加上withheaderline,否则没有表头)
data:it1likest1occurs10."st1为一结构
data:it2liket000occurs0."t000为一数据表

append内表名.‘把表头的数据插入内表。
append结构名to内表名.‘把结构的数据插入内表,两者的结构必须一样。

loopatit[intowa][fromm][ton][whereexp].
Write:/it-字段1,it-字段2,……
endloop.
it为内表名
wa为结构名,如果不填,则读到表头。
m,n为开始和结束行,如果不填则为从第一条到最后条。
exp为取记录的条件。

READ功能为读取内表的某条记录。
readtableit[intowa][indexi|withkeykeyexp]
it为内表。
wa为将把数据读入的结构,如果没指定,则缺省为表头。
i是要读取的记录编号,即第几条记录。
keyexp是取记录的条件。如果合条件的记录有不止一行,则取第一行的记录。
以系统参数sy-subrc是否为0判断读取是否成功,sy-subrc为0则读取操作
成功。

(1)逐条记录的读入内表
select*fromt000.
appendt000toit.
endselect.
(2)把整批数据读入内表
select*from数据表intotable内表[whereexp]."结构需要相同
selectmandtmtextfromt000intotableitwheremandt>100."结构不
同的情况
selectmandtmtextfromt000appendingtableit."在内表中追加记录

clear内表."如果内表没有表头的话,该语句将会把内表的记录清空
clear内表[]."[]必须紧跟内表,且[]间不能有空格:.

deleteit(a)[indexn]“删除指定行记录
(b)[fromi][toj]“删除指定范围记录
(c)[whereexp]“删除符合条件记录
it为内表名
n,i,j为记录编号
exp为搜索条件

refresh内表.
该语句删除所有记录但保留表头,内表所占用的内存仍保留。

free内表.
该语句删除所有记录但保留表头,内表所占用的内存也被释放。

insert[wainto]it[indexn].
wa为结构。
it为内表。
n为记录编号。
记录会插入到编号的位置,原来的记录则向下移一位。

modifyit[fromwa]
[indexn]
[transportingc1c2...[whereexp]]
it为内表
wa为结构,缺省为使用表头。
n为记录编号
c1c2为内表中的字段,指明要更新哪些字段,缺省为全部更新。
exp为条件

sortit[byf1[ascending|descending].
it为内表
f1为要排序的字段
ascending升序排列(默认)
descending降序排列

,只能作用于LOOP中。:.
,会触发atfirst事件,At
first常用于画表头的作用,或者做表头的合计。
,atlast是在读取最后一条记录的时候触发
,
触发该事件
,
触发该事件
onchangeofit-p1[orit-p2……].当指定字段与上一条字段有所改变时,
触发该事件,onchange无分组合计的功能

,当运行到exit时,将直接运行循环后面的代码,当
exit在循环之外时,将直接结束程序的运行。

,但check有一个判断条件,仅判断条件不为
真时,才执行跳过循环下面的语句然后继续执行下一个循环。

sy-datum当前日期
sy-uzeit当前时间
sy-uname当前用户
sy-subrc当前操作返回值(0为成功)
sy-mandt当前的客户机
sy-tabix内表当前行的记录号

forms[tablest1t2...]
[usingu1value(u2)...]
[changingc1value(c2)...].
---
endform.
s为子程序名。
t1、t2、u1、u2、c1、c2为子程序的传递参数。

performs[tablest1t2...]
[usingu1u2...]
[changingc1c2...].
s为子程序名。:.
t1、t2、u1、u2、c1、c2为子程序的传递参数。
可用一个perform同时调用几个子程序,子程序间用逗号分隔,如performs1,s2.

(1)传递一个参数指针
变量存储于内存中的一块空间,变量指针为程序指出了内存的位置,传递变量指针
将使子程序中的变量和作为参数的变量使用同一个存储区域,也就是说,子程序中
的参数的内容变了,其相应的传递参数的内容也跟着一起改变。
使用usingv1及changingv1均为传递变量指针。
(2)传递一个变量值
和传递变量指针不同,传递变量值仅仅把变量的内容传给子程序,子程序中相应的
变量存储于另外的内存空间,也就是说,子程序中变量的值改变了,其相应的传递
参数的内容还是和原来一样。
使用usingvalue(v1)为传递变量值。
(3)传递一个变量值并返回
传递一个变量值并返回把一个变量值传给子程序,在子程序运行结束时,把子程序
中变量值的内容传给调用它的变量。与传递变量指针不同,原变量内容是在子程序
运行完成之后才改变,在子程序运行过程序中保持不变。
使用changingvalue(v1)传递一个变量值并返回。
(4)传递一个内表
内表同样可以作为一个变量进行传递,内表使用指针的模式进行传递。
使用tablesitstructurex或tablesitlikex传递内表,x为结构或表。

(1)initialization事件
程序最开始发生的事件,可以进行初始数据的处理。
REPORTz_temp.
tables:t001.
parameters:ch(50)typec.
initialization."该语句不能包含在selection-screen语句中
ch='thisisatestfortheinitialization!'.
start-of-selection.
write:ch.
以上代码在程序运行开始就为变量ch进行付值,该事件在输入参数之前就已经发
生。
(2)start-of-selection事件
在输入参数完成之后,运行该事件,在该事件中主要进行数据的处理。
(3)end-of-selection事件:.
发生在start-of-selection之后的事件,在该事件中主要进行数据的输出显示。
REPORTz_temp.
tables:t001.
data:ch(50)typec.
end-of-selection.
write:/'end-of-selection'.
start-of-selection.
write:/'start-of-selection'.
不管按什么顺序书写代码,start-of-selection里的代码一定会在end-of-
selection之前处理。
(4)top-of-page事件
该事件主要处理表头的数据,在top-of-page中显示的内容一定会出现在每一页的
开始。
REPORTz_tempnostandardpageheadingline-count6(2).
start-of-selection.
do100times.
write:/'thisisatest!'.
enddo.
top-of-page.
write:/'top-of-page'.
uline.
(5)end-of-page事件
该事件主要处理表尾的数据,在end-of-page中显示的内容一定会出现在每一页的
表尾,注意必须有定义页尾留空行数的时候才可显示该事件中显示的内容。
REPORTz_tempnostandardpageheadingline-count6(2).
start-of-selection.
do100times.
write:/'thisisatest!'.
enddo.
end-of-page.
uline.
write:/'end-of-page'.
write:/'end-of-page2'.

可以使用exit,check,stop事件跳过事件,在不同的事件中,以上的语句会有不同
的表现。:.
在所有事件中:
check离开当前事件并继续进行下一个事件的处理。
stop离开当前事件并直接跳到end-of-selection事件。
在start-of-selection之前的事件:
Exit和check都离开当前事件继续处理下一个事件。
在start-of-selection之中及之后的事件:
Exit立即进行输出的显示。
Check离开当前事件并继续处理下一个事件。

查询内表有多少条记录:
describetabletmp_gongsilinesiReccount.
查询一个表的字段条件属于另一个内表字段值的记录:
selectaafrom表2intoi_tab1.
selectaafrom表1into临时表forallentriesin
i_tab1whereaa=i_tab1-aa.
concatenate'aaa''bbb'into'aaabbb'.字符串相加
REUSE_ALV_GRID_DISPLAY输出表格函数
"EQLEGECPBTNELTGTNPNB"

sy-uzeit:获取系统时间。
sy-datum:获取系统日期。
shiftstring:左移字符串。长度减1。
concatenate:连接字符串。
split:拆分字符串。
search:查询字符串。
replace:替换字符串。
condense:删除多余的空格。
translate:转换字符格式,如将'ABC'转换为'abc'
converttext:创建一个可排序的字符串。
overlay:用一个字符串覆盖另一个字符串。
strlen:字符串长度。
abs:取绝对值。
cos、sin、tan:取三角函数值。
acos、asin、atan:反三角函数。
cosh、sinh、tanh:双曲函数。:.
exp:e的幂函数。
Log:底数为e的对数。
log10:底数为10的对数。
sqrt:平方根。
sign:返回参数符号。
trunc:返回参数的整数部分。
frac:输入参数的小数部分。
ceil:返回不小于参数的最小整数。
floor:返回不大于参数的最小整数。