是否有新的语法(740、750、751)来修改同一内部表?

2020-08-14 19:46发布

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

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


大家好,

我想知道是否有新的方法可以使用新语法修改相同的内部表。 以前的方法是遍历并修改它。

对于基于条件的操作,从work_area WHERE(条件)中修改内部表可以解决问题,但是,无条件地操作则需要一个LOOP。

在内部表ASSIGNING FIELD-SYMBOL()处循环。
   -字段=值。
 ENDLOOP。

自从ABAP语言发展以来-从740、750到现在的751; 而且它还在不断发展,有没有一种我可能错过的新方法?

如果没有,那么我们可以提供类似的东西

 internal_table [1..lines(internal_table)] -field =值。

我知道这就像总是要求更多,这引起了某些人的注意,因为有些人(我知道)仍然不愿意使用新语法。

但是,正如他们所说的那样-当风暴席卷而来时,恶人消失了,但是义人永远站稳了! ;-)

干杯!

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

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


大家好,

我想知道是否有新的方法可以使用新语法修改相同的内部表。 以前的方法是遍历并修改它。

对于基于条件的操作,从work_area WHERE(条件)中修改内部表可以解决问题,但是,无条件地操作则需要一个LOOP。

在内部表ASSIGNING FIELD-SYMBOL()处循环。
   -字段=值。
 ENDLOOP。

自从ABAP语言发展以来-从740、750到现在的751; 而且它还在不断发展,有没有一种我可能错过的新方法?

如果没有,那么我们可以提供类似的东西

 internal_table [1..lines(internal_table)] -field =值。

我知道这就像总是要求更多,这引起了某些人的注意,因为有些人(我知道)仍然不愿意使用新语法。

但是,正如他们所说的那样-当风暴席卷而来时,恶人消失了,但是义人永远站稳了! ;-)

干杯!

付费偷看设置
发送
8条回答
葫芦娃快救爷爷
1楼 · 2020-08-14 19:56.采纳回答

查找有关构造函数运算符VALUE,REDUCE,FILTER,CORRESPONDING,COND等的文档和示例。

您可以将它们组合在一起并在LHS和RHS上使用同一表。

p>

itab =运算符#(... for wa in itab ...)

ZJXianG
2楼-- · 2020-08-14 20:01

你好,Aasim Kahn,

非常有用地发布

恭喜。

我用过您的代码,但是我必须使用2个内部表。 我可以改善吗?

看看我的代码:

数据:zsd_outsys_order的lt_outsys_orderx类型表。

 从zsd_outsys_order中选择*到表@data(lt_outsys_order)中。

 lt_outsys_order =值#(对于lt_outsys_order中的,let lv_value = abap_true in(值#(基本对应的#()inproc = lv_value))))。

谢谢。

大道至简
3楼-- · 2020-08-14 20:06
 DATA lt TYPE some_table。
 数据表类型为some_table。
 ls-field = some_value。
 从ls WHERE字段<> some_value TRANSPORTING字段修改。

那会改变整个表。

SAP小菜
4楼-- · 2020-08-14 20:12

这对我不起作用(重置表)。 所以我用了一张辅助桌子。

 data(aux_table)= VALUE#(FOR  IN内部表
                    LET lv_value =值IN(VALUE#(BASE CORRESPONDING#()field = lv_value)))。

 内部表=辅助表。
暮风yp
5楼-- · 2020-08-14 20:04

有一个解决方案,在VALUE构造函数运算符中使用带有LET表达式的辅助表。 请参阅以下代码:

类型:
   开始于lst_struct,
     field1 TYPE i,
     field2 TYPE char10,
     field3 TYPE char10,
   结束于lst_struct,
   带有默认键的lst_struct的ltt_table类型标准表。

 常量:lc_done TYPE char4 VALUE'完成'。
 DATA(lt_table)= VALUE ltt_table((field1 = 1 field2 ='Test1'field3 ='Warnigs')
                                   (field1 = 4 field2 ='Test2'field3 ='Failed'))。
 lt_table = VALUE#(LET lt_temp = lt_table IN FOR ls_temp IN lt_temp
                     (field1 = ls_temp-field1
                       field2 = ls_temp-field2
                       field3 = lc_done))。

您不能使用同一张表,因为VALUE运算符会创建一个新表(删除所有现有数据),并且如果您尝试使用附加的BASE,它将进入无限循环;)

哎,真难
6楼-- · 2020-08-14 20:10
< p> Akysh Baymuhammedov 很好,上面的代码由 Aasim Khan (两年多以前)无法正常工作,因为目标始终在施工前就已清除。

 itab =  VALUE#(FOR ita中的 ... ...如果
itab既是源又是目标,则<==将不起作用!
小灯塔
7楼-- · 2020-08-14 20:13

可以重写为

数据lt类型some_table。
 修改lt FROM VALUE#(field = some_value)WHERE field <> some_value TRANSPORTING字段。

一周热门 更多>