ABAP 语句与控制流 (★★★★)
#abap #abap-syntax
概览表
| 类别 |
语句 |
要点 |
| 赋值 |
MOVE, =, MOVE-CORRESPONDING |
值传递 |
| 输出 |
WRITE |
列表输出 |
| 计算 |
COMPUTE, +, -, *, / |
算术运算 |
| 条件 |
IF/ELSEIF, CASE |
分支逻辑 |
| 循环 |
DO, WHILE |
迭代 |
| 消息 |
MESSAGE |
用户反馈 |
赋值语句
1 2 3 4 5 6 7 8 9
| " 简单赋值 MOVE gv_a TO gv_b. gv_b = gv_a. " 等效写法
" 结构赋值 MOVE-CORRESPONDING gs_src TO gs_dest. " 复制匹配的字段名
" 清除数据对象 CLEAR gv_var.
|
只有在两个结构中名称相同的字段才会被复制。仅存在于一个结构中的字段将被忽略。
计算运算
1 2 3 4 5 6
| COMPUTE gv_result = gv_a + gv_b. " COMPUTE 是可选的 gv_result = gv_a + gv_b. " 与上面等效 gv_result = gv_a * gv_b / gv_c.
" 内置函数 gv_len = STRLEN( gv_text ). " 字符串长度
|
类型转换规则
在不同类型之间赋值时,ABAP 会执行自动转换:
- C → N:仅保留数字字符
- N → I/N:字符串被解释为数字
- P → I:截断小数位
类型冲突可能导致运行时错误或意外结果。在不同数据类型之间赋值时,务必确保类型兼容。
控制结构
条件分支
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| " IF 语句 IF gv_num > 0. WRITE 'Positive'. ELSEIF gv_num = 0. WRITE 'Zero'. ELSE. WRITE 'Negative'. ENDIF.
" CASE 语句 CASE gv_op. WHEN '+'. gv_result = gv_a + gv_b. WHEN '-'. gv_result = gv_a - gv_b. WHEN OTHERS. WRITE 'Invalid'. ENDCASE.
|
循环
1 2 3 4 5 6 7 8 9
| " DO 循环(固定次数) DO 5 TIMES. WRITE: / 'Iteration', sy-index. ENDDO.
" WHILE 循环(条件控制) WHILE gv_num < 100. gv_num = gv_num + 1. ENDWHILE.
|
DO 和 WHILE 都使用 sy-index 作为循环计数器(不是 sy-tabix)。
系统字段
| 字段 |
用途 |
设置者 |
sy-subrc |
返回代码(0 = 成功) |
大多数语句 |
sy-index |
循环计数器 |
DO, WHILE |
sy-tabix |
表行索引 |
LOOP, READ TABLE |
sy-dbcnt |
处理的数据库行数 |
SELECT |
sy-ucomm |
功能代码 |
屏幕 PAI |
消息
1 2 3 4 5 6 7 8
| MESSAGE e001(bc400). " 错误消息 (E) MESSAGE s001(bc400). " 成功消息 (S) MESSAGE i001(bc400). " 信息消息 (I) MESSAGE a001(bc400). " 终止消息 (A) MESSAGE w001(bc400). " 警告消息 (W)
" 带变量 MESSAGE e001(bc400) WITH gv_val1 gv_val2.
|
链式语句
1 2 3
| WRITE: 'Hello', 'World', gv_name. " 等效于: WRITE 'Hello'. WRITE 'World'. WRITE gv_name.
|
文本元素
| 类型 |
用途 |
维护方式 |
| 文本符号 |
运行时被 text-001 替换 |
文本元素 → 文本符号 |
| 选择文本 |
PARAMETERS 字段的标签 |
文本元素 → 选择文本 |
| 列表标题 |
列表标题/列标题 |
文本元素 → 列表标题 |
考试/测试模式
| 场景/关键词 |
答案 |
| “DO/WHILE 的循环计数器?” |
sy-index |
| “MOVE-CORRESPONDING 复制哪些字段?” |
两个结构中同名的字段 |
| “链式语句是什么?” |
多条语句共享相同开头,用逗号分隔 |
| “如何定义带值的常量?” |
CONSTANTS gc_name TYPE type VALUE val. |
相关笔记