个人网站:【芒果个人日志】
原文地址:SAP ABAP——数据类型(二)【TYPES自定义数据类型详解】 - 芒果个人日志 (wyz-math.cn)
作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。
文章概要:本文继续对ABAP中关于用户自定义数据类型TYPES进行一个深入的讲解!关于全局数据字典类型更详细的介绍将会在下一章节【数据字典】中进行详解!
每日一言:宝剑锋从磨砺出,梅花香自苦寒来。
在上一文
SAP ABAP——数据类型(一)【数据类型概要及分类】
介绍了SAP ABAP中数据类型的概要以及分类,我们知道了ABAP中三种类型的数据类型,本文承接上一文继续对ABAP中关于用户自定义数据类型TYPES进行一个深入的讲解!关于全局数据字典类型更详细的介绍将会在下一章节【数据字典】中进行详解!
目录
定义单一类型
参照预定义数据类型定义
参照全局数据字典类型定义
参照数据库表字段定义
参照数据元素定义
参照数据字典结构中组件定义
参照类/接口定义
参照用户已定义数据类型再定义
定义结构体类型
参照预定义数据类型定义
参照全局数据字典类型定义
参照数据库表字段定义
参照数据元素定义
参照数据字典结构中组件定义
参照数据字典结构定义
参照类/接口定义
参照用户已定义数据类型再定义
定义内部表类型(标准表,排序表,哈希表)
参照全局数据字典类型定义
参照数据库表定义
参照数据字典表类型定义
参照数据字典结构定义内部表类型
参照用户已定义数据类型再定义
参照自定义结构类型再定义
参照自定义内部表类型再定义
定义RANGE表类型
案例代码演示
效果演示
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如下:
数据库表sflight
TYPES:ZCARRID TYPE S_CARR_ID,
ZCONNID TYPE S_CONN_ID,
ZFLDATE TYPE S_DATE,
ZPRICE TYPE S_PRICE.
使用的数据元素为上述数据库表sflight中所定义好的:
数据库表sflight
TYPES: ZFIELDNAME TYPE /EACA/O_CHAR_T-FIELDNAME.
数据字典结构/EACA/O_CHAR_T如下:
数据字典结构/EACA/O_CHAR_T
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如下:
数据库表sflight
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如下:
数据字典结构/EACC/YS_WA_JOURNAL
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如下:
数据字典结构/EACC/YS_WA_JOURNAL
下面列举了两种参照自定义数据类型再定义表类型的示例代码:一种方法是参照自定义结构再定义,另一种方法是参照自定义表类型再定义
*定义标准表类型
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再定义
TYPES: TYPE RANGE OF [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表结构如下图所示:
RANGE表类型