matinal:ABAP 解析TYPE(S) DATA

公众号: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' . " 示例
ABAP基本数据类型
类型默认大小初始值说明
C1个字符SPACE文本、字符
N1个字符'00...0'数字文本
P8个字节0

将两个十进制数据压缩到一个字节

I4个字节0

整型(十进制)

D8个字符'00000000'日期(YYYYMMDD)
T6个字符'000000'时间(HHMMSS)
F8个字节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 " 当前程序名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值