TYPES、DATA、TYPE、LIKE、CONSTANTS、STATICS、TABLES

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4292833.html

TYPES、DATA、TYPE、LIKE. 42

创建数据类型与变量... 44

TYPES 语句... 44

DATA 语句... 46

CONSTANTS 语句... 48

STATICS 语句... 48

TABLES 语句

TYPES、DATA、TYPE、LIKE

TYPES语句是定义数据类型,而DATA语句声明变量。

TYPES:定义数据类型

-       数据类型是纯粹的说明。

-       没有与数据类型相关联的内存。

-       数据类型描述数据对象的技术属性。

-       数据类型是数据对象的属性并与数据对象联系紧密。

DATA:声明数据对象(变量、常量)

-       数据对象是程序在运行时使用的物理单元。

-       每个数据对象都有分配给它的特定数据类型。

-       每个数据对象占据一些内存空间。

-       ABAP/4 根据数据对象的数据类型处理数据对象。

TYPES定义的类型需要用来声明一个变量(DATA)来使用,即TYPES定义的类型是供DATA语句来声明一个变量来使用的。

使用自定义的类型使用TYPE,引用其他变量所属类型要使用LIKE

TYPES znumtype TYPE i.
TYPES num1 TYPE znumtype."只能使用TYPE关键字来使用自定义类型znumtype
DATA num2 TYPE znumtype.

DATA znumobj TYPE i.
TYPES num5 LIKE znumobj."只能使用LIKE关键字来使用自定义变量znumobj
DATA num6 LIKE znumobj.

TYPES : BEGIN OF address1,
  street(20) TYPE c,
  city(20) TYPE c,
  END OF address1.
TYPES type1 TYPE address1-city."只能使用TYPE关键字来使用自定义结构体类型或其中的组件类型
DATA obj1 TYPE address1-city.
TYPES type2 TYPE address1.
DATA obj2 TYPE address1.

DATA : BEGIN OF zaddress2,
  street(20) TYPE c,
  city(20) TYPE c,
  END OF zaddress2.
TYPES type3 LIKE zaddress2-city."只能使用LIKE关键字来使用自定义结构体变量或其中的组件变量
DATA obj3 LIKE zaddress2-city.
TYPES type4 LIKE zaddress2.
DATA obj5 LIKE zaddress2.

透明表即可看作是一种类型,也可看作是对象,所以即可使用TYPE,也可以使用LIKE:

TYPES type6 TYPE mara-matnr.
TYPES type7 LIKE mara-matnr.
DATA obj6 TYPE mara-matnr.
DATA obj7 LIKE mara-matnr.

注:定义的变量名千万别与词典中的类型相同,否则表面上即可使用TYPE也可使用LIKE,就会出现这两个关键字(Type、Like)都可用的奇怪现像,下面是定义一个变量时与词典中的结构同名的后果(导致)

DATA : BEGIN OF address2,
  street(20) TYPE c,
  city(20) TYPE c,
  END OF address2.
DATA obj4 TYPE STANDARD TABLE OF address2."这里使用的实质上是词典中的类型address2
DATA obj5 LIKE STANDARD TABLE OF address2."这里使用是的上面定义的变量address2

上面程序编译通过,按理obj4定义是通过不过的(只能使用LIKE来引用另一定义变量的类型,TYPE是不可以的),但由于address2是数字词典中定义的结构类型,所以obj4使用的是数字词典中的结构类型,而obj5使用的是LIKE,所以使用的是address2变量的类型。注:结构(Structure)类型也只能使用TYPE,而不能使用LIKE。

数据类型和数据对象是有不同的命名空间的,即同一程序中可以出现同名的数据类型和对象,但程序中的同名局部数据类型将覆盖数据字典中定义的同名类型。

