ABAP语法笔记02 - TYPE(S) DATA

" 创建变量 约定俗成 
" 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基本数据类型
类型 默认大小 初始值 说明
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 " 当前程序名

 

posted @ 2022-07-31 14:34  BoyBo  阅读(251)  评论(0)    收藏  举报