一 、数据类型和对象
在ABAP中可以使用与标准数据声明相似的语法处理数据类型,而与数据对象无关。在程序中必须声明要使用的全部数据对象。声明过程中,必须给数据对象分配属性,其中最重要的属性就是数据类型。
1.1 基本数据类型
数据类型 | 默认大小 | 有效大小 | 初始值 | 说明 |
---|---|---|---|---|
C | 1 | 1 - 65535 | SPACE | 文本、字符(字母数字字符) |
D | 8 | 8 | '00000000' | 日期(格式: YYYYMMDD ) |
F | 8 | 8 | 0 | 浮点数 |
I | 4 | 4 | 0 | 整型(整数) |
N | 1 | 1 - 65535 | '00...0' | 数字文本 |
P | 8 | 1 - 16 | 0 | 压缩号 |
T | 6 | 6 | '000000' | 时间(格式: HHMMSS ) |
X | 1 | 1 - 65535 | X'00' | 十六进制 |
对算术运算的非整型结果(如分数)进行四舍五入,而不是截断。类型 P 数据允许在小数点后有数字。
有效大小可以是从 1 到 16字节的任何值。将两个十进制数字压缩到一个字节,而最后一个字节包含一个数字和符号。在小数点后最多允许14个数字。
1.2 系统定义的数据对象
SPACE | 空白字符串 |
---|---|
SY-SUBRC | 系统执行传回值, 0 表示成功 |
SY-UNAME | 用户 |
SY-DATUM | 系统日期 |
SY-UZEIT | 系统时间 |
SY-TCODE | 当前执行程序的 Transaction code |
SY-INDEX | 当前 LOOP 循环过的次数 |
SY-TABIX | 当前处理的是 Internal Table (内部表) 的第几行 |
SY-TMAXL | Internal Table (内部表) 的总行数 |
SY-SROWS | 屏幕总行数 |
SY-SCOLS | 屏幕总列数 |
SY-VLINE | 画竖线 |
SY-ULINE | 画横线 |
SY-PAGNO | 当前页号 |
SY-LINSZ | 当前报表宽度 |
SY-LINCT | 当前报表长度 |
SY-LISND | 列表索引页 |
SY-LISTI | 上一个列表的索引 |
SY-LILLI | 绝对列表中选定的行号 |
SY-CUROW | 屏幕上的行 |
1.3 确定数据对象的属性
如果要查明数据对象的数据类型,或者要在程序的运行期间使用其属性,可使用 DESCRIBE
语句。语法如下:
DESCRIBE FIELD <f> [LENGTH <l>] [TYPE <t> [COMPONENTS <n>]]
[OUTPUT-LENGTH <o>] [DECIMALS <d>]
[EDIT MASK <m>].
将由语句的参数指定的数据对象
DESCRIBE FIELDS
语句具有下列参数:
参数 | 用途 |
---|---|
LENGTH | 确定字段长度 |
TYPE | 确定数据类型 |
OUTPUT-LENGTH | 确定输出长度 |
DECIMALS | 确定小数位 |
EDIT MASK | 确定转换例程 |
1.3.1 确定字段长度
要确定数据对象的长度 ,利用 DESCRIBE FIELD
语句使用 LENGTH
参数,如下所示:
DESCRIBE FIELD <f> LENGTH <l>.
系统读取字段 <f>
的长度,并将值写入字段 <l>
。
1.3.2 确定数据类型
要确定字段的数据类型 , 利用 DESCRIBE FIELD
语句使用 TYPE
参数,如下所示:
DESCRIBE FIELD <f> TYPE <t> [COMPONENTS <n>].
系统读取字段 <f>
的数据类型,然后将值写入字段 <t>
。
除返回预定义数据类型 C
、 D
、 F
、 I
、 N
、 P
、 T
和 X
外,该语句还返回:
s | 对于带前导符号的两字节整型 |
---|---|
b | 对于无前导符号的一字节整型 |
h | 对于内表 |
c | 对于组件中没有嵌套结构的结构 |
1.3.31 确定输出长度
要确定字段的输出长度 , 利用 DESCRIBE FIELD
语句使用 OUTPUT-LENGTH
参数,如下所示:
DESCRIBE FIELD <f> OUTPUT-LENGTH <o>.
系统读取字段 <f>
的输出长度,并将值写入字段 <o>
。
1.3.4 确定小数位
若要确定类型 P
字段的小数位的个数,利用 DESCRIBE FIELD
语句使用 DECIMALS
参数,如下所示:
DESCRIBE FIELD <f> DECIMALS <d>.
系统读取字段 <f>
的小数个数,并将值写入字段 <d>
。
1.3.5 确定转换例程
要确定 ABAP/4 词典中某字段的转换例程是否存在,如果存在,名称是什 么, 利用 DESCRIBE FIELD
语句使用 EDIT MASK
参数,如下所示:
DESCRIBE FIELD <f> EDIT MASK <m>.
如果 ABAP/4 词典中字段 <f>
的转换例程存在,则系统将其写入字段 <m>
,然后将系统字段 SY-SUBRC
中的返回代码设为 0
。
可以像下面所显示的那样,在 WRITE
语句中将字段 <m>
直接用作格式模板:
WRITE <f> USING EDIT MASK <m>.
如果字段 <f>
没有转换例程,则系统将返回代码设为 4
。