基本语法
01-语句
ABAP源程序由注释和ABAP语句组成。 ABAP中的每个语句都以关键字开头,以句点结尾,ABAP不区分大小写。
程序中的第一个非注释行以单词REPORT开头。 报告将始终是创建的任何可执行程序的第一行。 该语句后面是创建的程序名称。 然后用一个句号终止该行。
语法是:
REPORT [Program_Name].
[Statements…].
语句包括命令和以句点结尾的变量和选项。 只要句号出现在语句的结尾,就不会出现问题。 此时,标志着语句的完成。
02-冒号表示法
如果每个语句的开头是相同的,则连续语句可以链接在一起。 这是使用冒号(:)运算符和逗号,用于终止单个语句,就像句点结束正常语句。
下面是一个程序的例子:
WRITE 'Hello’.
WRITE 'ABAP’.
WRITE 'World'.
使用冒号表示法,可以这样重写
WRITE: 'Hello’,
'ABAP’,
'World'.
WRITE: 'Hello', 'ABAP', 'World'
03-注释
内联注释可以通过以下两种方法之一在程序中的任何位置声明:
• 通过在行的第一个位置放置星号(*)来指示全行注释,在这种情况下,整个行被系统认为是注释。 注释不需要以句点终止,因为它们可能不会跨越多个行延伸。
• 部分行注释通过在语句之后输入双引号(")来表示,双引号后面的所有文本都被系统视为注释。您无需在一段时间内终止部分行注释,因为它们不能跨越当前行。
04-抑制空白
NO -ZERO命令在DATA语句之后。 它抑制包含空格的数字字段的所有前导零。 输出通常更容易阅读。
**基本语法-04-抑制空白
REPORT zhy01_hy101_20220612_01 NO STANDARD PAGE HEADING.
WRITE '000001234'.
**基本语法-04-抑制空白
REPORT zhy01_hy101_20220612_01 NO STANDARD PAGE HEADING.
WRITE '000001234' NO-ZERO.
05-空白行
SKIP 命令有助于在页面上插入空行;
**基本语法.05-空白行
REPORT zhy01_hy101_20220612_01 NO STANDARD PAGE HEADING.
WRITE 'This is the 1st line'.
SKIP.
WRITE 'This is the 2nd line'.
我们可以使用SKIP命令插入多个空白行。
**基本语法.05-空白行
**插入多个空白行
REPORT zhy01_hy101_20220612_01 NO STANDARD PAGE HEADING.
WRITE 'This is the 1st line'.
SKIP 5.
WRITE 'This is the 2nd line'.
06-插入线
ULIKE命令自动在输出插入一条水平线。 也可以控制线的位置和长度。
**基本语法.06-插入线
REPORT zhy01_hy101_20220612_01 NO STANDARD PAGE HEADING.
WRITE 'This is underlined'.
ULINE.
07-消息
MESSAGE命令显示由程序开始处REPORT语句中指定的消息ID定义的消息。
消息ID是一个2字符代码,用于定义在使用MESSAGE命令时程序将访问的1000个消息的集合。
消息编号从000到999 .与每个数字相关联的消息文本最多为80个字符。 调用消息号时,将显示相应的文本。
以下是用于Message命令的字符。
错误消息通常用于阻止用户做不应该做的事情。 警告消息通常用于提醒用户他们的行动的后果。 信息消息给用户有用的信息。
法一:直接定义
**基本语法.07-消息
**定义法一:直接定义
REPORT zhy01_hy101_20220612_01 NO STANDARD PAGE HEADING.
MESSAGE 'Hello ABAP' TYPE 'I'.
法二:创建类
激活保存
选择对应的包进行保存(也可以直接保存到本地)
数据类型
01-基本数据类型
类型 | 关键词 |
---|---|
字节字段 | X |
文本域 | C |
Integer | I |
浮点 | F |
打包数量 | P |
文本字符串 | STRING |
一些字段和数字可以使用一个或多个名称来修改,如下所示:
- byte
- numeric
- character-like
下表显示数据类型,将值存储在内存中需要多少内存,以及可以存储在此类变量中的最小值和最大值。
类型 | 典型长度 | 典型范围 |
---|---|---|
X | 1字节 | 任何字节值(00到FF) |
C | 1个字符 | 1〜65535 |
N(数字文本字段) | 1个字符 | 1〜65535 |
D(类似字符的日期) | 8个字符 | 8个字符 |
T(字符型时间) | 6个字符 | 6个字符 |
I | 4字节 | -2147483648至2147483647 |
F | 8字节 | 2.2250738585072014E-308至1.7976931348623157E + 308正或负 |
P | 8字节 | [-10 ^(2len -1)+1]到[+ 10 ^(2len -1)1](其中len =固定长度) |
STRING | Variable | 任何字母数字字符 |
XSTRING(字节字符串) | Variable | 任何字节值(00到FF) |
02-例子
REPORT YR_SEP_12.
DATA text_line TYPE C LENGTH 40.
text_line = 'A Chapter on Data Types'.
Write text_line.
DATA text_string TYPE STRING.
text_string = 'A Program in ABAP'.
Write / text_string.
DATA d_date TYPE D.
d_date = SY-DATUM.
Write / d_date.
在此示例中,我们有一个具有预定义长度40的C类型的字符串。STRING是可用于任何长度可变的字符串(文本字符串)的数据类型。 类型STRING数据对象通常应用于固定长度不重要的字符内容。
上面的代码产生以下输出:
A Chapter on Data Types
A Program in ABAP
12092015
DATE类型用于存储日期信息,并且可以存储八位数字,如上所示。
03-复杂和参考类型
复杂类型分为结构类型和表类型。 在结构类型中,基本类型和结构(即,嵌入在结构中的结构)被分组在一起。 你可以只考虑基本类型的分组。 但是你必须意识到结构的嵌套的可用性。
当基本类型被分组在一起时,数据项可以作为分组数据项被访问或者可以访问各个基本类型数据项(结构字段)。 表类型在其他编程语言中更好地称为数组。 数组可以是简单数组或结构数组。 在ABAP中,数组被称为内部表,并且与其他编程语言相比,它们可以以许多方式被声明和操作。 下表显示了表示内部表的参数。
S.No。 | 参数& 描述 |
---|---|
1 | 线或行类型 内部表的行可以是基本类型,复杂类型或引用类型。 |
2 | 键 将字段或一组字段指定为标识表行的内部表的键。 键包含基本类型的字段。 |
3 | 存取方法 描述ABAP程序如何访问单个表条目。 |
引用类型用于引用类,接口和运行时数据项的实例。 ABAP OOP运行时类型服务(RTTS)允许在运行时声明数据项。
变量
变量是用于在程序的分配的存储区域中存储值的命名数据对象。
0-1 变量声明的基本形式
DATA <f> TYPE <type> VALUE <val>.
这里< f> 指定变量的名称。 变量的名称最多可包含30个字符。 < type> 指定变量的类型。 具有完全指定的技术属性的任何数据类型被称为< type&gt ;. < val> 指定< f>的初始值。 变量。 在定义基本固定长度变量的情况下,DATA语句会自动使用类型特定的初始值填充变量的值。 < val>的其他可能值 可以是文字,常量或显式子句,例如Is INITIAL。
以下是变量声明的有效示例。
DATA d1(2) TYPE C.
DATA d2 LIKE d1.
DATA minimum_value TYPE I VALUE 10.
常量和字面量
文字是在程序的源代码中创建的未命名数据对象。 他们完全由他们的价值定义。
常量是通过使用声明性语句静态创建的命名数据对象。 通过为程序的存储区域中存储的值分配一个常量来声明该常量。 分配给常数的值在程序执行期间不能更改。 这些固定值也可以被视为文字。
有两种类型的文字 - 数字和字符。
0-1 数字字面量
数字文字是可以有前缀符号的数字序列。 在数字文字中,没有十进制分隔符,也没有带尾数和指数的符号。
183.
-97.
+326.
0-2 字符文字
字符文字是用单引号括起来的ABAP程序的源代码中的字母数字字符序列。 用引号括起来的字符文字具有预定义的ABAP类型C,并被描述为文本字段文字。 包含在“后引号"中的文字具有ABAP类型STRING,并且被描述为字符串文字。 字段长度由字符数定义。
注意 - 在文本字段文字中,尾随空白将被忽略,但在字符串文字中,它们将被考虑在内。
以下是字符文字的一些示例。
文本字段字面值
REPORT YR_SEP_12.
Write 'Tutorials Point'.
Write / 'ABAP Tutorial'.
字符串字面值
REPORT YR_SEP_12.
Write 'Tutorials Point'.
Write / 'ABAP Tutorial'.
在上述两种情况下的输出相同
Tutorials Point
ABAP Tutorial
注意 - 当我们尝试更改常量的值时,可能会发生语法或运行时错误。 在类或接口的声明部分中声明的常量属于该类或接口的静态属性。
运算符
0-1 算术运算符
算术运算符在数学表达式中的使用方式与在代数中的使用方式相同。
下表介绍了算术运算符。假设整数变量 A 为 20,变量 B 为 40。
编号 | 算术运算符和描述 |
---|---|
1 | +(添加) 在运算符的两侧添加值。 示例:A + B将给出60。 |
2 | - (减法) 从左边操作数中减去右边操作数。 示例:A - B将给出-20。 |
3 | *(乘法) 将运算符两侧的值相乘。 示例:A * B将给出800。 |
4 | /(除法) 用右边操作数除左边操作数。 示例:B / A将给出2。 |
5 | MOD(模量) 用右边操作数除左边操作数,并返回余数。 示例:B MOD A将给出0。 |
例子
REPORT YS_SEP_08.
DATA: A TYPE I VALUE 150,
B TYPE I VALUE 50,
Result TYPE I.
Result = A / B.
WRITE / Result.
上面的代码产生以下输出
3
0-2 比较运算符
编号 | 比较运算符 & 描述 |
---|---|
1 | = (equality test)。 替代形式是 EQ。 检查两个操作数的值是否相等,如果相等,则条件变为 true。 实例 (A = B) is not true。 |
2 | <> (Inequality test)。 替代形式是 NE。 检查两个操作数的值是否相等如果值不相等,则条件变为 true。 实例 (A <> B) is true。 |
3 | > (Greater than test)。替代形式是 GT。 检查左操作数的值是否大于右操作数的值如果是,则条件变为 true。 实例 (A > B) is not true。 |
4 | < (Less than test)。 替代形式是 LT。 检查左操作数的值是否小于右操作数的值如果是,则条件变为 true。 实例 (A < B) is true。 |
5 | >= (Greater than or equals) 。替代形式是 GE。 检查左操作数的值是否大于或等于右操作数的值如果是,则条件变为 true。 实例 (A >= B) is not true。 |
6 | <= (Less than or equals test)。 替代形式是 LE。 检查左操作数的值是否小于或等于右操作数的值如果是,则条件变为 true。 实例 (A <= B) is true。 |
7 | a1 BETWEEN a2 AND a3 (Interval test) 检查 a1 是否位于 a2 和 a3 之间(包括 a2 和 a3)如果是,则条件变为 true。 实例 (A BETWEEN B AND C) is true。 |
8 | IS INITIAL 如果变量的内容没有更改并且已自动为其分配初始值,则条件变为 true。 实例 (A IS INITIAL) is not true |
9 | IS NOT INITIAL 如果变量的内容已更改,则条件变为 true。 实例 (A IS NOT INITIAL) is true。 |
注意:如果变量的数据类型或长度不匹配,则会执行自动转换。对一个或两个值执行自动类型调整,同时比较不同数据类型的两个值。转换类型由数据类型和数据类型的首选顺序决定。
以下是优先顺序:
- 如果一个字段的类型为 I,则另一个字段将转换为 I 类型。
- 如果一个字段的类型为 P,则另一个字段将转换为 P 类型。
- 如果一个字段的类型为 D,则另一个字段将转换为 D 类型。但 C 和 N 类型不会转换,而是直接进行比较。T 型的情况类似。
- 如果一个字段的类型为 N,另一个字段的类型为 C 或 X,则这两个字段都将转换为 P 类型。
- 如果一个字段的类型为 C,另一个字段的类型为 X,则 X 类型将转换为 C 类型。
实例 1
REPORT YS_SEP_08.
DATA: A TYPE I VALUE 115,
B TYPE I VALUE 119.
IF A LT B.
WRITE: / 'A is less than B'.
ENDIF
结果如下:
A is less than B
实例 2
REPORT YS_SEP_08.
DATA: A TYPE I.
IF A IS INITIAL.
WRITE: / 'A is assigned'.
ENDIF.
结果如下:
A is assigned.
0-3 位运算符
~
0-4 字符串运算符
以下是字符串运算符列表:
编号 | 字符串运算符 & 描述 |
---|---|
1 | CO (Contains Only) 检查 A 是否仅由 B 中的字符组成。 |
2 | CN (Not Contains ONLY) 检查 A 是否包含不在 B 中的字符。 |
3 | CA (Contains ANY) 检查 A 是否至少包含 B 的一个字符。 |
4 | NA (NOT Contains Any) 检查 A 是否不包含任何 B 字符。 |
5 | CS (Contains a String) 检查 A 是否包含字符串 B。 |
6 | NS (NOT Contains a String) 检查 A 是否不包含字符串 B。 |
7 | CP (Contains a Pattern) 它检查 A 是否包含 B 中的模式。 |
8 | NP (NOT Contains a Pattern) 它检查 A 是否不包含 B 中的模式。 |
实例
REPORT YS_SEP_08.
DATA: P(10) TYPE C VALUE 'APPLE',
Q(10) TYPE C VALUE 'CHAIR'.
IF P CA Q.
WRITE: / 'P contains at least one character of Q'.
ENDIF.
结果如下:
P contains at least one character of Q.
循环控制
编程时经常会遇到需要多次执行代码块的情况。通常,语句是按顺序执行的:首先执行函数中的第一条语句,然后执行第二条语句,依此类推。
编程语言提供了各种控制结构,支持更复杂的执行路径。循环语句 可以让我们多次执行一条语句或一组语句,以下是大多数编程语言中循环语句的一般形式:
ABAP 编程语言提供以下类型的循环语句来处理循环需求
编号 | 循环类型 & 描述 |
---|---|
1 | WHILE 循环 当给定条件为 true 时,重复一条语句或一组语句它在执行循环体之前判断条件。 |
2 | Do 循环 DO 语句可用于将特定任务重复特定次数。 |
3 | 嵌套循环 您可以在任何其他 WHILE 或 DO 循环中使用一个或多个循环。 |
循环控制语句
循环控制语句改变其正常顺序的执行。ABAP 包含支持提前结束循环的控制语句。
它支持以下控制语句:
编号 | 控制语句 & 描述 |
---|---|
1 | CONTINUE 使循环跳过其正文的其余部分并开始下一个循环过程。 |
2 | CHECK 如果条件为 false,则忽略检查后的其余语句,系统开始下一个循环过程。 |
3 | EXIT 完全终止循环,并将执行转移到紧跟在循环之后的语句。 |