MOVE-CORRESPONDING-工作区域和内部表的行为不同

2020-08-20 11:48发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

我的疑问是,当我在任何工作区域上使用关键字MOVE-CORRESPONDING时,它会按预期工作,即以相似的名称填充字段,而对其他字段没有任何影响,则可以填充或空白,这并不重要。 但是,当我对内部表使用相同的关键字时,它将替换目标表中与第一个表不匹配的数据。 这是故意还是错误?

例如

选择bukrs monat

FROM BKPF

INTO TABLE lt_bkpf

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

SELECT rburks rldnr docln ryear

FROM acdoca

INTO lt_acdoca

在............

类型:ty_tab开头,

bukrs类型bukrs,

monat类型monat,

rbukrs类型的bukrs,

rldnr类型fins_legder,

docln类型docln6

ryear类型gjahr_pos,

ty_tab结束。

数据:lt_tab ty_tab类型表,

wa_tab类型ty_tab。

**如果我用不了,表格将被完美填充

在it_bkpf上闭环......

将它停在it_acdoca上

对应wa_bkpf移动到wa_tab。

对应wa_acdoca移动到wa_tab。

将wa_tab附加到it_tab。

ENDLOOP。

ENDLOOP。

**如果我不使用LOOP进行操作,它将用内部表中不存在的空白替换列

将it_bkpf移动到it_tab。

将it_acdoca移动到it_tab。

it_tab =对应#(it_bkpf)

it_tab =对应#(it_acdoca)

**两者的结果相同。

1)当it_bkpf在内部表中移动时

1)当it_acdoca在内部表中移动并替换it_bkpf的列(BUKRS和MONAT)

我犯了什么错误,或者这是应该如何表现的?

感谢和问候

拉吉特

(19.0 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

我的疑问是,当我在任何工作区域上使用关键字MOVE-CORRESPONDING时,它会按预期工作,即以相似的名称填充字段,而对其他字段没有任何影响,则可以填充或空白,这并不重要。 但是,当我对内部表使用相同的关键字时,它将替换目标表中与第一个表不匹配的数据。 这是故意还是错误?

例如

选择bukrs monat

FROM BKPF

INTO TABLE lt_bkpf

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

SELECT rburks rldnr docln ryear

FROM acdoca

INTO lt_acdoca

在............

类型:ty_tab开头,

bukrs类型bukrs,

monat类型monat,

rbukrs类型的bukrs,

rldnr类型fins_legder,

docln类型docln6

ryear类型gjahr_pos,

ty_tab结束。

数据:lt_tab ty_tab类型表,

wa_tab类型ty_tab。

**如果我用不了,表格将被完美填充

在it_bkpf上闭环......

将它停在it_acdoca上

对应wa_bkpf移动到wa_tab。

对应wa_acdoca移动到wa_tab。

将wa_tab附加到it_tab。

ENDLOOP。

ENDLOOP。

**如果我不使用LOOP进行操作,它将用内部表中不存在的空白替换列

将it_bkpf移动到it_tab。

将it_acdoca移动到it_tab。

it_tab =对应#(it_bkpf)

it_tab =对应#(it_acdoca)

**两者的结果相同。

1)当it_bkpf在内部表中移动时

1)当it_acdoca在内部表中移动并替换it_bkpf的列(BUKRS和MONAT)

我犯了什么错误,或者这是应该如何表现的?

感谢和问候

拉吉特

(19.0 kB)
付费偷看设置
发送
4条回答
Haoba3210
1楼-- · 2020-08-20 12:25

关于构造函数表达式(target =对应的#(source)),很容易理解目标已被完全替换。

关于内部表上的MOVE-CORRESPONDING,SAP无法猜测源的关键字段 和目标内部表应该连接。 因此,SAP决定不猜测并仅覆盖目标内部表。

spaceman01
2楼-- · 2020-08-20 12:12

感谢您的答复。 我看不到以这种方式构建它的好处,但这似乎是故意的。

我唯一的理由是,当MOVE-CORRESPONDING不替换结构(工作区域)中的值时,为什么要在内部表中替换它。

@ Marco-我尝试过"保持目标线"-它在BKPF下附加了ACDOCA的所有行,这不是我的要求。 " BASE(base)"也将替换数据。

小灯塔
3楼-- · 2020-08-20 12:12

当文档解释您遇到的结果时,您不能称其为错误:

 MOVE-CORRESPONDING [EXACT  ] itab1到itab2。
 [扩展嵌套表] [保留目标行]。

 "语句MOVE-CORRESPONDING的此变体要求为itab1和itab2指定内部表。它在itab1和itab2的行类型中搜索所有名称相似的组件,并根据以下规则将其从itab1分配给itab2。

 "如果存在具有相同名称的组件,则删除目标表itab2而不添加额外的KEEPING TARGET LINES,并插入与源表itab1中相同数量的初始行。然后依次提取源表的行( 以与语句LOOP中相同的顺序进行操作,并且根据结构的MOVE-CORRESPONDING [EXACT]的规则,将每一行的内容分配给目标表中的相应行。
 "如果没有名称相同的组件,则不会进行分配,并且目标表将保持不变。

 保持目标线
 "此添加阻止了目标表itab2的删除。相反,它添加了与源表itab1中存在的初始行数相同的初始行。然后,将源表的行映射到这些行。然后将表键和索引映射到这些行。 如果没有找到名称相同的组件,则目标表保持不变。


 "来自ABAP关键字文档的可执行示例
 "内部表的移动对应

 移动对应
 " itab2的原始内容将被删除。分配后,col2和col3列的内容与itab1中的内容相同,而col4保持初始。
 移动对应的保持目标线
 保留了itab2的原始内容。添加了三个新行,其中col2和col3列的内容与itab1中的列相同,而col4保持初始。
 移动对应的扩展嵌套表
 " itab2的原始内容已删除。分配后,col2列的内容与itab1中的内容相同,col4保留为初始内容。表格组件col3被解析,并在其中找到相同名称的组件col2。itab2-col3的原始内容 分配后,col2列的内容与itab1-col3中的内容相同,而col3列保持初始。
 移动对应的扩展嵌套表格保持目标线
 " itab2的原始内容得到保留。添加了三行,与前一次分配的结果相同。
当使用两个结构时,不需要'join',这就是为什么 移动对应确实可以实现您的期望,但是在使用两个内部表时,大多数情况下需要联接:"表1的哪些行与表2的行相对应。"在两个内部表上进行移动对应 表没有提供连接限制的选项。您要执行的操作需要显式连接,使用VALUE运算符可能看起来像这样:
 DATA(itab3)= VALUE itab3type(
       在ita1中将wa1索引为idx
       在itab2的FOR wa2中(键= wa1键)
         (键= wa1-键
           col11 = wa1-col1
           col12 = wa1-col2
           col21 = wa2-col1
           col22 = wa2-col2))。
粗暴的香蕉
4楼-- · 2020-08-20 12:32

使用更新的语法时也会发生同样的情况:

 it_tab =对应的#(it_bkpf)。

这与结构和表具有相同的行为。

在我看来,使用更新的语法会更加明显:将对应的it_bkpf移至其他结构,然后复制到it_tab。

一周热门 更多>