ABAP 7.4的基础

2020-08-22 11:56发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)专家您好, 我正在尝试在以下情...

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

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


专家您好,

我正在尝试在以下情况下实现MOVE-CORRESPONDING。

内部表#1:lt_plant

werks fabkl国家

1000 01

内部表2:lt_name

ident ltext

01 <国家名称>

我试图使用FOR和以下代码将国家/地区名称从内部表#2移至内部表#1,但是这导致从内部表#2追加新行。

lt_plant =值#(lt_name
的基本lt_plant
其中lt_plant
的基础lt_plant
-ltext
))。

请帮助我使用BASE/CORRESPONDING,FOR和WHERE解决此问题。

谢谢。

8条回答
wang628962
2020-08-22 12:26 .采纳回答

>>但是,这导致从内部表#2追加新行。

是的,由于存在BASE,因此使用lt_plant = VALUE#(BASE lt_plant ...)构造 它与目标引用相同的表,它在不初始化的情况下追加新行。 请注意,使用与目标数据对象BASE和FOR相同的内部表是非常危险的,因为它可能会导致无限循环(当前,您的代码不会循环,仅因为您没有初始化lt_plant的fabkl且WHERE基于 在fabkl上,您只需初始化ltext。)

如果只想使代码不追加,而无需太多更改代码,则可以简单地放弃BASE并使用LET lt_plant_temp = lt_plant进行临时复制 因为LET总是在目标数据对象(lt_plant)初始化之前执行:

 lt_plant = value#(
         LET lt_plant_temp = lt_plant IN" <==代替BASE
         对于lt_name中的
         对于lt_plant_temp中的
             其中(fabkl =  -ident)
         (
           werks =  -werks" <==添加此
           fabkl =  -ident" <==添加此
           ltext = <文件名> -ltext
         ))。

但是我建议您选择Michael给出的与CORRESPONDING ... FROM ... USING对应的解决方案,它对应于左外部联接,因为我认为它比您的对应于一个外部联接更好。 内部联接。 如果要坚持内部联接,还可以使用FILTER ... IN构造函数。

一周热门 更多>