如果使用的是数据词典中的类型,则即可以使用Like 也可使用 Type:
"SFLIGHT为表类型
DATA plane LIKE sflight-planetype.
DATA plane2 TYPE sflight-planetype.
DATA plane3 LIKE sflight.
DATA plane4 TYPE sflight.
"syst为结构类型
DATA sy1 TYPE syst.
DATA sy2 LIKE syst.
DATA sy3 TYPE syst-index.
DATA sy4 LIKE syst-index.

创建数据类型与变量

数据对象和数据类型有独立的名称空间。这意味着一个名称既可以是数据类型名,同时又可以是数据对象名,如:

DATA c .
TYPES c.

在程序中,可以使用数据声明语句静态地定义数据对象,或者利用操作语句动态地创建数据对象。ABAP/4 包括下列用于静态地创建数据对象和数据类型的关键字:


DATA 语句


用于创建变量


CONSTANTS 语句


用于创建常量


STATICS语句


用于创建变量,这些变量在程序运行期间一直存在,但仅在过程中可见


TABLES语句


用于创建表工作区


TYPES 语句


用于创建用户定义的数据类型

TYPES语句


基本类型

TYPES { {dtype[(len)] TYPE abap_type [DECIMALS dec]}
      | {dtype TYPE abap_type [LENGTH len] [DECIMALS dec]} }.

TYPES: c,
       text10 TYPE c LENGTH 10,
       result TYPE p LENGTH 8 DECIMALS 2.


参照已存在的类型

TYPES dtype { {TYPE [LINE OF] type}
            | {LIKE [LINE OF] dobj}  }.

TYPES itab_typ TYPE TABLE OF string.
DATA itab TYPE itab_typ.
TYPES: wa_itab1 TYPE LINE OF itab_typ,
       wa_itab2 LIKE LINE OF itab.


引用类型:

TYPES dtype { {TYPE REF TO type}
            | {LIKE REF TO dobj} }.

INTERFACE i1.
...
ENDINTERFACE.

CLASS c1 DEFINITION.
  PUBLIC SECTION.
    INTERFACES i1.
ENDCLASS.

TYPES: iref TYPE REF TO i1,
       cref TYPE REF TO c1,
       dref TYPE REF TO iref.


结构类型:

TYPES BEGIN OF struc_type.
  ...
  TYPES comp ...
  TYPES comp TYPE struc_type BOXED.
  INCLUDE { {TYPE struc_type} | {STRUCTURE struc} }
        [AS name [RENAMING WITH SUFFIX suffix]].
  ...
TYPES END OF struc_type.

TYPES: BEGIN OF street_type,
         name TYPE c LENGTH 40,
         no   TYPE c LENGTH 4,
       END OF street_type.
TYPES: BEGIN OF address_type,
         name TYPE c LENGTH 30,
         street TYPE street_type,
         BEGIN OF city,
           zipcode TYPE n LENGTH 5,
           name TYPE c LENGTH 40,
         END OF city,
      END OF address_type.
TYPES zipcode_type TYPE address_type-city-zipcode.


INCLUDE { {TYPE struc_type} | {STRUCTURE struc} }
        [AS name [RENAMING WITH SUFFIX suffix]].

该语句只能用在定义结构的BEGIN OF and END OF之间。作用是将结构类型struc_type与结构变量struc的所有组件字段拷贝到当前结构定义的指定位置,INCLUDE就是将可以重复使用的东西先做好,再包含进来。

AS name:给包含进来的结构类型(或结构变量)取一个别名,这样就可以通过结构组件符(-)来选取这个结构类型(或结构变量)

RENAMING WITH SUFFIX suffix:如果include进来的结构类型(或结构变量)的组件字段与现有的重复,则可以使用此选项重命名include进来的结构类型(或结构变量)的各组件字段名,具体做法只是在原来组件名后加上了指定的后缀suffix

TYPES: BEGIN OF t_day,
         work TYPE c LENGTH 8,
         free TYPE c LENGTH 16,
       END OF t_day.
