ABAP基本语法.docx
- 文档编号:25488696
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:18
- 大小:21.66KB
ABAP基本语法.docx
《ABAP基本语法.docx》由会员分享,可在线阅读,更多相关《ABAP基本语法.docx(18页珍藏版)》请在冰豆网上搜索。
ABAP基本语法
ABAP基本语法
ABAP/4:
AdvancedBusinessApplicationProgramming
1.表声明
Tables:
表名[,表名].声明多个表时可用逗号分隔
当你声明了一个数据表的同时,系统也同时自动生成了一个和数据表同名的结构,结构的变量集等于数据表里面的字段。
2.定义变量
Data:
v1[(l)][typet][decimalsd][value'xxx'].
v1是变量名。
(l)是变量的长度。
t是数据类型。
d是小数位。
'xxx'是缺省值。
如:
datanum(10)typepdecimals3value'1.12'.
数据类型
描述
缺省长度
最大长度
可用字符
缺省值
C
字符型
1
65536
任意字符
空
N
数字文本
1
65536
0~9
0
D
日期
8(固定)
-
0~9
00000000
T
时间
8(固定)
-
0~9
000000
X
十六进制数
1
65536
0~9,A~F
数据类型
描述
缺省长度
最大长度
最大小数位
缺省值
I
整型
4(固定)
-
0
0
P
十进制数
8
16
14
0
F
浮点型
8
8
15
0.1
3.常用算术操作符:
算术符
描述
+
加法
-
减法
*
乘法
/
除法
**
取幂
DIV
整除
MOD
取模
4.常用比较操作:
比较操作
描述
v1=v2
等于
v1<>v2
不等于
v1>v2
大于
v1 小于 v1>=v2 大于等于 v1<=v2 小于等于 v1betweenv2andv3 在……之间 notv1betweenv2andv3 不在……之间 5.赋值语句 total=10. mess='thisisatest! '. 如果字符串中包括'号,用''进行付值,如: mess='thisisa''test''! '. 6.IF语句 ifi=2. write'i等于2'. [else. write'i不等于2'.] endif. 7.CASE语句 casei.类似于VFP中的DOCASE语句 when1.write'i=1'. when2.write'i=2'. [whenothers.write'i<>1andi<>2'.] endcase. 8.DO语句 do[n]times.类似于VFP中的FOR语句 [执行代码] enddo. 9.WHILE语句 while[条件].类似于VFP中的DOWHILE语句 [执行语句] endwhile. 10.从数据库中取数据集 select*from数据表[where条件]. [操作语句] endselect. 如: select*fromt000[wheremandt<200]. write: /t000-mandt,t000-mtext. endselect. 11.取出单行记录 selectsingle*from数据表[where条件].注: 仅取出符合条件的第一行记录 selectsingle字段from数据表into变量[where条件]. 12.WRITE语句 write: [/][定位][数据1][,[定位][数据2]]…… [/]为插入一行空行,注意单独write一个[/]和在其它数据之前加[/]的效果是不一样的,单独的write[/]在插入空行后光标定位在空行的下面,在其它数据前加[/]在插入空行后光标定位于所插的空行。 13.ULINE语句 uline.在当前行下一行显示一直线。 ulinen.在当前行第n列显示一直线。 uline/n.在当前行下一行第n列显示一直线。 uline和write‘|’一起使用可实现画表格的功能。 14.SKIP语句 SKIP.光标跳到下一行。 SKIPn.光标跑到下n行。 SKIPtolinen.光标跳到第n行。 15.定义常量 作用: 定义一些不会改变的数据,如一年的月数、圆围率等。 语法: constantsc1[(l)][typet][decimalsd]value'xxx'. 或者: constantsc1likecvvalue'xxx'. 例如: constantspitypepvalue‘3.14’. 16.定义结构 (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另一个结构.] dataendof结构名.注: 此种写法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. 17.TYPES语句 将结构定义成数据类型,这样在程序中可以象定义一个变量那样简单地定义一个结构。 语法同定义结构,只是把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. 18.LIKE语句 tables: t000. data: p(20)typec. data: p1liket000."p1拥有了和t000相同的结构 data: p2liket000-mandt."p2的定义等同于t000中mandt这个字段 "的定义 data: p3likep."p3的定义和p相同,为20长度的字符串 data: t111liket000occurs0withheaderline."定义一个和t000一样的内表 19.输入参数 要让一个变量成为可输入的参数,只需在定义变量时把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'. 20.分块语句 selection-screenbeginofblock块名withframetitle[text-(titlename)]. parameters: v1(10)typec. parameters: aaliket000-mandt."将出现圆钮选择项,也可以自定义圆钮选择项 parameters: v2(10)typecmatchcodeobjectzhlp. 这是自定义的圆钮选择项,在SE38中创建搜索帮助,zhlp为创建的搜索帮助名称 selection-screenendofblock块名. selection-screenuline.“在输入屏幕上画线 21.定义内表 内表的定义和结构很相似,所差别只是内表需要指定记录的条数。 data: beginof内表名occursn, f1[(l)][typet][decimalsd][value'xxx'], f2[(l)][typet][decimalsd][value'xxx'], ... endof内表名. n为该内表的记录条数,不过当内表的记录数超过了该数值后,内表会自动的填大这个数目,定义该数值只是为了系统的效率考虑,如果n为0,则系统会在一开始就分配8KB的空间。 内表同时也可以以已存在的数据表或结构进行定义,格式为: data: 内表名like[结构名或数据表名]occursn. 例如: (使用like语句通常需要加上withheaderline,否则没有表头) data: it1likest1occurs10."st1为一结构 data: it2liket000occurs0."t000为一数据表 22.往内表中添加记录 append内表名.‘把表头的数据插入内表。 append结构名to内表名.‘把结构的数据插入内表,两者的结构必须一样。 23.用LOOP读取内表数据 loopatit[intowa][fromm][ton][whereexp]. Write: /it-字段1,it-字段2,…… endloop. it为内表名 wa为结构名,如果不填,则读到表头。 m,n为开始和结束行,如果不填则为从第一条到最后条。 exp为取记录的条件。 24.用READ读取内表数据 READ功能为读取内表的某条记录。 readtableit[intowa][indexi|withkeykeyexp] it为内表。 wa为将把数据读入的结构,如果没指定,则缺省为表头。 i是要读取的记录编号,即第几条记录。 keyexp是取记录的条件。 如果合条件的记录有不止一行,则取第一行的记录。 以系统参数sy-subrc是否为0判断读取是否成功,sy-subrc为0则读取操作成功。 25.把数据库的记录读入内表 (1)逐条记录的读入内表 select*fromt000. appendt000toit. endselect. (2)把整批数据读入内表 select*from数据表intotable内表[whereexp]."结构需要相同 selectmandtmtextfromt000intotableitwheremandt>100."结构不同的情况 selectmandtmtextfromt000appendingtableit."在内表中追加记录 26.CLEAR清空表头和表记录 clear内表."如果内表没有表头的话,该语句将会把内表的记录清空 clear内表[]."[]必须紧跟内表,且[]间不能有空格 27.DELETE删除内表记录 deleteit(a)[indexn]“删除指定行记录 (b)[fromi][toj]“删除指定范围记录 (c)[whereexp]“删除符合条件记录 it为内表名 n,i,j为记录编号 exp为搜索条件 28.REFRESH删除内表记录 refresh内表. 该语句删除所有记录但保留表头,内表所占用的内存仍保留。 29.FREE删除内表记录 free内表. 该语句删除所有记录但保留表头,内表所占用的内存也被释放。 30.在内表中插入记录 insert[wainto]it[indexn]. wa为结构。 it为内表。 n为记录编号。 记录会插入到编号的位置,原来的记录则向下移一位。 31.修改内表记录 modifyit[fromwa] [indexn] [transportingc1c2...[whereexp]] it为内表 wa为结构,缺省为使用表头。 n为记录编号 c1c2为内表中的字段,指明要更新哪些字段,缺省为全部更新。 exp为条件 32.对内表进行排序 sortit[byf1[ascending|descending]. it为内表 f1为要排序的字段 ascending升序排列(默认) descending降序排列 33.内表的控制语句 sum.对内表中可计算字段进行合计,只能作用于LOOP中。 atfirst.当从内表中读取第一条记录的时候,会触发atfirst事件,Atfirst常用于画表头的作用,或者做表头的合计。 atlast.和atfirst相反,atlast是在读取最后一条记录的时候触发 atnewofp1.当一条记录指定字段的值和上一条记录的相应字段的值有改变时,触发该事件 atendofp1.当一条记录指定字段的值和下一条记录的相应字段的值有改变时,触发该事件 onchangeofit-p1[orit-p2……].当指定字段与上一条字段有所改变时,触发该事件,onchange无分组合计的功能 34.循环跳转语句 exit.用于跳出当前循环,当运行到exit时,将直接运行循环后面的代码,当exit在循环之外时,将直接结束程序的运行。 continue.跳过循环下面的语句然后继续执行下一个循环。 checkexp.作用与continue相类似,但check有一个判断条件,仅判断条件不为真时,才执行跳过循环下面的语句然后继续执行下一个循环。 35.常用系统变量 sy-datum当前日期 sy-uzeit当前时间 sy-uname当前用户 sy-subrc当前操作返回值(0为成功) sy-mandt当前的客户机 sy-tabix内表当前行的记录号 36.子程序的定义 forms[tablest1t2...] [usingu1value(u2)...] [changingc1value(c2)...]. --- endform. s为子程序名。 t1、t2、u1、u2、c1、c2 为子程序的传递参数。 37.子程序的调用 performs[tablest1t2...] [usingu1u2...] [changingc1c2...]. s为子程序名。 t1、t2、u1、u2、c1、c2 为子程序的传递参数。 可用一个perform同时调用几个子程序,子程序间用逗号分隔,如performs1,s2. 38.子程序的参数传递 (1)传递一个参数指针 变量存储于内存中的一块空间,变量指针为程序指出了内存的位置,传递变量指针将使子程序中的变量和作为参数的变量使用同一个存储区域,也就是说,子程序中的参数的内容变了,其相应的传递参数的内容也跟着一起改变。 使用usingv1及changingv1均为传递变量指针。 (2)传递一个变量值 和传递变量指针不同,传递变量值仅仅把变量的内容传给子程序,子程序中相应的变量存储于另外的内存空间,也就是说,子程序中变量的值改变了,其相应的传递参数的内容还是和原来一样。 使用usingvalue(v1)为传递变量值。 (3)传递一个变量值并返回 传递一个变量值并返回把一个变量值传给子程序,在子程序运行结束时,把子程序中变量值的内容传给调用它的变量。 与传递变量指针不同,原变量内容是在子程序运行完成之后才改变,在子程序运行过程序中保持不变。 使用changingvalue(v1)传递一个变量值并返回。 (4)传递一个内表 内表同样可以作为一个变量进行传递,内表使用指针的模式进行传递。 使用tablesitstructurex或tablesitlikex传递内表,x为结构或表。 39.常用事件 (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'. 40.跳出事件的方法 可以使用exit,check,stop事件跳过事件,在不同的事件中,以上的语句会有不同的表现。 在所有事件中: check离开当前事件并继续进行下一个事件的处理。 stop离开当前事件并直接跳到end-of-selection事件。 在start-of-selection之前的事件: Exit和check都离开当前事件继续处理下一个事件。 在start-of-selection之中及之后的事件: Exit立即进行输出的显示。 Check离开当前事件并继续处理下一个事件。 41.补充 查询内表有多少条记录: describetabletmp_gongsilinesiReccount. 查询一个表的字段条件属于另一个内表字段值的记录: selectaafrom表2intoi_tab1. selectaafrom表1into临时表forallentriesin i_tab1whereaa=i_tab1-aa. concatenate'aaa''bbb'into'aaabbb'.字符串相加 REUSE_ALV_GRID_DISPLAY输出表格函数 "EQLEGECPBTNELTGTNPNB" 42.常用函数 sy-uzeit: 获取系统时间。 sy-datum: 获取系统日期。 shiftstring: 左移字符串
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ABAP 基本 语法