SAP ABAP——数据类型(二)【TYPES自定义数据类型详解】

简介: 在上一文 SAP ABAP——数据类型(一)【数据类型概要及分类】我们知道了ABAP中三种类型的数据类型,本文承接上一文继续对ABAP中关于用户自定义数据类型TYPES进行一个深入的讲解!关于全局数据字典类型更详细的介绍将会在下一章节【数据字典】中进行详解!

在上一文

SAP ABAP——数据类型(一)【数据类型概要及分类】

介绍了SAP ABAP中数据类型的概要以及分类,我们知道了ABAP中三种类型的数据类型,本文承接上一文继续对ABAP中关于用户自定义数据类型TYPES进行一个深入的讲解!关于全局数据字典类型更详细的介绍将会在下一章节【数据字典】中进行详解!


定义单一类型

参照预定义数据类型定义

TYPES:CHAR_10 TYPE CHAR10, "10位字符串
       CHAR_20 TYPE C LENGTH 20, "20位字符串
       P_8_2   TYPE P LENGTH 8 DECIMALS 2. "16位数字型变量,两位小数

参照全局数据字典类型定义

         下面列举了最常见的参照全局数据字典类型定义普通单一类型的示例代码:


参照数据库表字段定义

TYPES:ZCARRID TYPE SFLIGHT-CARRID,
      ZCONNID TYPE SFLIGHT-CONNID,
      ZFLDATE TYPE SFLIGHT-FLDATE,
      ZPRICE  TYPE SFLIGHT-PRICE.

数据库表sflight如下:

dac2a325f73186f3270614978c5ccaa.png


参照数据元素定义

TYPES:ZCARRID TYPE S_CARR_ID,
       ZCONNID TYPE S_CONN_ID,
       ZFLDATE TYPE S_DATE,
       ZPRICE  TYPE S_PRICE.

使用的数据元素为上述数据库表sflight中所定义好的:

b9bf4829406540b8c0ee1e78125ddd5.png


参照数据字典结构中组件定义

TYPES: ZFIELDNAME TYPE /EACA/O_CHAR_T-FIELDNAME.

数据字典结构/EACA/O_CHAR_T如下:

df9440569f849f7823a9bdd332e6652.png


参照类/接口定义

TYPES:WCL_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
       WCL_ALV       TYPE REF TO CL_GUI_ALV_GRID.

参照用户已定义数据类型再定义

         下面的示例代码首先各选取了上述各一个例子进行用户自定义类型,然后再分别参照自定义类型再定义相同的类型,后缀为【_copy】,展示如何参照用户已定义数据类型再定义:

*首先进行自定义数据类型:
TYPES:CHAR_10 TYPE CHAR10,
      ZCARRID TYPE SFLIGHT-CARRID,
      ZCONNID TYPE S_CONN_ID,
      ZFIELDNAME TYPE /EACA/O_CHAR_T-FIELDNAME,
      WCL_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
*然后分别参照上面已定义的数据类型在定义:
TYPES:CHAR_10_COPY       TYPE CHAR_10,
      ZCARRID_COPY       TYPE ZCARRID,
      ZCONNID_COPY       TYPE ZCONNID,
      ZFIELDNAME_COPY    TYPE ZFIELDNAME,
      WCL_CONTAINER_COPY TYPE WCL_CONTAINER.

定义结构体类型

参照预定义数据类型定义

TYPES:BEGIN OF TY_CLASS,
       TEA_NAME TYPE C LENGTH 10,
       TEA_ID   TYPE N LENGTH 8,
       STU_NAME TYPE C LENGTH 10,
       STU_ID   TYPE N LENGTH 8,
     END OF TY_CLASS.

参照全局数据字典类型定义

         下面列举了最常见的参照全局数据字典类型定义结构体类型的示例代码:


参照数据库表字段定义

TYPES:BEGIN OF TY_SFLIGHT,
       ZCARRID  TYPE SFLIGHT-CARRID,
       ZCONNID  TYPE SFLIGHT-CONNID,
       ZFLDATE  TYPE SFLIGHT-FLDATE,
       ZPRICE   TYPE SFLIGHT-PRICE,
     END OF TY_SFLIGHT.

