Intro to ABAP - Internal Table
- 格式:ppt
- 大小:1.47 MB
- 文档页数:46
课程目标:(1)理解什么是内表(2)内表如何定义( 3)如何定义和使用工作区(4)如何处理内表中的单个记录、记录集一、什么是内表(大家看abap入门.pdf应该有了一定的认识)内表与结构体基本相似,它同样是程序运行中被临时创建的一个存储空间,是一个可以含多条记录的数据表。
内表是一种数据对象,可以在该表中于运行时存储多个相同的结构化数据记录(表变量)。
数据记录的数量仅由特定系统安装的容量所限制。
ABAP运行时系统会动态管理内部表的大小,也就是说,开发人员不必进行任何内存管理操作。
下列几个属性完全描述了一个内表行类型:行类型描述了表行的结构,一般使用一个结构来定义行类型,不过实际上可以用任何类型。
键:内表的键由若干个指定顺序的键字段组成,内表就会根据几个键字段的先后顺序自动排序。
根据访问类型,键可以分为唯一的和不唯一的,唯一的意味着表中的键字段的值组合在内表中只能出现一次。
表类型:有三种不同的表类型,标准表、排序表和哈希表(散列表),根据使用的访问类型,可以使用相应的表定义以获得更好的性能。
内表中的各数据集称为表行或表项。
出于这个原因,行中的各组件称为内表的字段或列。
内部表的行类型可通过任意数据类型进行指定,并可描述表项的行结构。
因此,内部表是一种以结构化方式处理大型数据集的简单方法。
典型用途包括:(1)保留数据数据库表或序列文件的数据进行后续处理(2)进行数据格式化,用以屏幕或打印机输出(如:排序)(3)进行数据格式化,用以使用其它服务(例如:用于方法、函数模块或子例程调用)内表有3中类型:(1)标准表:standard(2)排序表:sorted(3)哈希表(散列表):Hashed根据不同的访问类型,应选用不同的内表类型。
标准表:以内部方式维护行编号(索引),可进行索引访问和关键字访问如果大多使用索引访问内部表则应选择标准表。
排序表:数据记录会自动以关键值升序进行排序,此处同样以内部方式维护索引。
ABAP 内表用法小结ABAP中的内表相当于其他程序设计语言中的二维数组,存储多行结构相同的数据不同于二维数组,内表在创建后,列结构与列数是固定不变的,而行数是动态增长的内表支持循环对每行数据进行操作,也支持整体操作内表是具有行和列的表结构,然而,不同于数据库表,内表仅在程序运行期间在内存中存储数据ABAP中有三种内表类型:标准表,哈希表,排序表–ABAP内表数据类型内表数据对象是实际的内表,可以用数据进行填充内表数据类型是用于定义内表数据对象的抽象数据类型(ADT)可以使用的内表数据类型有:Structure数据库表用户自定义数据类型–ABAP内表声明1>TYPES: BEGIN OF line,field1 TYPE i,field2 TYPE i,END OF line.* 声明一个数据类型DATA: ITAB_WA TYPE(LIKE) line. “声明一个内表工作区DATA: ITAB TYPE(LIKE) line OCCURS 0. “声明一个无工作区的内表DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0. “声明一个有工作区的内表DATA: ITAB TYPE(LIKE) line OCCURS 0 WITH HEADER LINE.DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0 WITH HEADER LINE.2>DATA: BEGIN OF line,field1 TYPE i,field2 TYPE i,END OF line.* 声明一个line对象,该对象可以作为工作区使用* 用DATA定义的line本身也是一个结构类型,也可再声明一个工作区DATA: ITAB_WA TYPE(LIKE) line. “声明一个工作区DATA: ITAB TYPE(LIKE) line OCCURS 0 WITH HEADER LINE. “声明一个带工作区的内表DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0 WITH HEADER LINE . “声明一个带工作区的内表3> 直接定义内表,这个内表是有工作区的DATA: BEGIN OF ITAB OCCURS 0 ,CARR1 LIKE SPFLI-CARRID,CONN1 LIKE SPFLI-CONNID,END OF ITAB.* DATA: ITAB1 TYPE ITAB.(错误的,实践证明,定义出来的什么都不是)。
Introduction to ABAP (Beginning) ∙第一章Overview (Terms: Program, Report, Module Pool, List)1.ABAP/4 简介ABAP 是 SAP 为了开发应用程序而创建并使用的编程语言。
它包括报表,屏幕,界面,数据转换。
ABAP是事件驱动的编程语言。
用户行为和系统事件控制着整个应用程序的执行。
2.概念程序 --- 一系列 ABAP/4 语句的集合。
报表 --- 输出结果为列表(list)的 ABAP/4 程序模块存储 --- 一系列屏幕的集合列表 --- 一个 ABAP 报表程序产生的输出。
∙第二章相关工具1.程序设计环境 --- ABAP/4 Editora.Editor 的基本功能你可以在 ABAP Editor 中创建,维护,和执行 ABAP 程序。
在Tools菜单中选择ABAP Workbench,单击ABAP Editor按钮:注意:用户创建的程序名必须以Y或Z开头。
ABAP程序编辑器提供许多功能,比如:-- 在显示模式和编辑模式之间转换;-- 剪切,复制,粘贴;-- 撤销(Undo);-- 查找和重复查找;-- 语法检查,包括有限的自动校正;-- ABAP 帮助;♦Program 菜单中包括下列功能:----- Other Program 在当前编辑环境中调入另外一个程序。
----- Save as 将当前内容另存为别的文件。
♦在Goto 菜单中,能迅速进入以下功能:----- Attributes 显示程序属性-----Text elements 编辑标题和表头,选择文本和text symbols----- Variants 创建,改变,或显示变量----- Messages 编辑消息类♦在Utilities 菜单中,能完成以下功能:----- Data Browser 显示数据内容----- Help 与工具栏的‟i‟按钮作用相同----- Breakpoints 设置或移去断点----- Edit Locally 允许程序员在未联机时用NotePad 编辑程序♦在Block/buffer菜单中,能完成以下功能:----- 将程序代码拷贝至任意一个剪贴板中(X,Y,Z)----- 将程序代码拷贝至Windows剪贴板,选择”Copy to clipboard”----- 使用”Insert Comment*”和”Delete Comment*”选项可以在程序中插入或删除注释b.打开或创建一个程序--- 在Repository Browser 中创建程序1)显示一个Development class2)选择Create3)在Development objects对话框中选择Program objects ,并按回车4)在 Program objects对话框中,输入程序名并选择Create5)在Create program 对话框中,确定是否为程序创建TOP include,选择Enter6)如果你选择了创建TOP include,会出现对话框提示你输入名称,然后选择Enter7)在下一个对话框中,输入程序属性,选择Save8)选择Source code 进入ABAP 编辑器创建新程序时,标题,类型和应用类型(application)是必须的。
ABAP-内表的创建一.TYPES,DATA,LIKE区别:1.TYPES与DATA区别:TYPES是用来定义某种类(型)的,需(用DATA语句)实例化以后才可以使用,而DATA是用来定义数据对象(实例变量)的,对于用DATA直接定义的结构体对象(不参照其它结构类型),其同时也是一个结构类型.2.TYPE与LIKE区别:TYPE后面跟随的只能是某种类(型),而LIKE后面可以跟随类型或实例对象,参照结构体对象生成内表时只能用LIKE, 不能用TYPE,因为结构体对象不是类型,只是一种实例对象,参照结构类型生成内表时可以用LIKE也可以用TYPE.其中通过LIKE定义的内表直接拥有参照结构类型的元素结构,而通过TYPE定义的内表只能间接拥有被参照结构类型的元素结构,结构类型不能作为内表的工作区,只有结构体对象才可以.二.内表的创建方式一:TYPES: BEGIN OF line,field1 TYPE i,field2 TYPE i,END OF line.现在只定义一个类型接下来你可以定义一个工作区:DATA: ITAB_WA TYPE(LIKE) line.接下来定义一个无工作区的内表:DATA: ITAB TYPE(LIKE) line OCCURS 0.DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0.定义一个有工作区的内表:DATA: ITAB TYPE(LIKE) line OCCURS 0 WITH HEADER LINE.DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0 WIT H HEADER LINE.方式二:你可以直接用DATA来定义,例如:DATA: BEGIN OF line,field1 TYPE i,field2 TYPE i,END OF line.这时候line本身就是一个对象,它当然可以当作工作区来使用,这时你就不用再定义一个工作区了(当然你如果愿意也可以自定义一个工作区)。
ABAP 内表用法小结ABAP中的内表相当于其他程序设计语言中的二维数组,存储多行结构相同的数据不同于二维数组,内表在创建后,列结构与列数是固定不变的,而行数是动态增长的内表支持循环对每行数据进行操作,也支持整体操作内表是具有行和列的表结构,然而,不同于数据库表,内表仅在程序运行期间在内存中存储数据ABAP中有三种内表类型:标准表,哈希表,排序表–ABAP内表数据类型内表数据对象是实际的内表,可以用数据进行填充内表数据类型是用于定义内表数据对象的抽象数据类型(ADT)可以使用的内表数据类型有:Structure数据库表用户自定义数据类型–ABAP内表声明1>TYPES: BEGIN OF line,field1 TYPE i,field2 TYPE i,END OF line.* 声明一个数据类型DATA: ITAB_WA TYPE(LIKE) line. “声明一个内表工作区DATA: ITAB TYPE(LIKE) line OCCURS 0. “声明一个无工作区的内表DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0. “声明一个有工作区的内表DATA: ITAB TYPE(LIKE) line OCCURS 0 WITH HEADER LINE.DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0 WITH HEADER LINE.2>DATA: BEGIN OF line,field1 TYPE i,field2 TYPE i,END OF line.* 声明一个line对象,该对象可以作为工作区使用* 用DATA定义的line本身也是一个结构类型,也可再声明一个工作区DATA: ITAB_WA TYPE(LIKE) line. “声明一个工作区DATA: ITAB TYPE(LIKE) line OCCURS 0 WITH HEADER LINE. “声明一个带工作区的内表DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0 WITH HEADER LINE . “声明一个带工作区的内表3> 直接定义内表,这个内表是有工作区的DATA: BEGIN OF ITAB OCCURS 0 ,CARR1 LIKE SPFLI-CARRID,CONN1 LIKE SPFLI-CONNID,END OF ITAB.* DATA: ITAB1 TYPE ITAB.(错误的,实践证明,定义出来的什么都不是)。
Internal Table内表王钊/HyWise2008.11.18变更记录初次发布1.02008-11-18王钊Detail contentsVersion Date Producer什么是内表•ABAP中的内表相当于其他程序设计语言中的二维数组,存储多行结构相同的数据•不同于二维数组,内表在创建后,列结构与列数是固定不变的,而行数是动态增长的•内表支持循环对每行数据进行操作,也支持整体操作•内表是具有行和列的表结构,然而,不同于数据库表,内表仅在程序运行期间在内存中存储数据•ABAP中有三种内表类型:标准表,哈希表,排序表(本手册只介绍常用的内表类型—标准表)内表数据类型•内表数据对象是实际的内表,可以用数据进行填充•内表数据类型是用于定义内表数据对象的抽象数据类型(ADT)•可以使用的内表数据类型有:•Structure•数据库表•用户自定义数据类型•使用Structure类型•DATA <itab> TYPE (STANDARD)TABLE OF <structure>.•如:•使用数据库表•DATA <itab> TYPE (STANDARD)TABLE OF <DB Table>.•如:•使用用户自定义数据类型•首先定义数据类型•TYPES:BEGIN OF <type>,•<field1>,•<field2>,•……•END OF <type>.•然后定义内表•DATA <itab> TYPE (STANDARD)TABLE OF <type>.•如:•内表是按行进行访问的,然而,程序对内表的行操作不能直接进行,必须使用一种接口来传输,这个接口就是工作区(Work Area)•工作区对内表的行必须是可转换的,出于安全性考虑,为了保持数据一致性,建议工作区与内表行具有相同的结构•语法:•DATA <wa> LIKE LINE OF <itab>.•如:•ABAP还提供了一种简单的工作区定义方式,即在创建内表对象的同时隐式地定义一个同名工作区,这个同名工作区就叫做表头行•语法:•在内表定义语句后追加关键字WITH HEADER LINE.•如:•使用带表头行的内表会给内表操作带来方便,但是会增加混淆,降低代码可读性•不带表头行的内表•APPEND <wa> TO <itab>.•如:•带表头行的内表•APPEND <itab>.•如:•不带表头行的内表•INSERT <wa> INTO [TABLE] <itab> [INDEX <idx>].•如:•带表头行的内表•INSERT [TABLE] <itab> [INDEX <idx>].•如:•不带表头行的内表•READ TABLE <itab> INTO <wa> INDEX <idx>.•如:•带表头行的内表•READ TABLE <itab> INDEX <idx>.•如:•不带表头行的内表•MODIFY <itab> FROM <wa> INDEX <idx>.•如:•带表头行的内表•MODIFY <itab> INDEX <idx>.•如:•带表头行与不带表头行语法一致•DELETE <itab> INDEX <idx>.•如:循环处理•LOOP语句可以顺序地逐行读取内表数据•在循环体中可以对工作区中的数据进行各种处理,如输出,运算等,也可以对内表行进行新增,修改,删除等操作•循环体中的MODIFY,DELETE等语句不必指定INDEX项,系统默认处理当前行•如果不需要读取所有的内表行,可以使用WHERE选项进行限制•不带表头行的内表•LOOP AT <itab> INTO <wa> [WHERE <conditions>].•……•<statement block>•……•ENDLOOP.•如:•带表头行的内表•LOOP AT <itab> [WHERE <conditions>].•……•<statement block>•……•ENDLOOP.•如:•注意:•在LOOP循环中,应当尽量避免对当前内表进行插入或填充操作,一旦循环终止条件遗漏,就会出现死循环•程序中出现死循环是ABAP程序开发的大忌,一定要引起重视!•不带表头行的内表•CLEAR <itab>.•带表头行的内表:•清空表头行:CLEAR <itab>.•清空表体:CLEAR <itab>[].•对于带表头行的内表,进行清空时,通常的做法是同时清空表体与表头行,可简写为:•CLEAR:<itab>, <itab>[].•根据默认关键字对内表进行排序•SORT <itab> [ASCENDING | DESCENDING] [AS TEXT].•ASCENDING和DESCENDING指定升序还是降序排列,如果不指定,缺省排序方式是升序•AS TEXT影响字符字段的排序方式,如果不使用该选项,系统将按字符平台相应内部编码进行排序,否则,系统根据当前语言按字母顺序排序字符字段•如:•根据指定字段对内表进行排序•SORT <itab> BY <field 1> [ASCENDING | DESCENDING] [AS TEXT]•……•<field n > [ASCENDING | DESCENDING] [AS TEXT].•如:删除重复行•第一步,对内表排序,使重复行相邻•第二步,删除相邻的重复行•DELETE ADJACENT DUPLICATES FROM <itab> [COMPARING <comp>].•如:•将内表中部分或全部的数据行整体插入另一内表(两个内表必须具有相同的或可转换的行结构)•INSERT LINES OF <itab1> [FROM n1] [TO n2] INTO [TABLE] <itab2> [INDEX <idx>].•如:•将内表中部分或全部的数据行整体填充到另一内表(两个内表必须具有相同的或可转换的行结构)•APPEND LINES OF <itab1> [FROM n1] [TO n2] TO <itab2>.•如:•按照条件或者索引删除一组选定行•DELETE <itab> [FROM n1] [TO n2] [WHERE <condition>].•如:•整体复制内表,目标内表原有内容被覆盖(两个内表必须具有相同的或可转换的行结构)•不带表头行的内表之间进行复制:•MOVE <itab1> TO <itab2>.•带表头行的内表之间进行复制:•MOVE <itab1>[] TO <itab2>[].•不带表头行的内表复制到带表头行的内表:•MOVE <itab1> TO <itab2>[].•带表头行的内表复制到不带表头行的内表:•MOVE <itab1>[] TO <itab2>.•如:•两个内表行结构不一致时,对同名的具有相同的或可转换结构的字段进行复制•在循环中使用MOVE-CORRESPONDING <wa1> TO <wa2>.语句将工作区wa1中的数据复制到wa2的同名字段中,然后进行压表操作•如:判断内表是否为空•第一步,获取内表行数•DESCRIBE TALBE <itab> LINES <count>.•第二步,判断行数<count>是否为0•如:。
Processing Internal TableInternal Table 的宣告ABAP/4的Internal Table 如同其它语言的数组结构, 在操作上可以有复制,删除,新增插入等功能.1.使用TYPE 叙述语法:TYPES <t> <type> OCCURS <n>宣告一个数组<t>, 型态为<type>, 长度为<n>Example:TYPES A TYPE I OCCURS 10.A 是个10个元素的数值Internal TableExample:TYPES:BEGIN OF LINE,COL1 TYPE I,COL3 TYPE I,END OF LINE.TYPES ITAB TYPE LINE OCCURS 0.宣告一个Internal Table ITAB, 总共有10个元素, 其WORK AREA 名称为LINE2.使用DATA 叙述若使用DATA叙述来宣告Internal Table, 可分成要不要有HEADER LINE, HEADER LINE 就是所谓的WORK AREA, 用在数据的存取上.语法:DATA <f> <type> OCCURS <n> [WITH HEADER LINE]Example:DATA VECTOR TYPE I OCCURS 10 WITH HEADER LINE.3.直接宣告, 不使用WORK AREA语法:DATA: BEGIN OF <f> OCCURS <n>,<component 宣告>END OF <f>.Example:DATA:BEGIN OF ITAB OCCURS 10,COL1 TYPE I,COL2 TYPE I,END OF ITAB.如此产生的Internal Table 不会有Work Area, 也就是宣告时不会Reference 其它的Conponent 宣告Append Line语法:APPEND [<wa>] TO [Initial Line To] <itab>[Initial Line To] 为增加一预设初值的元素Example: 使用Work AreaDATA:BEGIN OF LINE,COL1 TYPE I,COL2 TYPE I,END OF LINE.DATA ITAB LIKE LINE OCCURS 10.DO 2 TIMES.LINE-COL1 = SY-INDEX. “SY-INDEX为迥圈的CounterLINE-COL2 = SY-INDEX **2.APPEND LINE INTO ITAB. “新增至Internal Table中ENDDO.LOOP AT ITAB INTO LINE. “ITAB 总共有两个元素WRITE: / LINE-COL1,LINE-COL2.ENDLOOP.执行结果为:1 12 4Example: 不使用Work AreaDATA:BEGIN OF ITAB OCCURS 10,COL1 TYPE I,COL2 TYPE I,END OF ITAB.DO 2 TIMES.ITAB-COL1 = SY-INDEX.ITAB-COL2 = SY-INDEX **2.APPEN D ITAB. “新增至Internal Table中ENDDO .LOOP AT ITAB. “ITAB 总共有两个元素WRITE: / ITAB-COL1,ITAB-COL2.ENDLOOP.执行结果为:1 12 4加入另一Internal Table的元素语法:APPEND LINES OF <itab1> [FROM <n1>] [TO <n2>] TO <itab2> 将<itab1>的元素加入至<itab2>中, 可选取自<n1>至<n2>的范围Example:APPEND LINES OF ITAB TO JTAB.将ITAB所有元素加入JTAB中Collect Line在加入新元素时将有相同standard key(非数值字段)的数值字段汇总语法:COLLECT [<wa> INTO] <itab>Example:DATA:BEGIN OF ITAB OCCURS 3,COL1(3) TYPE C,COL2 TYPE I,END OF ITAB.ITAB-COL1 = ‘ABC’.ITAB –COL2 = 10.COLLECT ITAB.ITAB-COL1 = ‘XYZ’.ITAB-COL2 = 20.COLLECT ITAB.ITAB-COL1 = ‘ABC’.ITAB-COL2 = 30.COLLECT ITAB. “汇总COL2 至COL1=ABC 的元素上LOOP AT ITAB.WRITE: / ITAB-COL1,ITAB-COL2.ENDLOOP.执行结果:ABC 40XYZ 20Insert Line插入元素在指定的Internal Table位置之前语法:INSERT [<wa> INTO] [INITIAL LINE INTO] <itab> [INDEX <idx>] Example:DATA:BEGIN OF LINE,COL1 TYPE I,COL2 TYPE I,END OF LINE.DATA ITAB LIKE LINE OCCURS 10.DO 3 TIMES.LINE-COL1 = SY-INDEX *10.LINE-COL2 = SY-INDEX *20.APPEND LINE INTO ITAB.ENDDO.LINE-COL1=100.LINE-COL2=200.INSERT LINE INTO ITAB INDEX 2. “插入在位置2之前LOOP AT ITAB INTO LINE.WRITE: / SY-TABIX,LINE-COL1,LINE-COL2. “SY-TABIX为Table位置ENDLOOP.执行结果:1 10 202 100 200 “插入的元素3 20 404 30 60插入另一Internal Table元素语法:INSERT LINES OF <itab1> [FROM <n1> TO <n2>] TO <itab2> INDEX <idx>将<itab1>的元素插入至<itab2>中, 位置在<idx>之前, 可选取自<n1>至<n2>的范围Example:INSERT LINES OF ITAB TO JTAB INDEX 3.将ITAB所有元素插入JTAB中, 位置在第三个元素之前Internal Table元素数据的读取语法:LOOP AT <itab> [INTO <wa>] [FROM <n1> TO <n2>] [WHERE <condition>] <loop expression>ENDLOOP .根据设定的范围选取原素资料, 读完后自动移往下一笔Example:LOOP AT ITAB INTO LINE WHERE COL1 >100.WRITE: / SY-TABIX,LINE-COL1.ENDLOOP.仅读取COL1 > 100 的元素读取Internal Table指定位置的元素语法:READ TABLE <itab> [INTO <wa>] INDEX <idx>自指定位置<idx> 读取元素数据Example:READ TABLE ITAB INTO LINE INDEX 5读取ITAB的第5个元素数据, 放入LINE的字段中根据字段内容寻找语法:READ TABLE <itab> INTO <wa>Example:ITAB-COL1 = ‘ABC’.READ TABLE ITAB INTO LINE.找出ITAB 中COL1 字段内容是ABC 的元素, 找到的值放入LINE 中若找到SY-SUBRC传回0, 找不到则传回4, <itab>必须宣告有work area异动元素内容语法:MODIFY<itab> [FROM <wa>] [INDEX <idx>] [TRANSPORTING <f1>…<f2>] [WHERE <condition>]TRANSPORTING <f1> ..<f2> : 指定异动的字段名称Example:LINE-COL1 = 4.LINE-COL2 = 100.MODIFY ITAB FROM LINE.将目前位置元素以LINE的内容异动Example:LINE-COL1 = 10.MODIFY ITAB FROM LINE INDEX 3 TRANSPORTING COL1.将第三个元素的COL1字段异动为10Delete Lines删除Internal Table 的元素语法:DELETE <itab> INDEX <idx>Example:DELETE ITAB INDEX 4删除第四个元素加上删除条件:DELETE <itab> [FROM <n1> TO <n2>] [WHERE <condition>Example:DELETE ITAB FROM 3 TO 10.删除第3至第10个元素LINE-COL1 = 4.LINE-COL2 = 100.DELETE ITAB FROM LINE.Internal Table Sorting语法:SORT <itab> [<ord er>] [BY <f1>] ….[<order>] : 可分成递减(DESCENDING)和递增(ASCENDING), 空白表ASCENDING <f1>:为指定的字段Example:SORT ITAB DESCENDING BY COL2.将ITAB 根据COL2字段递减排序计算数值字段总和语法:SUM计算得总和存在work area 中, 但只能存在LOOP 叙述中Example:LOOP AT ITAB INTO LINE.SUM.ENDLOOP.WRITE: / LINE-COL1,LINE-COL2.LINE-COL1 和LINE-COL2 存数值总和Initial Table1.REFRESH <itab>使用在没有HEADER LINE 的Internal Table中, 清除所有元素Example:REFRESH ITAB.2. CLEAR <itab>[ ]使用在有HEADER LINE 的Internal Table中, 清除所有元素Example:CLEAR ITAB[ ].3.FREE <itab>释放(Release) Internal Table所占的内存空间, 用在REFRESH和CLEAR指令之后Example:FREE ITAB.。
目录1. 报表知识 (6)1.1基础知识 (6)1.1.1报表事件,有哪些? (6)1.1.2报表选择画面 (7)1.2ALV报表 (8)1.2.1ALV报表实现的流程 (8)1.2.2显示ALV常用的两个FM (8)1.2.3如何设置ALV中的热键 (8)1.2.4ALV显示中的小计 (8)1.2.5FM ALV 和 OO ALV的比较 (8)1.3WRITE LIST (8)2. 数据库知识 (9)2.1基础知识 (9)2.1.1 ABAP数据字典有哪些对象或元素? (9)2.1.2 据库提交确认和数据库回滚取消语句 (9)2.1.3 什么是LUW (9)2.1.4简述modify 、insert、update对数据库表做操作时的影响 (9)2.1.5 要描述域、数据元素、表字段之间的关系 (9)2.1.6数据字典有几种缓冲方式,适用范围? (9)2.2ABAP和数据库 (10)2.2.1 ABAP 数据表的主索引是什么?索引的好处与坏处?与建索引的注意事项! (10)2.2.2 ABAP透明表有哪几种数据类(data class)?对数据的存储有什么影响? (10)2.2.3 SAP中有几种表,他们的区别是什么? (10)2.2.4什么是簇表(cluster table)?举出知道的簇表。
(10)2.2.5找数据库表,有哪些常用的方法。
(10)2.2.6如何建立数据库锁对象,激活锁对象产生的Function Module的名字为什么,在何处查看锁表的情况? (10)2.2.7更新 FM 分为 V1 和 V2,那么首先会执行哪一种更新类型呢?每种类型又是以哪种模式(异步、同步或本地)执行的呢? (11)2.2.7使用OPEN SQL注意原则 (11)2.3与表相关 (11)2.3.1 MM模块有哪些常用表格 (11)2.3.2 HR模块知识:HR里面存储HR主数据主要用到了哪些表? (11)2.3.3 HR模块知识:HR程序在开发中常用的两个逻辑数据库是什么?分别对其进行描述 12 2.3.4 HR模块知识:HR模块里面,如何修改HR的信息类型,具体如何实现 (12)2.3.5财务模块:财务模块开发中常用的表有哪些,简单举例说明: (12)2.3.6PM 常用的TABLE (12)2.3.6inner join 与 left-outer join的区别? (13)3. 权限相关 (14)3.1什么是权限对象(Authorization Objects)?在 ABAP 程序中使用哪条语句进行授权检查? (14)3.2与权限对象有关的事务代码有哪些? (14)4. DIALOG (15)4.1DIALOG 中的几个事件 (15)4.2何在TABLE CONTROL中实现选中一行或多行的效果 (15)4.3DIALOG 开发的常用几个控件是什么? (15)5. BDC (16)5.1BDC录屏的事务代码 (16)5.2BDC与BAPI之间的区别 (16)5.3BDC录屏的注意事项 (16)5.4谈谈BDC的运行模式和更新模式 (16)6. 增强 (17)6.1什么叫增强?有哪些方式进行增强? (17)6.1.1 User EXIT (17)6.1.2 Customer exit (17)6.1.3 BADI (17)6.1.4 Enhancement Spot (17)6.2如何建立增强? (17)6.3与增强相关的事务代码有哪些 (18)6.4如何进行数据库表字段的增强?Append和Include的方式有何区别? (18)7. SMARTFORMS (19)7.1谈谈SmartForm中,Template和Table表格的区别 (19)7.2SMART FORM如何实现公司LOG打印,其步骤是什么? (19)7.3smartform 中如何控制段落、单个字符输出格式? (19)8. RFC和BAPI (20)8.1 RFC (20)8.1.1什么是RFC,有哪些通信模式? (20)8.1.2 RFC中涉及到常用的事务代码有哪些? (20)8.1.3根据调用方式的不同,RFC接口提供了什么样的服务? (20)8.1.4RFC接口的具体功能包括哪些? (20)8.1.5在通过CALL FUNCTION语句进行远程功能调用的基本模式有哪些 (20)8.1.6怎么创建一个支持远程调用的RFC (21)8.1.7怎么调用一个SAP标准RFC (21)8.1.8怎样建立RFC程序?RFC程序传递的参数都是传递值还是引用?如何建立函数组? 21 8.1.9怎么来维护这个DESTINATION(远程目标) (21)8.2 BAPI (21)8.2.1什么是BAPI?你使用过哪些BAPI实现什么功能? (21)8.2.2什么是业务对象类型?它包含哪些主件? (21)8.2.3如何创建一个BAPI? (22)8.2.4编写BAPI的注意事项有哪些? (22)8.2.5谈谈与BAPI相关的事务代码。
说明:几种内表的定义方法。
REPORT ZTESTLP_1206.DATA: BEGIN OF itab_test OCCURS 0, " 定义了一个有表头的内表matnr(04) TYPE C,ebeln TYPE I,END OF itab_test.TYPES: BEGIN OF itab_c,aaa TYPE I,bbb(20) TYPE C,END OF itab_c.DATA: ITAB1 LIKE RANGE OF MARA-MATNR. " 定义一个表,结构为ranges ,有上下限RANGES: s_bwart FOR mseg-bwart." data likeDATA tlike LIKE itab_test. " 定义一个结构DATA tlike_occurs0 LIKE itab_test OCCURS 0. " 定义一个无表头的内表DATA tlike_occurs0_withhead LIKE itab_test OCCURS 0 WITH HEADER LINE. " 定义一个有表头的内表" data like line ofDATA: like_line_of LIKE LINE OF itab_test, " 定义一个结构like_line_of_occurs0 LIKE line of itab_test OCCURS 0, " 定义一个无表头的内表like_line_of_occurs0_nohead LIKE LINE OF itab_test OCCURS 0 WITH HEADER LINE. " 定义一个有表头的内表" data like table of 只能跟内表,不能跟结构、工作区DATA lt LIKE TABLE OF itab_test . " 定义了一个参照有表头内表的内表,但不带工作区*DATA lt_occurs0 LIKE TABLE OF itab_test OCCURS 0. 错误定义,不可带OCCURS 0。
[ABAP-内表操作] 2012年02月15日目录1引言 (3)1.1目的及范围 (3)1.2参考资料 (3)1.3定义 (3)1.4文档结构 (3)2内表介绍 (3)2.1内表种类 (3)2.2内表属性 (4)2.3内表定义 (4)2.3.1参照数据类型定义内表 (4)2.3.2参照数据对象定义内表 (5)2.3.3其他定义形式 (5)3内表操作 (6)3.1操作内表行 (6)3.1.1工作区 (6)3.1.2INSERT语句 (6)3.1.3APPEND语句 (15)3.1.4COLLECT语句 (17)3.1.5READ语句 (18)3.1.6MODIFY语句 (21)3.1.7DELETE语句 (24)3.1.8LOOP语句 (28)3.2整个内表操作 (29)3.2.1数据行排序 (29)3.2.2初始化内表 (33)3.2.3整体复制内表 (36)3.2.4比较内表大小 (37)3.2.5控制级操作 (38)1 引言内表是一种十分灵活的大批量数据管理形式,用于在程序运行期间存储多行结构相同的数据。
内表的行结构可以是一个简单类型数据,也可以是复杂的结构体或内表。
而内表的行数是动态的,添加数据后可以循环读取每行数据或者整体操作。
1.1 目的及范围内表的使用在SAP程序中相当重要,因而ABAP中提供许多内表处理语句,可以说没有一个实际应用程序中不需要使用到内表,本文档主要介绍如何使用内表,可适用于ABAP开发人员,分析人员使用1.2 参考资料•《SAP程序设计黄佳》•1.3 定义•…1.4 文档结构文档的各章节介绍的内容如下:•第2节主要介绍内表定义•第3节介绍如何操作内表2 内表介绍以下将讲解在SAP中关于内表的相关概念:2.1内表种类内表种类决定了系统内部对内表的处理以及ABAP对内表行的访问方式。
在程序中对内表种类的选择应取决于程序对内表的操作方式、内表大小以及访问该内表的频率,因为在寻址不同类型内表行的过程中,内表种类的不同会带来效率的差异。
ABAP内表详解内表⽼式的内表类型定义⽼式内表只有标准内表⼀种,使⽤OCCURS选项来定义了标准内表,这是ABAP3.0之前的定义内表的做法了,在新版的ABAP不建议使⽤,因为在新的版本中有三种内表类型(标准、排序、哈希)。
TYPES <t><type> OCCURS <n>.内表中⾏的数据类型在<type>中指定。
要指定⾏的数据类型,可以使⽤ TYPE 或 LIKE 参数。
基于基本类型内表类型"如果去掉了 OCCURS 则表⽰是普通类型⽽不是内表类型了vector TYPE i OCCURS 10."如果要带隐藏表头则⼀定要加上WITH HEADER LINE,否则默认没有,⽽且只能在声明内表变量时加,⽽不能在上⾯定义内表类型时加DATA vector TYPE vector WITH HEADER LINE.vector = 1.APPEND vector.上⾯的TYPES与下⾯语句等效:TYPES vector TYPE STANDARD TABLE OF iWITH NON-UNIQUE DEFAULT KEYINITIAL SIZE 10.本⽰例创建内表数据类型 vector,其⾏包含基本类型 I 字段。
注:WITH HEADER LINE只能与DATA关键字⼀起使⽤,⽽不能与TYPES⼀起使⽤,这也就是说,只有在分配了存储空间时才有隐藏⼯作区这⼀说,在定义内表类型时是没有的。
下⾯这样也可以:vector TYPE i.DATA vector TYPE vector OCCURS 0 WITH HEADER LINE.vector = 1.APPEND vector.基于结构体类型内表类型"由于没有加 occurs 选项,所以定义的是⼀结构类型TYPES: BEGIN OF line,column1 TYPE i,column2 TYPE i,column3 TYPE i,END OF line."定义⼀内表类型⽽不是普通类型TYPES itab TYPE line OCCURS 10.本⽰例创建内表数据类型itab,其⾏与字段串line结构相同。
sap abap programming---关于ABAP内表(about abap internal table)1. 内表的类型及定义:(1).ANY TABLE:即任意表类型,此种定义方式只能在传递参数的时候定义。
例如:FORM XXX USING/CHANGING TYPE ANY TABLE .(2).ANY TABLE包括了两种类型:INDEX TABLE和HASHED TABLE 。
《1》.INDEX TABLE:包括了STANDARD TABLE和SORTED TABLEA. STANDARD TABLE:其实就是一个线性表,通过key访问内表是线性查找的,也就是说,随着表中记录的增加,对表的操作的时间开销也相应的增加。
定义方法:TYPES/DA TA:LIKE/TYPE STANDARD TABLE OF .B. SORTED TABLE:顾名思义,表中的记录是按照一定的顺序排列的。
访问表的主要方式是表中定义的key,如果key不唯一,则选择index最小的那个。
也可以通过index来访问排序表,如果你想通过index插入一条记录,系统会自动检查你插入的位置是否正确。
所以,如果插入的时间比插入到标准表的时间会长。
因此,尽量选择key 来对排序表进行操作。
定义方法:TYPES/DA TA:LIKE/TYPE SORTED TABLE OF .《2》.HASHED TABLE:对哈希表只能用你定义的key进行操作,而不能使用index进行操作。
因此,定义哈希表必须定义uniquekey 。
注意:所有关于使用index操作表的语句都不能用于操作哈希表。
例如:sort,loop 等。
定义方法:TYPES/DA TA:LIKE/TYPE HASHED TABLE OF .2. 内表的操作:(1).创建:A. 定义一个结构,然后type/like这个结构例如:TYPES: BEGIN OF ,...i> ...,...END OF .DA TA TYPE STANDARD TABLE OFWITH NON-UNIQUE DEFAULT KEYINITIAL SIZEWITH HEADER LINE.B. type/like系统表或者数据库表或者结构DA TA TYPE STANDARD TABLE OF <系统表名>INITIAL SIZEWITH HEADER LINE.(2).添加数据:A.APPEND:直接向表中添加数据1. APPEND [wa TO|INITIAL LINE TO] itab[ASSIGNING |REFERENCE INTO dref].2. APPEND LINES OF itab1 [FROM idx1] [TO idx2] TO itab2.3. APPEND [wa TO] itab SORTED BY f [ASSIGNINGB.向表中插入数据:1. INSERT [wa INTO|INITIAL LINE INTO] itab [INDEX idx] [ASSIGNING |REFERENCE INTO dref].2. INSERT [wa INTO|INITIAL LINE INTO] TABLE itab [ASSIGNING |REFERENCE INTO dref].3. INSERT LINES OF itab1 [FROM idx1] [TO idx2] INTO itab2 [INDEX idx3].4. INSERT LINES OF itab1 [FROM idx1] [TO idx2] INTO TABLE itab2.C.相同字段求和向表里添加:Basic formCOLLECT [wa INTO] itab.Extras:1. ... ASSIGNING2. ... REFERENCE INTO dref3. ... SORTED BY f(3).删除数据:1. DELETE itab.2. DELETE TABLE itab WITH TABLE KEY k1 = v1 ... kn = vn.3. DELETE TABLE itab [FROM wa].4. DELETE itab INDEX idx.5. DELETE itab FROM idx1 TO idx2.6. DELETE itab WHERE logexp.7. DELETE ADJACENT DUPLICATES FROM itab.(4).修改数据:1. MODIFY itab [FROM wa] [INDEX idx] [ASSIGNING |REFERENCE INTO dref] [TRANSPORTING f1 ... fn].2. MODIFY TABLE itab [FROM wa] [ASSIGNING |REFERENCE INTO dref] [TRANSPORTING f1 ... fn].3. MODIFY itab [FROM wa] TRANSPORTING f1 ... fn WHERE cond.sap --- ABAP 内表(internal table) 标题行(header line) 工作区(work area) 简介OCCURS 0刚开始学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:DA TA wa TYPE line.我用C++(还是对cpp最有好感^^)的概念理解就是,line是一个class,而wa是一个object.接着是声明一个每一行的类型是line的internal table:DA TA itab TYPE line OCCURS 0.我在暂时把OCCURS作为了区别工作区和内表的标志.OCCURS应该有更深层次的意义,但我目前只能领悟至此...当我们用以上这个方法来声明一个iternal table时,可以选择是否有无header line.上面这句就是没有header line的.改成如下就有了:DA TA 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的东西,采用一下方式声明一个内表比较好:DA TA itab TYPE STANDARD TABLE OF line.还有一种声明内表的方法:DA TA: 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,比如这样:DA TA: BEGIN OF itab,field1 TYPE i,field2 TYPE i,END OF itab.那么这个itab就不是内表咯,只是一个structure,可以作为itab的work area.写到这里发现,归根到底就是TYPES和DA TA这两个关键字的区别嘛.还有有无OCCURS的区别.这样一想,简单明了~~OCCURS 是在3.0以前申明内表的关键字。
ABAP 内表(internal table) 标题行(header line) 工作区(work area) 简介- [SAP]先是用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.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,那么这个itab就不是内表咯,只是一个structure,可以作为itab的work area.写到这里发现,归根到底就是TYPES和DATA这两个关键字的区别嘛.还有有无OCCURS的区别.1、首先,我们应该先了解下:内表(internal table) 标题行(header line) 工作区(work area) 这三个不同概念(具体定义请自行查找,这里只讲思路)。
abap import from internal table 用法1. 引言1.1 概述ABAP是一种常用的编程语言,主要用于SAP系统中的开发工作。
在ABAP中,内部表是一种重要的数据结构,用于存储和处理大量数据。
通过对内部表进行导入操作,我们可以将数据从一个内部表传输到另一个内部表,从而实现数据的复制、转移和共享。
本篇文章将着重介绍ABAP中的Import from Internal Table功能以及其用法。
我们将详细讨论该功能的概述、示例代码和优势,并提供使用该功能时需要注意的事项。
1.2 文章结构本文分为以下几个部分:- 引言:对文章主题进行概述,并介绍文章结构。
- ABAP Import from Internal Table 用法:对Import from Internal Table功能进行详细介绍,包括内部表简介、Import语句概述以及示例代码。
- 使用ABAP Import from Internal Table的优势:讨论使用该功能的好处,包括减少数据库交互次数、提高性能和效率以及简化代码编写过程。
- 使用ABAP Import from Internal Table的注意事项:列举使用该功能时需要注意的问题,如数据类型匹配问题、处理空内部表数据等。
- 结论:总结全文内容,并给出相关建议和展望。
1.3 目的本文的目的是帮助读者深入了解ABAP中Import from Internal T able功能的使用方法和优势,为读者在实际开发中运用此功能提供指导和建议。
通过阅读本文,读者将能够更加清晰地了解该功能的具体用法,掌握使用该功能时需要注意的事项,并充分利用这一功能来简化代码编写过程、提高性能和效率。
2. ABAP Import from Internal Table 用法2.1 内部表简介:在ABAP编程中,内部表(Internal Table)是一种用于存储数据的数据结构。
内表和工作区主要内容: 表结构工作区表操作表的排序,循环等内表是ABAP中最重要的部分,通过本次的学习,能够撑握内表定义的方法,内表和工作区的关系,内表的各种操作方法。
内表的目的在ABAP/4 中,主要使用表格。
表格是R/3 系统中的关键数据结构。
长期使用的数据存储在关系数据库表格中。
除了数据库表格,还可以创建仅在程序运行时间内存在的内表。
内表是ABAP/4 中用于在程序中实现许多复杂数据结构的重要特征项.内表的结构在ABAP/4 中,可以区别内表数据类型(定义内表的结构)和内表数据对象(实际的内表而且可以用数据进行填充)。
内表数据类型是数据结构(可用于将数据对象说明为内表)的抽象定义。
关于数据类型和数据对象之间区别的详细信息,参见声明数据。
数据类型内表是ABAP/4 中两种结构化数据类型中的一种。
其它结构化数据类型是字段串。
内表包括任意数据类型相同的行。
行的数据类型可以是基本的或结构化的。
该定义打开了多种内表结构,范围从包含一个字段的行到包含字段串将内表作为组件的行。
可以用带OCCURS 参数的TYPES 语句将数据类型定义为内表。
定义数据类型时不占用内存。
数据对象数据对象包含定义为内表的数据类型,是实际使用的内表。
数据对象占用内存,可以对其行进行填充或读取。
可以使用带OCCURS 参数的DATA 语句,或使用TYPE 或LIKE 参数引用另一个内表将数据对象创建为内表。
内表索引索引是表格行的序列号,不是表格字段,但由系统自动创建和管理。
可以用DELETE、INSERT、MODIFY、LOOP 和READ 语句来使用索引。
在这些语句中,可以将索引指定为文字或变量。
处理完内表的特定行后,系统字段SY-TABIX 一般包含该行的索引。
访问内表内表是按行进行访问的。
必须使用某个工作区域作为与表格互相传输数据的接口。
从内表中读取数据时,已定址的表格行内容覆盖工作区域的内容。
然后可以在程序中引用工作区域的内容。
ABAP内表(internalt...【转】ABAP 内表(internal table) 标题行(header line) 工作区(work area) 简介文章转自:刚开始学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 Work Area & Header Line -1. Difference between Work Area and Header Line工作区与标题行的不同之处原文地址:我翻译下,嘿嘿在对内表进行一些操作的时候,比如增加或者取回一条记录.我们必须暂时保存这条记录.这条记录就保存在内表的工作区里(work area).内表的工作区必须和内表有相同的结构.内表由主体(body)和一个可选的标题行(head line)组成.标题行是一个隐式的(implicit)工作区.在内表声明的时候,可以选择有无标题行.e.g.data: begin of itab occurs 10,ab type c,cd type i,end of itab.这样的内表itab,是有标题行的.data: wa_itab like itab.这样的wa_itab是显式(explicit)声明的一个itab的工作区.data: itab1 like itab occurs 10.这样的内表itab1,是没有标题行的.标题行是一个和内表主体有着一样结构的字段的串,标题行只有一行.所以,标题行相当于一个缓冲区(buffer),用于存放被操作的纪录,是内表的缺省的工作区.2. Using Header Lines as Work Areas把标题行当工作区来使用原文地址:我再翻译下...当你在创建一个内表的时候,你同时也声明了一个具有相同名称的标题行(这个好像很奇特的样子么...).可以把这个标题行当作工作区来对内表进行操作.如果一个内表有标题行,则对其进行操作的ABAP语句会简短一些,因为这些语句会自动认为标题行是一个隐式的工作区.语句的不同如下表:Operations without header lineOperations with header lineOperations for all Table Types INSERT INTO TABLE .INSERT TABLE ITAB.COLLECT INTO .COLLECT .READ TABLE ... INTO .READ TABLE ...MODIFY TABLE FROM ...MODIFY TABLE ...MODIFY FROM ...WHERE ...MODIFY ... WHERE ... DELETE TABLE FROM . DELETE TABLE .LOOP AT ITAB INTO ... LOOP AT ITAB ...Operations for Index Tables APPEND TO .APPEND .INSERT INTO ...INSERT ...MODIFY FROM ...MODIFY ...但是,用隐式的工作区,代码难以被理解,所以还是用一个不同名称的工作区比较好.补充:1. ABAP/4的Internal Table如同其他语言的数组结构,在操作上可以有复制,删除,新增等功能,可以存很多条记录,并且ABAP的这种用法,对行数没什么限制。