SAP ABAP 基础语法超详细

这篇具有很好参考价值的文章主要介绍了SAP ABAP 基础语法超详细。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.表声明

Tables: 表名[,表名].  声明多个表时可用逗号分隔

当你声明了一个数据表的同时,系统也同时自动生成了一个和数据表同名的结构,结构的变量集等于数据表里面的字段。

2.定义变量

Data: v1[(l)] [type t] [decimals d] [value 'xxx']. 

v1 是变量名。

(l) 是变量的长度。

t 是数据类型。

d 是小数位。

‘xxx’ 是缺省值。

如:data num(10) type p decimals 3 value ‘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 < v2 小于
v1 >= v2 大于等于
v1 <= v2 小于等于
v1 between v2 and v3 在……之间
not v1 between v2 and v3 不在……之间

5.赋值语句

total = 10. 

mess = 'this is a test! '.

如果字符串中包括 ' 号,用 '' 进行付值,如:mess = 'this is a ''test''! '.

6.IF语句

if i = 2.

  write 'i 等于 2'.

[else.

  write 'i 不等于 2'. ]

endif.

7.CASE语句

case i.     类似于VFP中的DO CASE语句

   when 1. write 'i = 1'.

   when 2. write 'i = 2'.

   [when others. write 'i <> 1 and i <> 2'.]

endcase.

8.DO语句

do [n] times.  类似于VFP中的FOR语句

  [执行代码] 

enddo.

9.WHILE语句

while [条件].  类似于VFP中的DO WHILE语句

   [执行语句]

endwhile.

10.从数据库中取数据集

select * from 数据表 [where 条件].

   [操作语句]

endselect.

如:select * from t000 [where mandt < 200]. 

    write: / t000-mandt,t000-mtext. 

  endselect.

11.取出单行记录

select single * from 数据表 [where 条件].   注:仅取出符合条件的第一行记录

select single 字段 from 数据表 into 变量 [where 条件].

12.WRITE语句

write: [/][定位][数据1][,[定位] [数据2]]……

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

13.ULINE语句

uline.      "在当前行下一行显示一直线。

uline n.    "在当前行第n列显示一直线。

uline /n.    "在当前行下一行第n列显示一直线。

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

14.SKIP语句

SKIP.       "光标跳到下一行。

SKIP n.     "光标跑到下n行。

SKIP to line n.  "光标跳到第n行。

15.定义常量

作用:定义一些不会改变的数据,如一年的月数、圆围率等。

语法:constants c1[( l )] [type t] [decimals d] value 'xxx'. 

或者:constants c1 like cv value 'xxx'. 

例如:constants pi type p value ‘3.14’.

16.定义结构

(1)基本结构

data: begin of 结构名, 

   f1[(l)] [type t] [decimals d] [value 'xxx'], 

   f2[(l)] [type t] [decimals d] [value 'xxx'], 
   ……

end of 结构名. 

(2)结构中包含另一结构

data: begin of 结构名, 

   f1[(l)] [type t] [decimals d] [value 'xxx'], 

   f2[(l)] [type t] [decimals d] [value 'xxx'], 

   f3 like 另一结构名,
   ……

end of 结构名. 

(3)定义结构的另一种写法:

data begin of 结构名. 

data f1[(l)] [type t] [decimals d] [value 'xxx']. 

data f2[(l)] [type t] [decimals d] [value 'xxx']. 

[include structure 另一个结构.] 

data end of 结构名.   

注:此种写法data后可以加冒号也可以不加

例如:

data:begin of person,

   educ(10) type c,

   train(10) type c,

end of person.

data:begin of employee,

   code(10) type c,

   name(10) type c,

   department(20) type c,

   address like person,  "person为另一个结构名

   ……

end of employee.

 

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: begin of employee,

   code(10) type c,                
   name(10) type c,

end of employee.

types: address(50) type c.

 

data: emp type employee.   "使用TYPES定义的结构类型

data: myadd type address.  "使用TYPES定义的变量类型

 

emp-code = '1001'.

emp-name = '张三'. 

myadd = 'this is a address'.

 

write: / emp.

write: / myadd.

18.LIKE语句

tables: t000.

data: p(20) type c.

data: p1 like t000.      " p1拥有了和t000相同的结构

data: p2 like t000-mandt.   " p2的定义等同于t000中mandt这个字段的定义

data: p3 like p.       "p3的定义和p相同,为20长度的字符串

data: t111 like t000 occurs 0 with header line.    "定义一个和t000一样的内表

19.输入参数

要让一个变量成为可输入的参数,只需在定义变量时把data改为parameters 即可。