数据库表sflight如下:

79b39afa490c3bf0fc72b6951a08c78.png


参照数据元素定义

TYPES:BEGIN OF TY_SFLIGHT,
       ZCARRID  TYPE S_CARR_ID,
       ZCONNID  TYPE S_CONN_ID,
       ZFLDATE  TYPE S_DATE,
       ZPRICE   TYPE S_PRICE,
     END OF TY_SFLIGHT.

参照数据字典结构中组件定义

TYPES:BEGIN OF TY_/EACC/YS_WA_JOURNAL,
       ZPST_DAT        TYPE /EACC/YS_WA_JOURNAL-PST_DAT,
       ZACC_SYSTEM     TYPE /EACC/YS_WA_JOURNAL-ACC_SYSTEM,
       ZBUS_TRANS_CAT  TYPE /EACC/YS_WA_JOURNAL-BUS_TRANS_CAT,
       ZITEM_CAT       TYPE /EACC/YS_WA_JOURNAL-ITEM_CAT,
       ZJOURNAL        TYPE  /EACC/YS_WA_JOURNAL-JOURNAL,
     END OF TY_/EACC/YS_WA_JOURNAL.

数据字典结构/EACC/YS_WA_JOURNAL如下:

83a47d21c53e015bd5b308c39ac7058.png


参照数据字典结构定义

TYPES:TY_/EACC/YS_WA_JOURNAL TYPE /EACC/YS_WA_JOURNAL.

参照类/接口定义

TYPES:BEGIN OF TY_ALV,
       WCL_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
       WCL_ALV       TYPE REF TO CL_GUI_ALV_GRID,
      END OF TY_ALV.

参照用户已定义数据类型再定义

         下面的示例代码首先各选取了上述各一个例子进行用户自定义类型,然后再分别参照自定义类型再定义相同的类型,后缀为【_copy】,展示如何参照用户已定义数据类型再定义:

TYPES:BEGIN OF TY_TEST,
       TEA_NAME               TYPE C LENGTH 10,
       ZCARRID                TYPE SFLIGHT-CARRID,
       ZCONNID                TYPE S_CONN_ID,
       ZPST_DAT               TYPE /EACC/YS_WA_JOURNAL-PST_DAT,
       GS_/EACC/YS_WA_JOURNAL TYPE /EACC/YS_WA_JOURNAL,
       WCL_CONTAINER          TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
     END OF TY_TEST.
TYPES: TY_TEST_COPY TYPE TY_TEST."参照自定义的结构TY_TEST再定义

定义内部表类型(标准表,排序表,哈希表)

参照全局数据字典类型定义

         下面列举了最常见的参照全局数据字典类型定义表类型的示例代码:其中关于内表的三种表类型将在后续章节【内表】中进行更加详细的讲解!


参照数据库表定义

*定义标准表类型
TYPES: TY_TAB_SFLIGHT  TYPE TABLE OF SFLIGHT ,
       TY_TAB_SFLIGHT1 TYPE STANDARD TABLE OF SFLIGHT ,
       TY_TAB_SFLIGHT2 TYPE TABLE OF SFLIGHT WITH NON-UNIQUE KEY CARRID CONNID FLDATE,
       TY_TAB_SFLIGHT3 TYPE STANDARD TABLE OF SFLIGHT WITH NON-UNIQUE KEY CARRID CONNID FLDATE.
*定义排序表类型
TYPES: TY_TAB_SFLIGHT4  TYPE SORTED TABLE OF SFLIGHT ,
       TY_TAB_SFLIGHT5 TYPE SORTED TABLE OF SFLIGHT WITH UNIQUE KEY CARRID CONNID FLDATE,
       TY_TAB_SFLIGHT6 TYPE SORTED TABLE OF SFLIGHT WITH NON-UNIQUE KEY CARRID CONNID FLDATE.
*定义哈希表类型
TYPES: TY_TAB_SFLIGHT7  TYPE HASHED TABLE OF SFLIGHT ,
       TY_TAB_SFLIGHT8 TYPE HASHED TABLE OF SFLIGHT WITH UNIQUE KEY CARRID CONNID FLDATE.

