公众号:matinal " 创建变量 约定俗成 " 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 .
" 定义逻辑结构时,可以将结构体(或者内表)声明到类型中,调用时使用 - 获取下级 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 . " 赋值
赋值方法
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位
" 内表操作 结构体赋值之前适用 CLEAR 清空数据,避免干扰 APPEND GS_T1 TO GT_T1 . " 添加行数据到内表 APPEND GS_T2 . " 带表头行声明(WITH HEADER LINE)的内表可以省略 READ TABLE GT_T3 INTO GS_T3 INDEX 1 . " 读取内表数据
CONSTANTS CDATA TYPE C LENGTH 10 VALUE 'GOOD' . " 常量初始化时必须赋值 TABLES TAB_NAME . " 创建和数据库表名相同的结构体 " 系统定义的数据对象 SYST 结构体 列举常用字段 SUBRC " 语句返回结果 0 表示成功 UNAME " 用户名 DATUM " 日期 UZEIT " 时间 TABIX " 内表的索引 INDEX " 循环的次数 REPID " 当前程序名