parameters p1 like v1 ... 

  ... [default 'xxx'] [obligatory] [lower case]  

  [as checkbox] [radiobutton group g].
  • 使用DEFAULT后缀为参数指定缺省值。

  • 使用obligatory后缀来标识参数为必输项。

  • 输入参数默认会把输入的字符转为大写,如果要去掉该转换,使用lower case 后缀。

  • 使用as checkbox后缀使参数以复选框的形式出现。使用复选框的参数一定为长度为1的字符串,其内容只能为’X’或’ ',如:

parameters:p1 as checkbox.

parameters:p2 as checkbox default 'X'.
  • 使用radiobutton group g后缀使输入参数以单选框的形式出现。使用单选框的参数一定为长度为1的字符串,其内容只能为’X’或’ ',如:
parameters:p1 radiobutton group 1.

parameters:p2 radiobutton group 1.

parameters:p3 radiobutton group 2.

parameters:p4 radiobutton group 2 default 'X'.

20.分块语句

selection-screen begin of block 块名 with frame title [text-(titlename)].

parameters: v1(10) type c.

parameters: aa like t000-mandt. "将出现圆钮选择项,也可以自定义圆钮选择项

parameters: v2(10) type c matchcode object zhlp.

"这是自定义的圆钮选择项,在SE38中创建搜索帮助,zhlp为创建的搜索帮助名称

selection-screen end of block 块名.

selection-screen uline.  "在输入屏幕上画线

21.定义内表

内表的定义和结构很相似,所差别只是内表需要指定记录的条数。

data: begin of 内表名 occurs n, 

    f1[(l)] [type t] [decimals d] [value 'xxx'], 

    f2[(l)] [type t] [decimals d] [value 'xxx'], 

    ... 

end of 内表名. 
  • n为该内表的记录条数,不过当内表的记录数超过了该数值后,内表会自动的填大这个数目,定义该数值只是为了系统的效率考虑,如果n为0,则系统会在一开始就分配8KB的空间。

  • 内表同时也可以以已存在的数据表或结构进行定义,格式为:

data: 内表名 like [结构名或数据表名] occurs n.

"例如:(使用like语句通常需要加上with header line,否则没有表头)

data: it1 like st1 occurs 10.  "st1 为一结构

data: it2 like t000 occurs 0.  "t000 为一数据表

22. 往内表中添加记录

append 内表名.       "把表头的数据插入内表。

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

23.用LOOP读取内表数据

loop at it [into wa] [from m] [to n] [where exp]. 

   Write: / it-字段1, it-字段2, ……

endloop. 
  • it 为内表名

  • wa 为结构名,如果不填,则读到表头。

  • m,n为开始和结束行,如果不填则为从第一条到最后条。

  • exp 为取记录的条件。

24.用READ读取内表数据

READ功能为读取内表的某条记录。

read table it [into wa] [index i | with key keyexp]
  • it为内表。

  • wa为将把数据读入的结构,如果没指定,则缺省为表头。

  • i 是要读取的记录编号,即第几条记录。

  • keyexp 是取记录的条件。如果合条件的记录有不止一行,则取第一行的记录。

  • 以系统参数 sy-subrc 是否为 0 判断读取是否成功,sy-subrc 为 0 则读取操作成功。

25.把数据库的记录读入内表

(1)逐条记录的读入内表

select * from t000.

append t000 to it.

endselect.

(2)把整批数据读入内表

select * from 数据表 into table 内表 [where *exp*]. "结构需要相同

select mandt mtext from t000 into table it where mandt > 100. "结构不同的情况

select mandt mtext from t000 appending table it. "在内表中追加记录

26.CLEAR清空表头和表记录

clear 内表.   "如果内表没有表头的话,该语句将会把内表的记录清空

clear 内表[ ].  "[ ]必须紧跟内表,且[ ]间不能有空格

27.DELETE删除内表记录

delete it (a) [index n]        "删除指定行记录

     	  (b) [from i] [to j]  "删除指定范围记录

          (c) [where exp]      "删除符合条件记录
  • it为内表名

  • n,i,j 为记录编号

  • exp 为搜索条件

28.REFRESH删除内表记录

refresh 内表.

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

29.FREE删除内表记录

free 内表.

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

30.在内表中插入记录

insert [wa into] it [index n].
  • wa 为结构。

  • it为内表。

  • n 为记录编号。

记录会插入到编号的位置,原来的记录则向下移一位。

31.修改内表记录

modify it [from wa] 

     [index n] 

     [transporting c1 c2 ... [where exp]] 
  • it 为内表

  • wa 为结构,缺省为使用表头

  • n 为记录编号

  • c1 c2 为内表中的字段,指明要更新哪些字段,缺省为全部更新

  • exp 为条件

32.对内表进行排序