参照数据字典表类型定义

TYPES: TY_TAB_HRPERNR  TYPE  HRAHQ_PERNR_TABLE .

PS:【TYPE】后面跟全局的表类型(标准表、排序表、哈希表),所以不需要使用【TYPE [STANDARD|SORTED|HASHED] TABLE OF】语句


参照数据字典结构定义内部表类型

*定义标准表类型
TYPES:  TY_TAB_/EACC/YS_WA_JOURNAL  TYPE TABLE OF /EACC/YS_WA_JOURNAL ,
        TY_TAB_/EACC/YS_WA_JOURNAL1 TYPE STANDARD TABLE OF /EACC/YS_WA_JOURNAL ,
        TY_TAB_/EACC/YS_WA_JOURNAL2 TYPE TABLE OF /EACC/YS_WA_JOURNAL WITH NON-UNIQUE KEY PST_DAT 
ACC_SYSTEM BUS_TRANS_CAT.
        TY_TAB_/EACC/YS_WA_JOURNAL3 TYPE STANDARD TABLE OF /EACC/YS_WA_JOURNAL WITH NON-UNIQUE KEY PST_DAT 
ACC_SYSTEM BUS_TRANS_CAT.
*定义排序表类型
TYPES:  TY_TAB_/EACC/YS_WA_JOURNAL4  TYPE SORTED TABLE OF  /EACC/YS_WA_JOURNAL ,
        TY_TAB_/EACC/YS_WA_JOURNAL5  TYPE SORTED TABLE OF  /EACC/YS_WA_JOURNAL WITH UNIQUE KEY PST_DAT 
ACC_SYSTEM BUS_TRANS_CAT,
        TY_TAB_/EACC/YS_WA_JOURNAL6  TYPE SORTED TABLE OF  /EACC/YS_WA_JOURNAL WITH NON-UNIQUE KEY 
PST_DAT ACC_SYSTEM BUS_TRANS_CAT.
*定义哈希表类型
TYPES: TY_TAB_/EACC/YS_WA_JOURNAL7 TYPE HASHED TABLE OF /EACC/YS_WA_JOURNAL ,
       TY_TAB_/EACC/YS_WA_JOURNAL8 TYPE HASHED TABLE OF /EACC/YS_WA_JOURNAL WITH UNIQUE KEY PST_DAT 
ACC_SYSTEM BUS_TRANS_CAT.

数据字典结构/EACC/YS_WA_JOURNAL如下:

9c08ebf7466d033560a18b87ccbd4aa.png


参照用户已定义数据类型再定义

         下面列举了两种参照自定义数据类型再定义表类型的示例代码:一种方法是参照自定义结构再定义,另一种方法是参照自定义表类型再定义


参照自定义结构类型再定义

*定义标准表类型
TYPES:BEGIN OF TY_CLASS,
       TEA_NAME TYPE C LENGTH 10,
       TEA_ID   TYPE N LENGTH 8,
       STU_NAME TYPE C LENGTH 10,
       STU_ID   TYPE N LENGTH 8,
     END OF TY_CLASS.
*定义标准表类型
TYPES: TY_TAB_CLASS  TYPE TABLE OF TY_CLASS ,
       TY_TAB_CLASS1 TYPE STANDARD TABLE OF TY_CLASS ,
       TY_TAB_CLASS2 TYPE TABLE OF TY_CLASS WITH NON-UNIQUE KEY  TEA_ID STU_ID,
       TY_TAB_CLASS3 TYPE STANDARD TABLE OF TY_CLASS WITH NON-UNIQUE KEY TEA_ID STU_ID.
*定义排序表类型
TYPES: TY_TAB_CLASS4 TYPE SORTED TABLE OF TY_CLASS ,
       TY_TAB_CLASS5 TYPE SORTED TABLE OF TY_CLASS WITH UNIQUE KEY TEA_ID STU_ID,
       TY_TAB_CLASS6 TYPE SORTED TABLE OF TY_CLASS WITH NON-UNIQUE KEY TEA_ID STU_ID.
