ABAP开发奇葩BUG记录: SUBMIT AND RETURN 不生效

项目需要创建大量数据并预处理来进行测试,Team里用的是三哥的一个report去创建单个数据。

三哥的程序很简单,就是个选择屏幕,输入一些值,然后做主数据,然后alv显示出来。

于是我便做了个小程序,用了如下语法:

SUBMIT (三哥的程序)  USING SELECTION-SET '某个变式' AND RETURN.

然后再去动态获取ALV的数据,转化到自己的表里做后续处理。

本来就是个很简单的语句,没什么需要说明的,但是问题就出在这里,程序执行后,停在了三哥程序的选择屏幕界面,并没有返回。

挠头。

最开始以为是自己设置的变式有问题,但是手动执行是可以的,就否决了这个猜测。

然后手动点后退的时候发现有些不太对劲,在选择界面点完退后,会回到我自己的程序,并且程序里已经获得了三哥程序的结果。

也就是说,三哥的程序虽然停在了选择界面,但是,程序已经执行了一遍了。

我黑着脸去看了三哥的程序,找到了问题。

三哥的程序结构是这样的:

选择屏幕-数据创建-显示alv, 很普通,但是最后一个显示ALV的form, 很不普通。

FORM display_alv.

  EXPORT gt_log FROM gt_log TO MEMORY ID 'GTMSG'.

  SUBMIT (ALV显示程序) WITH p_prog = sy-cprog. "#EC CI_SUBMIT

ENDFORM. "display_alv

也就是说,三哥也嵌套了一个程序,用单独的程序去做了显示,通过内存传值。

于是我return生效了,但是生效在了这一层。

我觉得这算是ABAP语法设计的BUG了。

机智的我改良了代码。

SUBMIT (三哥的程序)  USING SELECTION-SET '某个变式' AND RETURN AND RETURN.

连着写了两个RETURN,然而编译器并没有机智地领悟我的意思,依然停在了三哥的界面。

虽然很想吐槽,但是三哥的程序还是不能动,于是我就只能将三哥的程序COPY了一份,然后变成了CALL自己的程序,这回连ALV都不用了,直接获取内存,效率还高了些。

问题解决。

 

posted @ 2022-08-17 10:55  以秉  阅读(894)  评论(0编辑  收藏  举报