DATA BEGIN OF week.
        INCLUDE TYPE t_day AS monday    RENAMING WITH SUFFIX _mon.
        INCLUDE TYPE t_day AS tuesday   RENAMING WITH SUFFIX _tue.
        INCLUDE TYPE t_day AS wednesday RENAMING WITH SUFFIX _wed.
...
DATA END OF week.

可以通下面的方式来访问week结构变量:

直接看作是week结构变量组件:week-work_mon, week-free_mon, week-work_tue

由于使用as别名,所以还可以这样访问:week-monday-work, week-monday-free, week-tuesday-work


内表类型


Ranges Table Types 条件内表类型

TYPES dtype {TYPE RANGE OF type}|{LIKE RANGE OF dobj}
            [INITIAL SIZE n].

定义了以下相同行结构的内表:

TYPES: BEGIN OF linetype,
         sign   TYPE c LENGTH 1,
         option TYPE c LENGTH 2,
         low    {TYPE type}|{LIKE dobj},
         high   {TYPE type}|{LIKE dobj},
       END OF linetype.

DATA 语句


预定义类型

DATA { {var[(len)] TYPE abap_type [DECIMALS dec]}
     | {var [TYPE abap_type [LENGTH len] [DECIMALS dec]]} }
     [VALUE  val|{IS INITIAL}]

DATA p LENGTH 2 TYPE p VALUE ‘1.1‘ DECIMALS 1.

DATAp(2)TYPEpVALUE‘1.1‘DECIMALS1.

DATA p(2) TYPE p VALUE IS INITIAL DECIMALS 1.

DATA: text_buffer TYPE string VALUE `Text`,
      count TYPE i VALUE 1,
      price TYPE p LENGTH 8 DECIMALS 2 VALUE ‘1.99‘.


参照已存在类型

DATA var { {TYPE [LINE OF] type}
           | {LIKE [LINE OF] dobj} }
           [VALUE  val|{IS INITIAL}]

DATA: spfli_wa1 TYPE spfli,
      spfli_wa2 LIKE spfli_wa1.
DATA <f> LIKE LINE OF <itab>.

在这种情况下,<itab>必须是某个内表数据对象。

在ABAP中,定义内存变量时,除了可以参照标准的ABAP的数据类型与词典中的表(或表字段)、结构(或表字段)、视图(或视图字段))外,还可以直接参考词典中的Data Element,但不能直接引用Domain。以下是两句等效:

DATA mycarrid2 TYPE spfli-carrid."参照数据库表字段
DATA mycarrid TYPE s_carr_id."直接参照Data Element

如果要定义一个屏幕字段时,最好是参照结构体中的一个字段或透明表中的一个字段,或直接采用一个Data Element,这样屏幕字段会自动带有应Data Element上语文上以及技术上的属性,即该输入域将自动带有F1 Help和F4 Help


引用类型

DATA ref { {TYPE REF TO type}
           | {LIKE REF TO dobj} }
           [VALUE IS INITIAL] .

"因为没有定义方法,所以这里不需要 C1 的Implements类
CLASS c1 DEFINITION.
  PUBLIC SECTION.
    DATA a1 TYPE i VALUE 1.
ENDCLASS.

DATA: oref  TYPE REF TO c1,
      dref1 LIKE REF TO oref,
      dref2 TYPE REF TO i.

CREATE OBJECT oref.
"让 dref1 也指向 oref 所指向的对象
GET REFERENCE OF oref INTO dref1.

CREATE DATA dref2.
"ref->* 的作用就是求地址,与C语言中的 & 符号一样,求地址所对应的对象或变量
dref2->* = dref1->*->a1.

WRITE: dref2->*." 1


结构类型

DATA BEGIN OF struc .
  ...
  DATA comp ...
  INCLUDE { {TYPE struc_type} | {STRUCTURE struc} }
     [AS name [RENAMING WITH SUFFIX suffix]].
  ...
DATA END OF struc.

RENAMING WITH SUFFIX具体用法请参照前面的TYPES语句中的结构定义


内表


条件内表类型:

