静态确定LOOP是否在" Ztable"上处于活动状态

2020-09-01 08:38发布

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

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


我正在尝试避免循环更新表。

lt_ztable的
循环分配 -bname = ls_record-new_username。
  结束循环。

*我以前如何修改内部表

 ls_ztable-bname = ls_record-new_username。
  从ls_ztable传输bname修改lt_ztable。

当我运行代码检查器时:

要在表" LT_Ztable "中更改,删除或插入一行。 无法静态确定LOOP是否在" LT_Ztable"上处于活动状态

可以这样修改内部表吗?更重要的是,它比字段符号更有效吗?

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

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


我正在尝试避免循环更新表。

lt_ztable的
循环分配 -bname = ls_record-new_username。
  结束循环。

*我以前如何修改内部表

 ls_ztable-bname = ls_record-new_username。
  从ls_ztable传输bname修改lt_ztable。

当我运行代码检查器时:

要在表" LT_Ztable "中更改,删除或插入一行。 无法静态确定LOOP是否在" LT_Ztable"上处于活动状态

可以这样修改内部表吗?更重要的是,它比字段符号更有效吗?

付费偷看设置
发送
3条回答
派大星 ヾ
1楼 · 2020-09-01 09:43.采纳回答

以下行必须在LOOP AT内,否则会引发运行时错误,因为这意味着它会更新当前迭代的行(在LOOP AT lt_ztable内部):

从ls_ztable修改lt_ztable  

您可能想做的是修改几行(在-处的任何循环之外-添加WHERE使得MODIFY的行为完全不同):

从ls_ztable修改lt_ztable,在其中传输bname  bname <> ls_ztable-bname。
 
hongfeng1314
2楼-- · 2020-09-01 09:27

... WHERE bname <> ls_ztable-bname在所有情况下均有效,而WHERE bname IS NOT INITIAL则防止修改带有初始BNAME的行。

我的 经验法则是内核一次执行一个语句,而使用字段符号将需要多个语句。 所以我想DELETE ... WHERE ...会更快(也许快20%-测试可以轻松完成...)

Alawn_Xu
3楼-- · 2020-09-01 09:24

乔纳森·布拉瓦茨克

Sandra Rossi ,MODIFY语句的行为与不同的语句不同。 上面的两个语句有助于更好地理解概念。

我觉得使用FIELD SYMBOL仍然比MODIFY语句更有效,因为FIELD SYMBOL使用内存概念来替换内部数据被更改的值

您需要确保在循环中执行所需的操作后,未分配字段Symbol。

注意

# p#乔纳森·布拉瓦茨基,在这种情况下,请使用"字段符号"。

一周热门 更多>