代码语言:javascript复制
代码语言:javascript复制
" 创建变量 约定俗成
" g开头表示全局变量 global
" l开头表示局部变量 local
" 后面跟 v表示变量 s表示结构 t表示内表
" 基于标准类型创建
数据类型分类(DATA 声明的是对象,TYPE 声明的是类型)
- 全局类型(数据字典中创建的类型)
- DATA ELEMENT
DATA LV_MAKTX TYPE MAKTX .
DATA LV_MAKTX TYPE MAKT-MAKTX .
-
- STRUCTURE
DATA STRU_DATA TYPE STRU_TYPE . " 参照类型声明一个变量
" 可以直接使用DATA声明变量的同时声明类型(带表头行)
DATA: BEGIN OF STRU_DATA_T.
DATA_NAME TYPE DATA_TYPE LENGTH LENGTH.
DATA_NAME TYPE DATA_TYPE LENGTH LENGTH.
DATA_NAME TYPE DATA_TYPE LENGTH LENGTH.
END OF STRU_DATA_T.
" 如果不明确数据类型但是需要创建一样结构的变量时可以使用LIKE,参照变量建立
DATA STRU_DATA_N LIKE STRU_DATA .
DATA STRU_DATA_l LIKE LINE OF TAB_NAME . " 不明确类型的时候声明和表相同的对象
-
- TABLE TYPE
TYPES TAB_TYPE TYPE TABLE OF STRU_TYPE . " 根据结构声明一个表类型的类型(必须现有行类型,才能参照行声明表类型)
DATA GT_T1 TYPE TAB_TYPE . " 根据表类型声明变量,不能加后缀?
" 参照结构体或者表声明内表
DATA GT_T2 TYPE TABLE OF STRU_TYPE .
DATA GT_T2 TYPE TABLE OF TAB_NAME WITH HEADER LINE . " 表头行,声明内表时声明工作区(行数据),使用时用带[]区别
" OCCURS表示初始化大小 表示声明初始化大小为0的带表头行的内表
DATA: BEGIN OF TAB_NAME OCCURS 0.
DATA_NAME TYPE DATA_TYPE LENGTH LENGTH.
DATA_NAME TYPE DATA_TYPE LENGTH LENGTH.
DATA_NAME TYPE DATA_TYPE LENGTH LENGTH.
END OF DATA_NAME.
- 标准类型(系统预设的类型)
DATA GV_CHAR TYPE C LENGTH 10 . " 示例
DATA GV_NUMC TYPE D LENGTH 10 VALUE '1234567890' . " 示例
DATA GV_DEC TYPE P LENGTH 10 DECIMALS 3 VALUE '123.456' . " 示例
DATA GV_INT TYPE I VALLUE 1 . " 示例 I类型不用指定长度
DATA GV_DATE TYPE D VALUE '20220731' . " 示例
DATA GV_TIME TYPE T VALUE '163100' . " 示例
类型 | 默认大小 | 初始值 | 说明 |
---|---|---|---|
C | 1个字符 | SPACE | 文本、字符 |
N | 1个字符 | '00...0' | 数字文本 |
P | 8个字节 | 0 | 将两个十进制数据压缩到一个字节 |
I | 4个字节 | 0 | 整型(十进制) |
D | 8个字符 | '00000000' | 日期(YYYYMMDD) |
T | 6个字符 | '000000' | 时间(HHMMSS) |
F | 8个字节 | 0 | 浮点型 |
STRING | 可变 | '' | 可变长字符串 |
DATA GV_V1 . " 定义变量V1,默认为CHAR类型,长度为1
DATA GV_V2 TYPE C . " 定义变量V2,默认长度为1
DATA GV_V3(10) . " 定义变量V3,长度为10
- 局部类型(程序中单独声明的类型)
TYPES DATA_TYPE_NAME TYPE DATA_TYPE LENGTH LENGTH. " 声明一个类型
" 声明数据类型
TYPES BEGIN OF TABLE_NAME .
TYPES DATA_TYPE_NAME TYPE DATA_TYPE .
TYPES DATA_TYPE_NAME TYPE DATA_TYPE .
TYPES DATA_TYPE_NAME TYPE DATA_TYPE .
TYPES END OF TABLE_NAME .
" 常用
TYPES: BEGIN OF TABLE_NAME ,
DATA_TYPE_NAME TYPE DATA_TYPE ,
DATA_TYPE_NAME TYPE DATA_TYPE ,
DATA_TYPE_NAME TYPE DATA_TYPE ,
DATA_TYPE_NAME TYPE DATA_TYPE ,
END OF TABLE_NAME .
" 对于较大的结构体或者表单(使用表单类型时需要注意MANDT字段的处理)需要添加少量属性时,可以使用INCLUDE,与其他字段同级
TYPES BEGIN OF TABLE_NAME .
INCLUDE STRUCTURE DATA_TYPE .
TYPES DATA_TYPE_NAME TYPE DATA_TYPE .
TYPES DATA_TYPE_NAME TYPE DATA_TYPE .
TYPES END OF TABLE_NAME .
" 常用
TYPES: BEGIN OF TABLE_NAME .
INCLUDE STRUCTURE DATA_TYPE .
TYPES: DATA_TYPE_NAME TYPE DATA_TYPE .
DATA_TYPE_NAME TYPE DATA_TYPE .
END OF TABLE_NAME .
代码语言:javascript复制" 定义逻辑结构时,可以将结构体(或者内表)声明到类型中,调用时使用 - 获取下级
TYPES: BEGIN OF LOGI_NAME_S ,
STRU_NAME TYPE STRU_TYPE ,
DATA_TYPE_NAME TYPE DATA_TYPE ,
DATA_TYPE_NAME TYPE DATA_TYPE ,
END OF LOGI_NAME_S .
" 调用示例
DATA GS_LOGI TYPE LOGI_NAME .
GS_LOGI-STRU_NAME-...
" 此时赋值看做是一个正常的字段,用MOVE进行赋值
MOVE GS_S1 TO GS_LOGI-STRU_NAME .
TYPES: BEGIN OF LOGI_NAME_T ,
TAB_NAME TYPE TAB_TYPE ,
DATA_TYPE_NAME TYPE DATA_TYPE ,
DATA_TYPE_NAME TYPE DATA_TYPE ,
END OF LOGI_NAME_T .
" 调用示例
DATA GS_LOGI TYPE LOGI_NAME_T .
GS_LOGI-TAB_NAME[] = IT_NAME[] . " 赋值
APPEND STRU_DATA TO GS_LOGI-TAB_NAME . " 赋值
赋值方法
代码语言:javascript复制GV_V1 = GV_V2 .
MOVE GV_V3 TO GV_V4 .
WRITE GV_V5 TO GV_V6 . " 需要注意GV_V6不能是数字类型(I/P)
WRITE GV_V7 TO GV_V8 CURRENCY 'CNY' . " 货币单位会改变数量的小数位数
MOVE-CORRESPONDING GS_S1 TO GS_S2 . " 对应属性赋值到结构变量
CONDENSE text [NO-GAPS]. " 去字符串空格
" 截取字符串(可以将日期时间看做字符串) 变量后面用加号 X(Y) 从第X位截取到Y位 当Y输入*时表示截取完
GV_CHAR 0(4) " 从第0位截取到第4位
代码语言:javascript复制" 内表操作 结构体赋值之前适用 CLEAR 清空数据,避免干扰
APPEND GS_T1 TO GT_T1 . " 添加行数据到内表
APPEND GS_T2 . " 带表头行声明(WITH HEADER LINE)的内表可以省略
READ TABLE GT_T3 INTO GS_T3 INDEX 1 . " 读取内表数据
代码语言:javascript复制CONSTANTS CDATA TYPE C LENGTH 10 VALUE 'GOOD' . " 常量初始化时必须赋值
TABLES TAB_NAME . " 创建和数据库表名相同的结构体
" 系统定义的数据对象 SYST 结构体 列举常用字段
SUBRC " 语句返回结果 0 表示成功
UNAME " 用户名
DATUM " 日期
UZEIT " 时间
TABIX " 内表的索引
INDEX " 循环的次数
REPID " 当前程序名