matinal:ABAP 解析TYPE(S) DATA

2023-10-14 14:03:54 浏览数 (2)

代码语言:javascript复制
" 创建变量 约定俗成 
" g开头表示全局变量 global 
" l开头表示局部变量 local 
"   后面跟 v表示变量 s表示结构 t表示内表
" 基于标准类型创建

数据类型分类(DATA 声明的是对象,TYPE 声明的是类型)

  • 全局类型(数据字典中创建的类型)
    • DATA ELEMENT
代码语言:javascript复制
DATA LV_MAKTX TYPE MAKTX .
DATA LV_MAKTX TYPE MAKT-MAKTX . 
    • STRUCTURE
代码语言:javascript复制
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
代码语言:javascript复制
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.
  • 标准类型(系统预设的类型)
代码语言:javascript复制
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

可变

''

可变长字符串

代码语言:javascript复制
DATA GV_V1 . " 定义变量V1,默认为CHAR类型,长度为1
DATA GV_V2 TYPE C . " 定义变量V2,默认长度为1
DATA GV_V3(10) . " 定义变量V3,长度为10
  • 局部类型(程序中单独声明的类型)
代码语言:javascript复制
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 " 当前程序名

0 人点赞