DATA rtab {TYPE RANGE OF type}|{LIKE RANGE OF dobj}
          [INITIAL SIZE n]
          [VALUE IS INITIAL]

或者:

RANGES: s_ebeln1 FOR ekko-ebeln.

 

DATA: spfli_wa TYPE spfli,
      r_carrid TYPE RANGE OF spfli-carrid,
      r_carrid_line LIKE LINE OF r_carrid.

r_carrid_line-sign   = ‘I‘.
r_carrid_line-option = ‘BT‘.
r_carrid_line-low    = ‘AA‘.
r_carrid_line-high   = ‘LH‘.
APPEND r_carrid_line TO r_carrid.

SELECT *
       FROM spfli
       INTO spfli_wa
       WHERE carrid IN r_carrid.
  ...
ENDSELECT.

CONSTANTS语句

语法

CONSTANTS<c>[<length>] <type>[<decimals>]<value>.

要将结构定义为常量,请写:

CONSTANTS: BEGIN OF <fstring>,
<component declaration>,

..............

END OF <fstring>.

利用<value>参数指定的初始值,在程序的执行期间不能更改。

STATICS语句

如果要在过程的运行时间之外仍保留某变量的数值,可以在该过程中利用 STATICS 语句定义该变量。

语法

STATICS <s>[<length>] <type> [<value>] [<decimals>].

要在过程中将结构定义为静态有效,请写:

STATICS: BEGIN OF <fstring>,
<component declaration>,
..............

END OF <fstring>.

如果在程序中多次调用某过程,对于利用 STATICS 定义的变量,过程总是使用该变量的最新(近)值,但不能从过程外部来访问静态局部变量。

TABLES语句

利用 TABLES 语句,可以创建称为表工作区的内存变量。表工作区是参考 ABAP/4 词典对象的结构。语法如下:

TABLES <structure_type>.

TABLES <transparent table_type>.

TABLES <view>.

 

<dbtab>是 ABAP/4 词典对象的名称,同时也是创建的内存变量名。可以用来参照的的有效 ABAP/4 词典对象是

2 结构

2 视图

2  数据库表(透明表)

表工作区提供一个接口,通过该接口可以将数据从数据库表加载到程序,或利用OPEN SQL 语句修改数据库表的内容。

TABLES: SPFLI.
SELECT * FROM SPFLI.
   WRITE: SPFLI-MANDT, SPFLI-CARRID, SPFLI-CONNID, ......
ENDSELECT.

示例中,TABLES 语句创建表工作区 SPFLI。SPFLI 与 ABAP/4 词典中声明的数据库表 SPFLI 结构相同。在 SELECT 循环中,用属于数据库表 SPFLI 的行填充表工作区 SPFLI,并且不用在查询语句中可以省略into spfli选项

TABLES: spfli.

DATA spfli TYPE spfli.

以上两个语句等价。即在定义内存变量时,可以将透明表当做结构体来使用

另外,在屏幕(对话屏幕、选择屏幕)中,如果需要引入数据中的表字段,需要使用TABLES语句定义一个接口工作区进行屏幕和程序间的数据交换(PARAMERTS可以不需要,但SLECTION-OPTION需要)。

时间: 2024-11-29 07:13:41

TYPES、DATA、TYPE、LIKE、CONSTANTS、STATICS、TABLES的相关文章

ABAP中TYPES与DATA、TYPE与LIKE 区别

1.TYPES与DATA区别: TYPES是用来自定义某种类(型)的,需(用DATA语句)实例化以后才可以使用 DATA 是用来声明基本类型数据对象(实例变量)的,对于用DATA直接定义的结构体对象(不参照其它结构类型) 参照自定义类型生成新数据语法格式如下:TYPES | DATA  ...... TYPE type1 .......        ''type1 代表程序内部类型 参照程序中已经声明的数据对象生成新数据语法格式如下:TYPES | DATA ...... LIKE dobj

Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion

