ABAP几种内表的 *** 作

ABAP几种内表的 *** 作,第1张

ABAP中有三类内表,标准表,排序表和哈希表。三种内表介绍标准表的每一行对应一个逻辑索引-SY-TABIX,填充内表的时候,可以将数据附加在现有行之后,也可以插入到指定的位置,程序对内表行的寻址 *** 作可通过关键字或索引进行。在对表进行插入删除等 *** 作时,各数据行在内存中的位置不变,系统仅重新排列各数据行的索引值。排序表也有逻辑索引,不同的是排序表总是按其表关键字升序排列后再进行存储,也就是在内存中的位置发生改变。哈希表没有索引,只有关键字。系统用哈希算法管理表中的数据,因而其寻址一个数据行的时间与表的行数无关。表关键字 内表关键字在访问内表以及排序时非常之关键,定义时通过With key来定义,这也是一个可选项,即如果没有显式声明,那么内表中的非数值型栏位都为Key。 还有Unique的问题,即唯一性关键字声明,标准表不能使用此关键字,排序表可以用UNIQUE 或NON-UNIQUE,哈希表不能使用NON-UNIQUE,只能使用唯一表关键字。行访问方式标准表排序表哈希表索引访问允许允许不允许关键字访问允许允许允许相同值关键字行可重复可重复或不可重复不可重复推荐访问方式主要通过索引主要通过关键字只能通过关键字对于一个小于100行的内表,且很少使用关键字 *** 作,则使用标准表没有效率问题;数据量比较巨大,切不存在重复行,只需使用关键字访问的内表应定义为哈希表;排序表适用于运行期内必须以某种排序形式出现的内表。

一般情况下,在Web Dynpro for ABAP的Table中,不推荐使用行多选,

因为Web Dynpro for ABAP的Table于abap中alv的mark选择方式不同。

alv无论单选还是多选,只要判断mark就是选择的行。

但是在Web Dynpro for ABAP的Table中单选个多选的获取方式不一样,

你如果注意看的话,单选跟多选的颜色有点不一样。

所以无论是业务上还是程序上,会导致无法正确判断用是是否是 多选+单选 选择了数据,

还是只选择 多选的。

建议该用checkbox。

最后解答你的问题。。

多选的时候Web Dynpro for ABAP的Table是以elements形式存到一个内表中的。。

上面的兄弟说的对。。

IF_WD_CONTEXT_NODE 中有method:GET_SELECTED_ELEMENTS

但是不包括单选的行。。

如果想取数据,就得循环了。。

loop at <ELEMENTS> into <ELEMENT>

ELEMENT->get_static_attributes(

)

endloop

用索引读取 单行

要用索引从 内表中读取 单行,请使 用 READ 语句,用法 如下:

语法

READ TABLE <itab> [INTO <wa>] INDEX <idx>

用 INTO 选项指定目 标区域 <wa>。 如果表格有 表头行,可 以忽略 INTO 选项。这样 ,表格工作 区域就成了 目标区域。

系统用索引 <idx> 从表格 <itab> 中读取行。 这比用关键 字访问表格 要快(参见 读取有关键字的单行 )。

如果找到有 指定索引的 条目,则将 系统字段 SY-SUBRC 设置为0, 而且 SY-TABIX 包含该行的 索引。否则 ,SY-SUBRC 包含非0值 。

如果 <idx> 小于或等于 0,则会发 生实时错误 。如果 <idx> 超过表格大 小,系统将 SY-SUBRC 中的返回代 码值设置为 4。

DATA: BEGIN OF ITAB OCCURS 10,

COL1 TYPE I,

COL2 TYPE I,

END OF ITAB

DO 20 TIMES

ITAB-COL1 = SY-INDEX

ITAB-COL2 = 2 SY-INDEX

APPEND ITAB

ENDDO

READ TABLE ITAB INDEX 7

WRITE: SY-SUBRC, SY-TABIX

WRITE: / ITAB-COL1, ITAB-COL2

其输出为:

0 7

7 14

在此创建有 表头行的内 表 ITAB, 并用20行 对其进行填 充。读取并 输出索引为 7的行。

AT NEW field是当内表中连续出现不同的field或之前的字段时,执行它与ENDAT之间的语句。一般使用之前需要以字段field及之前的字段为key对内表进行排序。这句话可能很抽象,下面举个例子来说明。

例:

DATA: BEGIN OF wa,

col01 TYPE char10,

col02 TYPE char10,

col03 TYPE char10,

END OF wa,

itab LIKE TABLE OF wa

  省略初始化内表itab

SORT itab by col01 col02

LOOP AT itab into wa

AT NEW col02

 当wa-col01不等于上一条数据的col01的值或者wa-col02不等于上一条数据的col01的值的时候执行

       由于执行语句AT NEW之后,工作区中类型为char的字段值会变成,所以在AT NEW之后需要重新读取该条数据

READ TABLE itab INTO wa INDEX sy-tabix

      省略其它语句

ENDAT

ENDLOOP

如果排序后内表itab中的数据为上图中的数据,则当序号为1、4、8、10时会执行AT NEW和ENDAT之间的语句。

1)在写abap 的过程中可能需要统计、求和等,那么在loop endloop 中间,有个AT <LEVEL>,<…>,ENDAT循环。其中的<LEVEL>包括: FRIST,LAST, NEW , END OF。

2)这些可以用来进行内表中按某个<u>字段f</u> 进行分组统计。

3)当f字段或者f字段左边的字段内容发生变化时该事件后面的语句都会执行。

以下以处理工资报表数据为例(简化例子):

接下

以上在loop过程中对工资单数据分别按人事范围、部门汇总,最后做总的统计。

ABAP对内表插入数据有3种:APPEND,COLLECT,INSERT。

1) 要计算数字字段之和或要确保内表中没有出现重复条目,使用 COLLECT 语句,它根据标准关键字处理行(将关键字相同的其他数字字段值汇总)。

2)要在内表现有行之前插入新行,请使用 INSERT 语句。

3)要将内表条目内容复制到另一个内表中并且覆盖该目标表格,使用 MOVE 语句。

以下举例说明collect常见用法。

注意:此处itab作为汇总表定义为hashed table 且明确唯一key列(普通内表也可),collect要求非KEY列都得是数据类型(I,P,F)

DATA: itab LIKE TABLE OF wa_data with KEY col1 col WITH HEADER LINE

是这个意思吗?

内表A 有字段a b x y z

内表B有字段 x y

要把内表A中数据放到内表B中

如果是这样子

loop at a

MOVE-CORRESPONDING a to b

append b

endloop

问题1:取内表数据你改到pbo事件中完成(显示table control前)。

目前可能你写到pai才会造成回车后才能显示数据。。。

问题2:追加modify命令

PROCESS AFTER INPUT

&SPWIZARD: PAI FLOW LOGIC FOR TABLECONTROL 'TBL_9000'

LOOP AT ITAB_9100

CHAIN

FIELD H_9100-MATNR

FIELD H_9100-ERSDA

MODULE TBL_9000_MODIFY ON CHAIN-REQUEST

endchain

ENDLOOP

module TBL_9000_MODIFY input

MODIFY ITAB_9100

FROM H_9100

INDEX TBL_9000-CURRENT_LINE

endmodule " TBL_9000_MODIFY INPUT

以上就是关于ABAP几种内表的 *** 作全部的内容,包括:ABAP几种内表的 *** 作、求助:Web Dynpro for ABAP的Table如何得到被选中的多行、abap 取数排序之后怎么取第一行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9656829.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存