系统变量查看
T-CODE: se11
结构: syst
使用:SY-名称
数据类型
- 数据对象的技术特性的定义
- 本身不占用内存空间
- 可以是系统预定义或者用户自定义
数据对象
- 内存变量
- 指定为某一特定数据类型
常用预定义数据类型
类型缩写 | 类型 | 默认长度 | 允许长度 | 初始值 | 描述 |
---|---|---|---|---|---|
C | 文本型 | 1 | - | Space | 字符串数据,如'Program' |
D | 日期型 | 8 | 8 | '00000000' | 日期数据,格式为YYYYMMDD |
F | 浮点型 | 8 | 8 | 0 | 浮点数 |
I | 整数 | 4 | 10 | 0 | 带正负符号的整数 |
N | 数值型 | 1 | 31 | ‘000...0’ | 数值所组成的字符串 |
P | 压缩型 | 8 | 16 | 0 | 将两个 十进制数字压缩到一个字节 |
T | 时间型 | 6 | 6 | ‘000000’ | 时间 |
1.默认的定义数据类型是CHAR。
2.取值的时候C型默认从左取,N型从右取,超过定义长度则截断。
3.C类型,可以赋值数值,也可以赋值字符,还可以混合,不过取值时如果是数值类型靠右取值。
4.日期和时间类型的变量可进行加减乘除运算。
5.P类型.小数点要使用DECIMAL声明
定义数据类型——TYPES
- 在程序中用types声明局部数据类型
- 语法格式与变量类似
- 用Types定义的类型在程序中用于声明常量或者变量
- Types定义的是类型,不是变量,所以不能直接赋值
- ABAP数据类型可以是预定义数据类型,可以是数据字典里的全局数据类型,或者用户在程序中自定义的数据类型。
运算符
+-*/ 可以使用
div 取整,mod 取余数
比较运算符
= EQ, <>或><或者NE, <LT, >GT, <=LE, >=GE,
逻辑运算符:
AND,OR,NOT
运算函数
变量定义包含name, length, type等,语法如下:
DATA <name> [<length>] type <type>[ value <value>] [ decimal <decimals>]
其中: [] 里的内容表示可选项。<>表示名称
<name>: 变量名称, 最长30个字符, 不可含有 + . , : ( ) 等字符
<length>长度,要用圆括号括起来 如 LINE(20) TYPE C.
<type>:数据类型
<value>: 初始值
<decimals>: 小数位
DATA:C1 TYPE C,
INT1 TYPE I VALUE 1,
TEMP TYPE P DECIMAL 2.
关键字TYPE和LIKE
变量定义也可以用关键字LIKE
DATA <name> [<length>] like<object>|<type>[ value <value>] [ decimal <decimals>]
TYPE 与LIKE的区别:
LIKE 用在已有值的数据类型, 如系统变量, 而TYPE则是用在 定义数据类型。
DATA: MYDATA LIKE SY-DATUM.
DATA:TRANSCODE LIKE SY-TCODE.
常量定义使用 CONSTANTS
CONSTANTS<常量名>[<长度> ] TYPE <数据类型> VALUE <默认值>
常量值一旦被定义,即被长期保存在内存,其值无法改变
CONSTANTS PI TYPE P DECIMALS 5 VALUE '3.14159'.
" 系统常量"
SY-SUBRC : 系统执行某指令后,表示执行成功与否的变量,'0' 表示成功
SY-UNAME: 当前使用者登入SAP的USERNAME;
SY-DATUM: 当前系统日期;
SY-UZEIT: 当前系统时间;
SY-TCODE: 当前执行程序的Transaction code
SY-INDEX : 当前LOOP循环过的次数
SY-TABIX: 当前处理的是internal table 的第几笔
SY-MANDT: CLIENT(客户端编号) NUMBER
SY-VLINE: 画竖线
SY-ULINE: 画横线
结构体定义:
有结构的变量
程序中用DATA定义的局部变量
DATA: BEGIN OF <name>
<field1>……
<field2>……
END OF<name>.
DATA:BEGIN OF USERINF,
SID(10) TYPE C,
NAME(20) TYPE C,
TEL(20) TYPE C,
END OF USERINF.
DATA USER2 TYPE USERINF.
结构体赋值:
- 可对结构体直接赋值
- 相同结构体之间可以使用等号来实现数据的复制
- WRITE Structure Name可输出所有字段,或使用<Structure>-<field name>输出指定字段
- 相同结构体之间使用Move……To……进行赋值;
有差异的结构体,可使用MOVE-CORRESSPONDING匹配及赋值相同的字段
USERINF-SID='A00001'.
USERINF-NAME='JERY'.
USERINF-TEL='010-12345678'.
USER2=USERINF.
WRITE:USER2, / USERINF-SID.
DATA:BEGIN OF USERDETAIL,
SID(10) TYPE C,
NAME(20) TYPE C,
BIRDATE TYPE D,
ADD(50) TYPE C,
END OF USERDETAIL.
MOVE-CORRESSPONDING USERINF TO USERDETAIL.
结构体继承:
参考已存在的结构体创建一个属性相同的新结构体
可在新结构体中增加字段
定义语句:INCLUDE STRUCTURE
DATA:BEGIN OF EMPLOYEE,
INCLUDE STRUCTURE USERINF,
DATA:BIRTHDATE TYPE D,
ADD(50) TYPE C,
END OF EMPLOYEE.
MOVE-CORRESSPONDING USERINF TO USERDETAIL.
数据的赋值是程序的常用操作
- MOVE <F1> TO <F2>
将F1的值存至变量 F2 中,F1与F2可以是不同类型的变量,但有一定限制。
DATA: m_gendle(4) TYPE c.
MOVE 'MALE' TO m_gendle.
WRITE: m_gendle.
- WRITE <value> TO <field>.带有格式的赋值
这里的WRITE用于赋值,不是用于输出
DATA: NAME(20) VALUE 'SOURCE',
SOURCE(10) VALUE 'LILY',
TARGET(10).
WRITE (NAME) TO TARGET.�WRITE / TARGET.
DATA: gv_char1(20) TYPE c,
gv_char2(20) TYPE c,
dec1(10) TYPE p DECIMALS 2 VALUE '22345.89'.
* date *
WRITE:/ 'date variable'.
WRITE sy-datum TO gv_char1.
WRITE:/ 'write to', gv_char1.
MOVE sy-datum TO gv_char2.
WRITE:/ 'move to',
gv_char2.
SKIP 1.
* decimal *
WRITE:/ 'decimal variable'.
WRITE dec1 TO gv_char1.
WRITE:/ 'write to', gv_char1.
MOVE dec1 TO gv_char2.
WRITE:/'move to', gv_char2.
- 在源字段中取偏移量赋值给目标变量:
MOVE <f1>[+<偏移量>][(<取数位>)] TO <f2>[+<偏移量>][(<取数位>)
WRITE <f1>[+<偏移量>][(<取数位>)] TO <f2>[+<偏移量>][(<取数位>)
<f2>[+<偏移量>][(<取数位>) = <F1>+ [+<偏移量>][(<取数位>)]
DATA: F1(10) VALUE 'ABCDEFGHIJ',
F2(5).
F2 = F1+3(5).
WRITE: F1, / F2.
- 用于结构体的赋值,将Strings1中的field组件的数据复制至String2中, 仅复制相同名称的字段:
MOVE –CORRESPONDING <Strings1> TO <String2>.
- 指针对象,通过语句FIELD-SYMBOLS加上将括号“<>”来定义。
FIELD-SYMBOLS <fs>.
ASSIGN <value> TO <field>.
可以不指定参考类型,用语句ASSIGN来分配给它变量.
<FS>并不是变量,存放的是变量的地址,而非变量本身。
如果修改了field symbol的值,则相应的变量的值也随之更改。
DATA NUM TYPE I VALUE 12.
FIELD-SYMBOLS: <F1>,
<F2> TYPE I,
<F3> LIKE NUM.
ASSIGN: NUM TO <F1>,
NUM TO <F2>,
NUM TO <F3>.
WRITE: / NUM, <F1>,<F2>,<F3>.
<F2> = 25.
WRITE: / NUM, <F1>,<F2>,<F3>.
类型转换
- 在不同类型的数据对象之间赋值,会自动进行类型的转换;
- 转换过程遵照固定的规则,如C类型数据赋值给N类型,只有数字字符被传递,其他忽略;
- C不能直接赋值给I,需要C>N>I;
- 可以使用MOVE TO或WRITE TO语句。
DATA:TEXT(10) TYPE C VALUE 'ABC1234567',
NUM(10) TYPE N,
INT TYPE I.
NUM = TEXT.
INT = NUM.
WRITE: NUM, INT.
DATA: CHR TYPE C.
FIELD-SYMBOLS:<FS> TYPE X,
<FC> TYPE C.
CHR = 'A'.
ASSIGN CHR TO <FS> CASTING.
WRITE: CHR, <FS>.
<FS> = <FS>+1.
ASSIGN <FS> TO <FC> CASTING.
MOVE <FC> TO CHR.
WRITE:/ CHR, <FS>, <FC>.
日期处理
DATA: ULTIMO TYPE D.
ULTIMO = SY-DATUM. “如果传回20050928
ULTIMO+6(2) = ‘01’. “ 则为20050901
ULTIMO = ULTIMO - 1. “ 为20050831