前言 在Spring Framework官方文档中,这三者是放到一起讲的,但没有解释为什么放到一起.大概是默认了读者都是有相关经验的人,但事实并非如此,例如我.好在闷着头看了一遍,又查资料又敲代码,总算明白了. 其实说穿了一文不值,我们用一个例子来解释: 假定,现有一个app,功能是接收你输入的生日,然后显示你的年龄.看起来app只要用当前日期减去你输入的日期就是年龄,应该很简单对吧?可惜事实不是这样的. 这里面有三个问题: 问题一:我们输入的永远是字符串,字符串需要转成日期格式才能被我们的ap

jQuery源代码解析(1)—— jq基础、data缓存系统

闲话 jquery 的源代码已经到了1.12.0版本号.据官网说1版本号和2版本号若无意外将不再更新,3版本号将做一个架构上大的调整.但预计能兼容IE6-8的.或许这已经是最后的样子了. 我学习jq的时间非常短,应该在1月.那时的版本号还是1.11.3,通过看妙味课堂的公开课视频和文档里的全部api的注解学习. 源代码则是近期些日子直接生啃.跳过了sizzle和文档处理的部分(待业狗压力大.工作以后再看).关注data.ready.event.queue.Defferred(jq的promise

SQL 语句代编代写、DATA MANAGEMENT SYSTEMS代写代做

SQL 语句代编代写.DATA MANAGEMENT SYSTEMS代写代做DATA MANAGEMENT SYSTEMS DESIGN PROJECTPurpose of this projectAnalyze, design, implement, and document a database system application. You will use the methodology for database development learned in class. The sys

jquery中attr、prop、data

在高版本的jquery中获取标签的属性,可以使用attr().prop().data(),那么这些方法有什么区别呢? 对于HTML元素本身就带有的固有属性,在处理时,使用prop方法. 对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法. .data()看作是存取data-xxx这样DOM附加信息的方法 上面的描述也许有点模糊,举几个例子就知道了. <a href="http://www.baidu.com" target="_self"

jQuery中attr()、prop()、data()用法及区别

.attr(),此方法从jq1.0开始一直存在,官方文档写的作用是读/写DOM的attribute值,其实1.6之前有时候是attribute,有时候又是property..prop(),此方法jq1.6引入,读/写DOM的property..data(),此方法在jq1.2.3引入,作用是把任意的值读取/存储到DOM元素对应的jq对象上. 从性能上对比,.prop() > .data() > .attr(),不同浏览器不同版本.data()和.attr()的性能关系有差异,不过.prop()

(2)kendo UI使用基础介绍与问题整理——Grid问题/demo、参数、data、filter等

项目中用到最多的组件是Grid,与它相关的问题也是最多的,下面我会成几个文章来说明. 这篇文章会介绍一些相关的常用参数. 一.demo及基本的参数说明 简单代码范例demo: <div id="grid"></div> <script> $(document).ready(function() { var data=[{ id:"1", cause:"包装破损", quantity:"5",

静态分析:IDA逆向代码段说明 text、idata、rdata、data

静态分析:IDA逆向代码段说明 text.idata.rdata.data 通常IDA对一个PE文件逆向出来的代码中, 存在四个最基本的段text.idata.rdata.data, 四个段为PE文件的结构中对应的段. 一.text段: 该段位程序代码段,在该段一开始就可以看到: .text:00401000 ; Segment type: Pure code.text:00401000 ; Segment permissions: Read/Execute 这里的段类型跟权限说明很清楚: 分别

前端基础-jQuery的最常用的的方法each、data、

阅读目录 each inArray get index data 一.jQuery中each方法的应用 jQuery中有个很重要的核心方法each,大部分jQuery方法在内部都会调用each,其主要的原因的就是jQuery的实例是一个元素合集 如下:找到所有的div,并且都设置样式,css只是一个方法,所以内部会调用each处理这个div的合集,给每个div都设置style属性 $('div').css(...) jQuery的大部分方法都是针对元素合集的操作,所以jQuery会提供$(sel