带有ABAP 7.4的并行光标

2020-08-23 08:43发布

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

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


通常,我们使用以下逻辑来实现并行光标

在it_vbak分配上循环
从lv_tabix ASSIGNING在 vbap上循环。
*如果键不相同,则保存索引并退出循环。
如果 -vbeln,则
<> -vbeln。
lv_tabix = sy-tabix。
退出。
ENDIF。
*其余逻辑将从此处开始...
ENDLOOP。
ENDLOOP。

我发现可以使用如下ABAP 7.4语法实现相同的功能:

DATA(lt_final)=值ty_t_final(FOR ls_vbap IN it_vbap
FOR ls_vbak IN it_vbak FROM line_index(it_vbak [vbeln = ls_vbap-vbeln])
vbel(vbeln = ls_vbap-br> = VALUE ty_final(
vbeln = ls_vbak-vbeln)
IN(对应#(BASE(ls_final)ls_vbap)))。

但是,当我比较两者的性能时,前一个比用ABAP 7.4语法实现的要快得多。 有人可以让我知道我是否想念什么吗?

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

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


通常,我们使用以下逻辑来实现并行光标

在it_vbak分配上循环
从lv_tabix ASSIGNING在 vbap上循环。
*如果键不相同,则保存索引并退出循环。
如果 -vbeln,则
<> -vbeln。
lv_tabix = sy-tabix。
退出。
ENDIF。
*其余逻辑将从此处开始...
ENDLOOP。
ENDLOOP。

我发现可以使用如下ABAP 7.4语法实现相同的功能:

DATA(lt_final)=值ty_t_final(FOR ls_vbap IN it_vbap
FOR ls_vbak IN it_vbak FROM line_index(it_vbak [vbeln = ls_vbap-vbeln])
vbel(vbeln = ls_vbap-br> = VALUE ty_final(
vbeln = ls_vbak-vbeln)
IN(对应#(BASE(ls_final)ls_vbap)))。

但是,当我比较两者的性能时,前一个比用ABAP 7.4语法实现的要快得多。 有人可以让我知道我是否想念什么吗?

付费偷看设置
发送
2条回答
大简至美
1楼-- · 2020-08-23 09:02

我认为这两个代码不是等效的。

我的意思是,在光标1中,外部LOOP用于VBAK,然后对VBAP执行LOOP。
在7.4版本中,外部LOOP用于VBAP,内部LOOP用于VBAK,也许如果 您按此顺序执行,性能可能会更高一些?

我认为应该是7.4版本,不是吗?

 DATA(it_final)= VALUE ty_t_final(FOR ls_vbak IN it_vbak
           FOR ls_vbap IN it_vbak从line_index(it_vbak [vbeln = ls_vbap-vbeln])哪里(vbeln = ls_vbak-vbeln)LET ls_final = VALUE ty_final(vbeln = ls_vbak-val_s)ap)RES()  
clasier
2楼-- · 2020-08-23 08:53

很明显,如果尝试以相同的方式实现它,则表迭代的性能会降低,因为您无法退出FOR循环,因此需要循环直到内部循环结束 表!

如果it_vbak和it_vbap是标准表,则表表达式将非常慢。

结论:构造函数表达式有时"不好"...。

# p#

一周热门 更多>