Skip to content

ABAP 赋值

一、基本赋值操作

1. 等号赋值 (=)

  • 语法‌:<变量> = <值/表达式>
    直接将值或表达式结果赋给变量,适用于所有基本数据类型‌:ml-citation
    abap
    DATA: 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 指定字段更新