SAP ABAP 变量

变量是命名的数据对象,用于在程序分配的内存区域内存储值。顾名思义,用户可以用 ABAP 语句更改变量的内容。

ABAP 中的每个变量都有一个特定的类型,它决定了变量内存的大小和布局,可存储在该存储器中的值的范围,以及可应用于变量的操作集。

必须先声明所有变量,然后才能使用它们。变量声明的基本形式是:

  1. DATA <f> TYPE <type> VALUE <val>.
  • <f> 指定变量的名称。变量的名称最多可包含 30 个字符。
  • <type> 指定变量的类型。任何具有完全指定的属性的数据类型都称为 <type>。
  • <val> 指定 <f> 变量的初始值。如果定义了一个基本的固定长度变量,DATA 语句会自动用特定于类型的初始值填充变量的值。<val> 也看也是其他的值,如文字、常量或显式子句,例如 Is INITIAL
  1. DATA d1(2) TYPE C.
  2. DATA d2 LIKE d1.
  3. DATA minimum_value TYPE I VALUE 10.

在上面的代码中,d1 是 C 类型的变量,d2 是 d1 类型的变量,minimum_value 是 ABAP integer 类型 I 的变量。

本章将解释 ABAP 中可用的各种变量类型。ABAP 中有 3 种变量:

  • 静态变量
  • 引用变量
  • 系统变量

静态变量(Static Variables)

  • 静态变量在子程序、函数模块和静态方法中声明。
  • 生命周期与声明的上下文相关联。
  • 使用 CLASS-DATA 语句,可以在类中声明变量。
  • PARAMETERS 语句可用于声明在选择界面上输入字段的基本数据对象。
  • 您还可以使用 SELECT-OPTIONS 语句声明在界面上输入字段的内部表。

以下是命名变量时使用的约定:

  • 不能使用特殊字符,如 "t" 和 "," 来命名变量。
  • 无法更改预定义数据对象的名称。
  • 变量的名称不能与任何 ABAP 关键字或子句相同。
  • 变量名称必须传达变量的含义,无需进一步注释。
  • 保留连字符以表示结构的组件。因此,应该避免在变量名中使用连字符。
  • 下划线字符可用于分隔复合词。

此程序显示如何使用 PARAMETERS 语句声明变量:

  1. REPORT ZTest123_01.
  2. PARAMETERS: NAME(10) TYPE C,
  3. CLASS TYPE I,
  4. SCORE TYPE P DECIMALS 2,
  5. CONNECT TYPE MARA-MATNR.

这里,NAME 表示一个 10 个字符的参数,CLASS 指定一个整数类型的参数,默认大小以字节为单位,SCORE 表示一个压缩类型的参数,值最多为两位小数,CONNECT 指的是 ABAP 字典的 MARA-MATNF 类型。

结果如下:


引用变量

声明引用变量的语法为:

  • REF TO 附加声明了一个引用变量 ref
  • REF TO之后的规范指定了引用变量的静态类型。
  • 静态类型限制 <ref> 可以引用的对象集。
  • 引用变量的动态类型是它当前引用的数据类型或类。
  • 静态类型总是更通用或与动态类型相同。
  • 类型添加用于创建绑定引用类型并作为起始值,并且只能在值添加后指定 IS INITIAL
实例
  1. CLASS C1 DEFINITION.
  2. PUBLIC SECTION.
  3. DATA Bl TYPE I VALUE 1.
  4. ENDCLASS. DATA: Oref TYPE REF TO C1 ,
  5. Dref1 LIKE REF TO Oref,
  6. Dref2 TYPE REF TO I .
  7. CREATE OBJECT Oref.
  8. GET REFERENCE OF Oref INTO Dref1.
  9. CREATE DATA Dref2.
  10. Dref2→* = Dref1→*→Bl.
  • 在上面的代码段中,声明了一个对象引用 Oref 和两个数据引用变量 Dref1Dref2
  • 这两个数据引用变量都是完全类型的,可以在操作数位置使用解引用操作符进行解引用 →* 。

系统变量

  • ABAP 系统变量可从所有 ABAP 程序访问。
  • 这些字段实际上由运行时环境填充。
  • 这些字段中的值表示系统在任何给定时间点的状态。
  • 您可以在 SAP 的 SYST 表中找到系统变量的完整列表。
  • 可以使用 "SYST" 或 "SY" 访问 SYST 结构的各个字段。
实例
  1. REPORT Z_Test123_01.
  2. WRITE:/'SY-ABCDE', SY-ABCDE,
  3. /'SY-DATUM', SY-DATUM,
  4. /'SY-DBSYS', SY-DBSYS,
  5. /'SY-HOST ', SY-HOST,
  6. /'SY-LANGU', SY-LANGU,
  7. /'SY-MANDT', SY-MANDT,
  8. /'SY-OPSYS', SY-OPSYS,
  9. /'SY-SAPRL', SY-SAPRL,
  10. /'SY-SYSID', SY-SYSID,
  11. /'SY-TCODE', SY-TCODE,
  12. /'SY-UNAME', SY-UNAME,
  13. /'SY-UZEIT', SY-UZEIT.

结果如下:

  1. SY-ABCDE ABCDEFGHIJKLMNOPQRSTUVWXYZ
  2. SY-DATUM 12.09.2015
  3. SY-DBSYS ORACLE
  4. SY-HOST sapserver
  5. SY-LANGU EN
  6. SY-MANDT 800
  7. SY-OPSYS Windows NT
  8. SY-SAPRL 700
  9. SY-SYSID DMO
  10. SY-TCODE SE38
  11. SY-UNAME SAPUSER
  12. SY-UZEIT 14:25:48