Appearance
ABAP 赋值
一、基本赋值操作
1. 等号赋值 (=
)
- 语法:
<变量> = <值/表达式>
直接将值或表达式结果赋给变量,适用于所有基本数据类型:ml-citationabapDATA: lv_num TYPE i. lv_num = 100 + 20. " 结果赋值:lv_num = 120
2. MOVE 语句
- 语法:
MOVE <源> TO <目标>
功能与等号赋值相同,支持带偏移量的部分字段赋值
abap
DATA: lv_str1(5) TYPE C VALUE 'Hello',
lv_str2(5) TYPE C.
MOVE lv_str1+2(3) TO lv_str2. " 结果:lv_str2 = 'llo'
二、字段符号(Field Symbol)赋值
1. ASSIGN 动态绑定
- 语法:ASSIGN <变量> TO FIELD-SYMBOL(<fs>)
实现动态数据引用,修改字段符号会影响原变量
abap
Copy Code
FIELD-SYMBOLS: <fs_num> TYPE i.
DATA: lv_value TYPE i VALUE 50.
ASSIGN lv_value TO <fs_num>.
<fs_num> = 80. " lv_value 同步变为
2. 结构/内表动态访问
- 应用场景:动态修改内表或结构的指定字段
abap
Copy Code
ASSIGN COMPONENT 'NAME' OF STRUCTURE gs_data TO <fs_field>.
<fs_field> = 'John'. " 修改结构体 gs_data 的 NAME 字段
三、内表赋值操作
1. VALUE 构造器(7.40+)
- 语法:直接初始化或填充内表78
abap
Copy Code
TYPES: BEGIN OF ty_mat,
matnr TYPE matnr,
maktx TYPE maktx,
END OF ty_mat.
DATA(gt_materials) = VALUE ty_mat_table(
( matnr = 'M-001' maktx = '螺丝' )
( matnr = 'M-002' maktx = '螺母' )
).
2. FOR 循环赋值
- 动态生成数据:结合内联声明填充内表
abap
Copy Code
DATA(gt_data) = VALUE ty_table(
FOR i = 1 UNTIL i > 5 ( index = i value = i * 10 )
). " 生成索引1-5,值10-50的内表
四、结构体与全局赋值
1. CORRESPONDING 运算符
- 语法:
CORRESPONDING #( <源结构> )
自动匹配同名字段赋值,支持字段排除/映射68
abap
Copy Code
DATA: gs_src TYPE zs_order,
gs_dst TYPE zs_invoice.
gs_dst = CORRESPONDING #( gs_src ). " 同名字段自动复制
2. MOVE-CORRESPONDING
传统方式:结构体间同名字段批量赋值
abap
Copy Code
MOVE-CORRESPONDING gs_order TO gs_delivery. " 批量复制匹配字段
五、赋值操作对比与建议
操作类型 | 适用场景 | 版本要求 | 性能表现 |
---|---|---|---|
等号赋值 (=) | 简单变量赋值 | 所有版本 | 优 :ml-citation |
MOVE 语句 | 带偏移量的部分字段赋值 | 所有版本 | 良 :ml-citation |
VALUE 构造器 | 内表/结构体初始化 | ABAP 7.40+ | 优 :ml-citation |
CORRESPONDING | 结构体间同名字段批量赋值 | ABAP 7.40+ | 良 |
字段符号 | 动态数据操作 | 所有版本 | 高 :ml-citation |
最佳实践建议67: 1.优先使用新语法(如 VALUE/CORRESPONDING)提升代码可读性 2.涉及动态字段操作时选择字段符号 3.复杂内表操作建议采用 FOR 循环生成器 4.修改内表数据时优先使用 MODIFY ... TRANSPORTING 指定字段更新