刚开始学ABAP的时候,学到iternal table时,感觉一阵混乱.
搞不清楚什么是work area,什么是header line,以及occurs是干什么用的.
今天终于差不多搞明白了(我还是太弱啊...BS自己一下)
所以还是记录下来..省得自己以后再忘记...

先是用TYPES关键字定义一个行(row)的类型.如下:
TYPES: BEGIN OF line,
  field1 TYPE i,
  field2 TYPE i,
END OF line.
这里的line,就相当于一个自定义的类型,表示一行(row)的字段(field).
这里一行有两个字段field1和field2.

然后是声明一个work area:
DATA wa TYPE line.
我用C++(还是对cpp最有好感^^)的概念理解就是,
line是一个class,而wa是一个object.

接着是声明一个每一行的类型是line的internal table:
DATA itab TYPE line OCCURS 0.
我在暂时把OCCURS作为了区别工作区和内表的标志.
OCCURS应该有更深层次的意义,但我目前只能领悟至此...
当我们用以上这个方法来声明一个iternal table时,可以选择是否有无header line.
上面这句就是没有header line的.改成如下就有了:
DATA itab TYPE line OCCURS 0 WITH HEADER LINE.
有无header line的区别就是,header line可以当作一个work area来使用(参照我之前的一个日志).
有一下两种方式操作itab:
1).
wa-field1 = 1.
wa-field2 = 2.
APPEND wa TO itab.
2).
itab-field1 = 1.
itab-field2 = 2.
APPEND itab.
这里wa就是上面那个已经定义的work area.
有header line的时候,这两种都可以.
无header line的时候,只能用第1种.
第2种里,itab的意义是一个header line,而不是内表.
因为"DATA itab TYPE line OCCURS 0 WITH HEADER LINE."这样的声明,
已经隐式声明了一个与内表同名的header line.
所以OCCURS用来声明内表可能造成二义性(ambiguous).
于是,OCCURS被认为是old的东西,采用一下方式声明一个内表比较好:
DATA itab TYPE STANDARD TABLE OF line.

还有一种声明内表的方法:
DATA: BEGIN OF itab OCCURS 0,
              field1 TYPE i,
              field2 TYPE i,
           END OF itab.
这样的itab就自动有了一个同名的header line.
好像不会有 WITHOUT HEADER LINE 或者 NOT WITH HEADER LINE 这样的用法...
如果没有OCCURS 0,比如这样:
DATA: BEGIN OF itab,
              field1 TYPE i,
              field2 TYPE i,
          END OF itab.
那么这个itab就不是内表咯,只是一个structure,可以作为itab的work area.

写到这里发现,归根到底就是TYPES和DATA这两个关键字的区别嘛.
还有有无OCCURS的区别.

这样一想,简单明了~~

ABAP 内表(internal table) 标题行(header line) 工作区(work area) 简介 - [SAP]的更多相关文章

  1. ABAP内表(internal table)有关的系统变量

    SY-TABIX – 内表当前行的索引号.SY-TABIX 的值可以被以下命令修改,但是只适用于索引表(index table).对于哈希表(Hashed table),这个系统变量的值为空或0. A ...

  2. ABAP开发基础知识:内表(Internal Table)

    http://www.cnblogs.com/foxting/archive/2012/03/19/2406830.html 内表与结构体基本类似,它同样是程序运行中被临时创建的一个存储空间,它是一个 ...

  3. Abap 内表的语法

    ABAP中的内表相当于其他程序设计语言中的二维数组,存储多行结构相同的数据 不同于二维数组,内表在创建后,列结构与列数是固定不变的,而行数是动态增长的  内表支持循环对每行数据进行操作,也支持整体操作 ...

  4. ABAP 内表 详解

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. Abap内表

    什么是内表:内表是内存中建立的一个临时表,你可以在程序运行时对表中的数据进行,插入,修改,删除等操作,程序跑完了,就会被释放. 定义类型:通过types开头定义 TYPES: BEGIN OF lin ...

  6. ABAP内表数据和JSON格式互转

    本程序演示ABAP内表数据如何转为JSON格式,以及JSON数据如何放入内表. 注:json字符串格式如:jsonstr = '[ {flag: "0",message: &quo ...

  7. Table标题行冻结,数据行滚动的一种方式

    这段时间在做Table标题行冻结,数据行滚动,虽然能实现,但也遇到一些问题,记录下来. 首先说说实现,实现其实不难,估计很多人都能想象出来,那就是标题行与内容行分离.我是这么做的,用两个表格,一个只有 ...

  8. ABAP 内表的行列转换-发货通知单-打印到Excel里-NEW-(以运单号为单位显示ALV然后保存输出)

    *********************************************************************** * Title           : ZSDF003  ...

  9. ABAP 内表的行列转换-发货通知单-打印到Excel里-NEW

    *********************************************************************** * Title           : ZSDF002  ...

随机推荐

  1. 什么是AOP?

    AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入封装.继承和 ...

  2. BootstrapTable使用实例

    一.bootstrapTable简单使用: <link rel="stylesheet" href="./static/libs/bootstrap/css/boo ...

  3. 桌面版centos安装vncserver并在windows下使用VNC Viewer远程连接

    首先关闭防火墙 在Centos中安装vncserver yum install tigervnc-server 拷贝一份  /lib/systemd/system/vncserver@.service ...

  4. QT学习之windows下安装配置PyQt5

    windows下安装配置PyQt5 目录 为什么要学习QT 命令行安装PyQt5以及PyQt5-tools 配置QtDesigner.PyUIC及PyRcc 为什么要学习QT python下与界面开发 ...

  5. [ 转载 ]Java:成员变量,局部变量,静态变量的区别

    精简后方便自己理解. 成员变量 我们研究一个事物: 属性:外在特征:如身高,体重 行为:能做什么:如说话,打球. 在Java语言中,最基本的单位是类(class),类就是用来体现事物的. 属性:类中的 ...

  6. SPOJTLE - Time Limit Exceeded(高维前缀和)

    题意 题目链接 题目的意思是给一个数组C,长度为n,每个数字的范围是2^m,然后要求构造一个数组a,满足 1.a[i] % C[i] !=0 ; 2.a[i] < 2^m ; 3.a[i] &a ...

  7. BZOJ.4289.PA2012 Tax(思路 Dijkstra)

    题目链接 \(Description\) 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价.起点的代价是离开起点的边的边权,终点的代价 ...

  8. Java并发程序设计(十三)锁的性能优化

    锁的性能优化 一.优化注意事件 一)减少锁的持有时间 只在必要时进行同步,能明显减少锁的持有时间. 二)锁的细化 缺陷:当系统需要全局锁时,其消耗的资源会比较多. 三)锁的分离 比如读写分离锁 四)锁 ...

  9. stm32与HC-SR04超声波传感器测距

    首先,先来看一下这个模块的基本功能和原理. HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm:模块包括超声波发射器.接收器与控制电路.像智能小车的测距 ...

  10. PCB封装步骤教程

    疑问解答:为什么要封装? 就是元器件往PCB板上焊接时在板上的焊盘尺寸. 这里我以AT89C51单片机为例: 1.首先新建一个PCB元件库. 再找一个路径保存起来命名为DIP40,方便以后寻找 选择菜 ...