SAP ABAP 编程问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SAP ABAP 编程问题相关的知识,希望对你有一定的参考价值。

请问exit和 return 有什么区别。在loop 里和不在loop 里作用一样吗?还有就是check 有什么用?比如check 变量 is初值。什么意思

ABAP--关于ABAP流程处理的一些命令的说明(stop,exit,return,check,reject)

Stop 命令
使用该命令的程序位置
INITIALIZATION, AT
SELECTION-SCREEN, START-OF-SELECTION和GET
事件中
处理说明
1、 当在INITIALIZATION事件执行该命令,系统将直接触发应用服务器和客户端屏幕元素的发送;
2、 在其他事件中将直接触发END-OF-SELECTION事件的执行,如果不想执行END-OF-SELECTION,请使用RETURN或者 EXIT.
注意事项

EXIT命令
使用该命令的程序位置
用于循环和程序模块中:DO和其他处理模块中(event block, dialog module,procedure (function module, method, subroutine))...ENDDO,WHILE...ENDWHILE,LOOP...ENDLOOP,SELECT...ENDSELECT
处理说明
1、 循环处理中,EXIT只跳出当前的循环;
2、 在START-OF-SELECTION, GET,END-OF-SELECTION事件中,将直接触发List输出,将不执行END-OF-SELECTION事件;如果没有List输出,系统将直接返回选择屏幕;
3、 对于procedure系统返回调用处;
注意事项
Sap推荐EXIT只是用于循环处理,对于处理模块请使用Return。

RETURN命令
使用该命令的程序位置
用于处理模块中(eventblock, dialog module, procedure (function module, method, subroutine))
处理说明
1、 对于procedure ,RETURN将无条件退出当前的处理模块,不影响后续模块的执行;
2、 对于START-OF-SELECTION, GET,END-OF-SELECTION事件中,将直接触发List输出,将不执行END-OF-SELECTION事件;如果没有List输出,系统将直接返回选择屏幕;
注意事项
RETURN不管存在多少层次的循环,将直接退出当前处理模块,这一点和EXIT不同

CHECK命令
使用该命令的程序位置
用于循环和程序模块中:DO和其他处理模块中(event block,dialog module, procedure (function module, method, subroutine))...ENDDO,WHILE...ENDWHILE,LOOP...ENDLOOP,SELECT...ENDSELECT
处理说明
1、 循环处理中,CHECK只是不执行本次循环的后续处理,继续调到下一次循环;
2、 在START-OF-SELECTION, GET,END-OF-SELECTION事件中,只是中断本事件内的后续代码的执行 ,不影响其他后续模块的处理,这和EXIT,RETURN是不同的;
3、 对于没有循环procedure系统返回调用处;
4、 对逻辑数据库的GET事件,系统退出本次纪录和子节点的读取处理,将继续下一条纪录的处理;
注意事项
Sap推荐CHECK只是用于循环处理,对于处理模块请使用Return。

REJECT命令
使用该命令的程序位置
用于逻辑数据库的GET处理事件中
处理说明
REJECT的处理类似CHECK,但和CHECK不同的是:REJECT如果在循环内也同样退出本次的处理,而CHECK只是退出循环,不退出处理
注意事项追问

谢谢你

参考技术A exit和return一般只在loop中使用,exit是退出整个循环,return是退出当前循环行
check和if类似
参考技术B RETURN :This statement ends the current processing block immediately. 立即退出当前程序块

EXIT: When processing table controls or step loops with the statement LOOP in the dynpro flow logic, this statement causes the loop to be terminated immediately. 从当前循环立即退出

如果是两个loop嵌套,return退出整个大循环,exit退出当前包含exit的循环

check :如果是在loop里面 如果不满足条件 不执行check之后 继续下一次循环 如果在loop之后 退出当前程序块 比如在form里面 就退出这个form 继续往后本回答被提问者和网友采纳

SAP ABAP编程 MOVE-CORRESPONDING将一个结构中的数据赋予另一个结构中

MOVE-CORRESPONDING用于将一个结构中的数据赋予另一个结构中的对应字段,只能存一行数据。

所以使用时应该是如下形式:

TABLES: spfli.

DATA: yp_wa LIKE spfli,
      yp_tab LIKE TABLE OF spfli.

TYPESBEGIN OF sp,
  sel   TYPE c.
        INCLUDE STRUCTURE spfli.
TYPESEND OF sp.

DATA: wa TYPE sp,
            tab TYPE TABLE OF sp.

LOOP AT yp_tab INTO yp_wa
  MOVE-CORRESPONDING yp_wa TO wa.
  APPEND wa TO tab .
ENDLOOP.

其中yp_tab / tab为两个自定义内表,yp_wa中只有字段名相同的才可以被赋予wa的工作区中。

 

以上是关于SAP ABAP 编程问题的主要内容,如果未能解决你的问题,请参考以下文章

一些通过SAP ABAP代码审查得出的ABAP编程最佳实践

Sap. Abap 编程的指针怎么用?

如何在SAP Cloud Platform ABAP编程环境里创建一个employee

SAP 云平台上的 ABAP 编程环境里如何消费第三方服务

SAP ABAP编程 MOVE-CORRESPONDING将一个结构中的数据赋予另一个结构中

SAP ABAP 表控件