为什麽要用ABAP动态内表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什麽要用ABAP动态内表相关的知识,希望对你有一定的参考价值。

这个要根据具体问题来考虑,在一些场景就必须用动态的内表来解决。
举个最常用的例子,ALV里,对物料特性值的显示,不同物料可能会数量不同的特性,在ALV显示时,列就不是一个固定,此时,就可以使用动态内表,在程序中动态生成内表结构,来完成ALV列的控制,不知道是不是表达清楚了。
参考技术A 不知道你有没有其他语言的背景,比如C,C++,Java.在这些语言中,都有数组的概念,应用最多的就是二维数组[m][n],你会发现在ABAP里没有数组的概念,但是在处理这种扁平结构的多条数据的时候该如何处理呢?由于ABAP语言的特殊性(最初用来写报表),ABAP的设计者就发明了内表这个概念,用来替代其他语言中的二维数组。之所以叫内表,是因为ABAP大多数的时候都是跟数据库表打交道,所以内表这个概念是很顺应使用的需要的。你会发现内表其实就是一个二维数组,列是各个字段,行就是内表的每条记录。

abap move-corresponding

请教下abap中 move-corresponding.to.
比如 内表A中有 1 2 3 4 这四个字段,内表B中有 1 5 6 7 8 这5个字段,我用move-corresponding A to B ,为什么内表B得到结果只是一个 1字段的值,其他字段都为空值,有什么办法把内表A中字段1的值复制到内表B中字段1的值,同时保留 5 6 7 8的字段值.

参考技术A *DATA:
* BEGIN OF LW_COM,
* NAME2 TYPE C LENGTH 10 VALUE 'ACCENTURE',
* ADD TYPE C LENGTH 30 VALUE 'DALIAN SOFTWARE PARK',
* END OF LW_COM,
* BEGIN OF LW_PER,
* ID TYPE N LENGTH 4 VALUE '0001',
* NAME TYPE C LENGTH 6 VALUE 'MARK',
* NAME2 TYPE C LENGTH 10,
* ADD TYPE C LENGTH 30,
* END OF LW_PER.
*
* PERFORM F_ADD_DATE2.
*
*
**-------------------------------------------------------
**&---------------------------------------------------------------------*
**& Form F_ADD_DATE
**&---------------------------------------------------------------------*
**& text
**&---------------------------------------------------------------------*
**& --> p1 text
**& <-- p2 text
**&---------------------------------------------------------------------*
*FORM F_ADD_DATE2.
*
* MOVE-CORRESPONDING LW_COM TO LW_PER.
* WRITE: LW_PER-ID,
* LW_PER-NAME,
* LW_PER-NAME2,
* LW_PER-ADD.
*ENDFORM.
用工作区就可以。我用表to表也是只有相同的字段会覆盖过去,不相同的字段为空。
*尝试用表
TYPES:
BEGIN OF TYP_W_COM,
NAME2 TYPE C LENGTH 10 ,
ADD TYPE C LENGTH 30,
END OF TYP_W_COM,
TYP_T_COM TYPE STANDARD TABLE OF TYP_W_COM,

BEGIN OF TYP_W_PER,
ID TYPE N LENGTH 4,
NAME TYPE C LENGTH 6,
NAME2 TYPE C LENGTH 10,
ADD TYPE C LENGTH 30,
END OF TYP_W_PER,
TYP_T_PER TYPE STANDARD TABLE OF TYP_W_PER.

DATA:
LW_01 TYPE TYP_W_COM,
LW_02 TYPE TYP_W_PER,
LT_01 TYPE TYP_T_COM,
LT_02 TYPE TYP_T_PER.

LW_01-NAME2 = 'ACCENTURE'.
LW_01-ADD = 'DALIAN SOFTWARE PARK'.
INSERT LW_01 INTO TABLE LT_01.

LW_02-ID = '0001'.
LW_02-NAME = 'MARK'.
INSERT LW_02 INTO TABLE LT_02.

PERFORM F_ADD_DATE2.

*-------------------------------------------------------
*&---------------------------------------------------------------------*
*& Form F_ADD_DATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM F_ADD_DATE2.

MOVE-CORRESPONDING LT_01 TO LT_02.

LOOP AT LT_02 INTO LW_02.
WRITE: LW_02-ID,
LW_02-NAME,
LW_02-NAME2,
LW_02-ADD.
ENDLOOP.
ENDFORM.
参考技术B 不要用move-corresponding ,对b做循环,根据合适的条件直接把a-1赋值给b-1,然后modify b

以上是关于为什麽要用ABAP动态内表的主要内容,如果未能解决你的问题,请参考以下文章

ABAP动态内表运用

abap动态内表获取字段名

ABAP根据表名创建动态内表并更新

详解ABAP/4内表结构

ABAP 中内表的复制

abap 怎样使两张内表合成一个内表