*定义哈希表类型
TYPES: TY_TAB_CLASS7  TYPE HASHED TABLE OF TY_CLASS ,
       TY_TAB_CLASS8 TYPE HASHED TABLE OF TY_CLASS WITH UNIQUE KEY TEA_ID STU_ID.

参照自定义内部表类型再定义

*先定义结构
TYPES:BEGIN OF TY_CLASS,
       TEA_NAME TYPE C LENGTH 10,
       TEA_ID   TYPE N LENGTH 8,
       STU_NAME TYPE C LENGTH 10,
       STU_ID   TYPE N LENGTH 8,
     END OF TY_CLASS.
*定义标准表类型
TYPES: TY_TAB_CLASS      TYPE STANDARD TABLE OF TY_CLASS WITH NON-UNIQUE KEY TEA_ID STU_ID,
       TY_TAB_CLASS_COPY TYPE TY_TAB_CLASS ."参照已定义的标准表类型TY_TAB_CLASS再定义
*定义排序表类型
TYPES: TY_TAB_CLASS1      TYPE SORTED TABLE OF TY_CLASS WITH NON-UNIQUE KEY TEA_ID STU_ID,
       TY_TAB_CLASS2      TYPE SORTED TABLE OF TY_CLASS WITH UNIQUE KEY TEA_ID STU_ID,
       TY_TAB_CLASS_COPY1 TYPE TY_TAB_CLASS1, "参照已定义的排序表类型TY_TAB_CLASS1再定义
       TY_TAB_CLASS_COPY2 TYPE TY_TAB_CLASS1. "参照已定义的排序表类型TY_TAB_CLASS2再定义
*定义哈希表类型
TYPES: TY_TAB_CLASS3      TYPE HASHED TABLE OF TY_CLASS WITH UNIQUE KEY TEA_ID STU_ID,
       TY_TAB_CLASS_COPY3 TYPE TY_TAB_CLASS3 . "参照已定义的哈希表类型TY_TAB_CLASS3再定义

定义RANGE表类型

TYPES: <rtype> TYPE RANGE OF <type> [INITIAL SIZE n].

案例代码演示

TYPES:ty_range     TYPE c LENGTH 10,
      ty_range_tab TYPE RANGE OF ty_range.
DATA:gv_range TYPE ty_range_tab.

效果演示

         上面给出了定义RANGE表类型的代码示例,并且最后使用了【DATA】语句将结构体类型实例化并且加入断点进行观察,RANGE表结构如下图所示:

f89a2b2786eab142ba222969392c420.png


目录
相关文章
SAP ABAP 程序调用设置成后台作业模式
ABAP 程序调用设置成后台作业模式
516 0
SAP ABAP 内表排序 动态字段排序
对于动态内表排序引用ABAP_SORTORDER_TAB
292 0
|
SQL 设计模式 前端开发
【置顶】SAP ABAP开发实战——从入门到精通系列目录
本文章为SAP ABAP开发实战——从入门到精通系列的目录以及关于该教程的后续写作计划表
1580 0
【置顶】SAP ABAP开发实战——从入门到精通系列目录
|
SQL
SAP ABAP-OPENSQL-数值函数简介
S4中针对OPENSQL新提供一些函数
139 0
|
SQL
SAP ABAP-OPENSQL-字符串函数介绍
S4中SQL新语法字符串函数
209 0
|
SQL
SAP ABAP-OPENSQL-日期/时间戳函数
S4提供针对OPENSQL一些新的SQL函数调用,本文展示相关函数的使用
651 0
SAP ABAP-删除工序示例代码
ABAP-删除工序示例代码
171 0
SAP ABAP 检查事务码权限
检查用户是否有自开发事务码的权限
157 0
|
BI
SAP ABAP在线预览文档对象的开发实现
应用场景:有些定制化开发(报表/功能增强等)完成之后,客户需要将其操作手册或者相关文档放在某个报表的初始画面,供实际操作者在线查阅,当然这个功能也同样类似于模板的下载,这里就以在线预览(直接打开)为例进行说明。
225 0
SAP ABAP字符串拼接保留空格
字符串操作保留空格
1083 0