ABAP语法基础篇(1)——数据类型和对象
一 、数据类型和对象
在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 。

浙公网安备 33010602011771号