sort it [by f1 [ascending|descending].
  • it 为内表

  • f1 为要排序的字段

  • ascending 升序排列(默认)

  • descending 降序排列

33.内表的控制语句

sum. "对内表中可计算字段进行合计,只能作用于LOOP中。

at first.   "当从内表中读取第一条记录的时候,会触发at first事件,At first 常用于画表头的作用,或者做表头的合计。

at last.   "和at first相反,at last是在读取最后一条记录的时候触发

at new of p1. "当一条记录指定字段的值和上一条记录的相应字段的值有改变时,触发该事件

at end of p1. "当一条记录指定字段的值和下一条记录的相应字段的值有改变时,触发该事件

on change of it-p1 [or it-p2 ……]. "当指定字段与上一条字段有所改变时,触发该事件,on change无分组合计的功能

34.循环跳转语句

exit. "用于跳出当前循环,当运行到exit时,将直接运行循环后面的代码,当exit在循环之外时,将直接结束程序的运行。

continue. "跳过循环下面的语句然后继续执行下一个循环。

check exp. "作用与continue相类似,但check有一个判断条件,仅判断条件不为真时,才执行跳过循环下面的语句然后继续执行下一个循环。

35.常用系统变量

sy-datum  "当前日期

sy-uzeit  "当前时间

sy-uname  "当前用户

sy-subrc  "当前操作返回值(0为成功)

sy-mandt  "当前的客户机

sy-tabix  "内表当前行的记录号

36.子程序的定义

form s [tables t1 t2 ...]

    [using u1 value(u2) ...]

    [changing c1 value(c2) ...]. 

    \--- 

endform. 
  • s 为子程序名。

  • t1、t2、u1、u2、c1、c2 为子程序的传递参数。

37.子程序的调用

perform s [tables t1 t2 ...] 

     [using u1 u2 ...] 

     [changing c1 c2 ...]. 
  • s 为子程序名。

  • t1、t2、u1、u2、c1、c2 为子程序的传递参数。

  • 可用一个perform同时调用几个子程序,子程序间用逗号分隔,如 perform s1,s2.

38.子程序的参数传递

(1)传递一个参数指针

变量存储于内存中的一块空间,变量指针为程序指出了内存的位置,传递变量指针将使子程序中的变量和作为参数的变量使用同一个存储区域,也就是说,子程序中的参数的内容变了,其相应的传递参数的内容也跟着一起改变

使用using v1changing v1 均为传递变量指针。

(2)传递一个变量值

和传递变量指针不同,传递变量值仅仅把变量的内容传给子程序,子程序中相应的变量存储于另外的内存空间,也就是说,子程序中变量的值改变了,其相应的传递参数的内容还是和原来一样

使用using value(v1) 为传递变量值。

(3)传递一个变量值并返回

传递一个变量值并返回把一个变量值传给子程序,在子程序运行结束时,把子程序中变量值的内容传给调用它的变量。与传递变量指针不同,原变量内容是在子程序运行完成之后才改变,在子程序运行过程序中保持不变

使用changing value(v1)传递一个变量值并返回。

(4)传递一个内表

内表同样可以作为一个变量进行传递,内表使用指针的模式进行传递。

使用tables it structure x tables it like x 传递内表,x为结构或表。

39.常用事件

(1)initialization事件

程序最开始发生的事件,可以进行初始数据的处理

REPORT z_temp.

tables:t001.

parameters:ch(50) type c.

initialization.  "该语句不能包含在selection-screen语句中

ch = 'this is a test for the initialization!'.

start-of-selection.

write:ch.

以上代码在程序运行开始就为变量ch进行付值,该事件在输入参数之前就已经发生。

(2)start-of-selection事件

在输入参数完成之后,运行该事件,在该事件中主要进行数据的处理

(3)end-of-selection事件

发生在start-of-selection之后的事件,在该事件中主要进行数据的输出显示

REPORT z_temp.

tables:t001.

data:ch(50) type c.

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中显示的内容一定会出现在每一页的开始

REPORT z_temp no standard page heading line-count 6(2).

start-of-selection.

do 100 times.

  write:/ 'this is a test!'.

enddo.

top-of-page.

  write:/ 'top-of-page'.

  uline.

(5)end-of-page事件

该事件主要处理表尾的数据,在end-of-page中显示的内容一定会出现在每一页的表尾,注意必须有定义页尾留空行数的时候才可显示该事件中显示的内容

REPORT z_temp no standard page heading line-count 6(2).

start-of-selection.

do 100 times.

  write:/ 'this is a test!'.

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离开当前事件并继续处理下一个事件。文章来源地址https://www.toymoban.com/news/detail-618791.html

41.补充

  • 查询内表有多少条记录:
describe table tmp_gongsi lines iReccount. 
  • 查询一个表的字段条件属于另一个内表字段值的记录:
select aa from 表2 into i_tab1.

select aa from 表1 into 临时表 for all entries in

i_tab1 where aa = i_tab1-aa.

concatenate 'aaa' 'bbb' into 'aaabbb'. "字符串相加

REUSE_ALV_GRID_DISPLAY "输出表格函数

"EQ LE GE CP BT NE LT GT NP NB"

42.常用函数

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

到了这里,关于SAP ABAP 基础语法超详细的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SAP ABAP 用户状态锁定案例

    一、前言 项目需求是根据当天及前两天的离职员工信息(假设这是一个定时器任务每天下午5点执行程序,计算前两天的员工工号是为了将5点之后办理离职的员工工号找出来),将这些员工在用户表 USR02 中的锁定状态设置为 “64”,以保证离职员工无法继续使用系统账号。

    2024年02月15日
    浏览(51)
  • SAP,ABAP:ALV变式复制

    应用场景:程序优化,需要新开一个程序优化,优化完成后原程序ALV变式无法带到新的程序, ALV变式是很好用的功能 REPORT zbsc. 事务代码:ZBSC-ALV变式复制 程序名称:ZBSC-ALV变式复制 程序目的: ZBSC-ALV变式复制 开发人员: *(修改日志)----------------------------------------------------

    2024年02月09日
    浏览(44)
  • SAP_ABAP_编程基础_文件处理(CRUD)_R3系统_打开文件 / 关闭文件 / 删除文件 / 向文件中写入数据 / 从文件中读取数据 / 使用服务器上的文件

    SAP ABAP 顾问(开发工程师)能力模型_Terry谈企业数字化的博客-CSDN博客 文章浏览阅读490次。目标:基于对SAP abap 顾问能力模型的梳理,给一年左右经验的abaper 快速成长为三年经验提供超级燃料! https://blog.csdn.net/java_zhong1990/article/details/132469977 平时在  ‘ 工地搬砖 ’,很少关

    2024年02月22日
    浏览(47)
  • SAP ABAP ChatGPT 初体验 我会失业吗?

    简介: ChatGPT 最近很火,听说我可能要失业!就在今天我历经千辛万苦,终于把 ChatGPT 注册好了。话不多说,我先问两个 ABAP 开发问题压压惊。 : SAP ABAP ChatGPT OpenAI 失业 下面是我在 ChatGPT 的聊天截图, 我对这个回答满意度 90% ,此时我内心还不慌,虽然内容很完整逻

    2023年04月15日
    浏览(43)
  • sap abap,forms,smartforms 导出pdf

    4种方法: 1.安装pdf程序,Foxit Reader,先敲回车 自动带出,如下图: 直接打印就会弹出保存pdf文档路径,点保存。这种方式是最简单的,可 forms 和 smartforms 。 2. forms 和 smartforms 打印到spool 中,首先要设置个人参数文件  输出设备 ,默认输出设备LP01    。 T-CODE: SP02 或如下图

    2024年02月12日
    浏览(86)
  • SAP ABAP增强 BADI的增强全解析

            BADI的全称是Business Add-in,它的主要技术是基于ABAP的对象来实现增强。SAP中BADI的维护事务代码是SE18和SE19,SE18主要是创建及维护BADI对象,而SE19用于维护BADI的实例,即如何来实现BADI对象的功能。         SAP的BADI因系统版本的差别可能会有不同,R/3中的BADI被称为Cl

    2023年04月23日
    浏览(39)
  • SAP ABAP调用Http/Https方式实例

    注意: 1.url必须带\\\"http://\\\"或者“https://”。 2. http_client-propertytype_redirect = http_client-co_disabled .这一行是设置是否允许重定向,是为“co_enabled”,否为“co_disabled”。 3. 可能出现的错误 404 Hostname Unknow,是因为服务器未配置该url的dns 4. 可能出现的错误 401 refused,可能是被防火墙

    2024年02月07日
    浏览(57)
  • 【SAP Abap】记录一次SAP长文本内容通过Web页面完整显示的应用

    业务在销售订单中,通过长文本描述,记录了一些生产备注信息,如生产标准、客户要求等等。要求开发一个报表,能够方便查看和导出长文本信息。 由于ALV列表长文本显示不友好,且长度有限制,仅能显示128位,故考虑双击展示长文本详细内容,最终实现效果如下: ALV列

    2024年02月15日
    浏览(53)
  • SAP ABAP中的数据类型 Data Types

    简单来说分两种: 数据字典里定义的 在ABAP程序里定义的 1.1 数字型的 用在数学计算里的,表达式里的,表序号里的。 Interger整数型 : INT1 : 1字节整数,0-255 (2的8次方-1) INT2 : 2字节整数,-32768-32767(2的15次方-1,有一位是符号位) INT4 : 4字节整数,-2147483648-2147483647(

    2024年02月03日
    浏览(44)
  • 「SAP ABAP」OPEN SQL(九)【SAT事务码】

    💂 作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较

    2023年04月13日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包