HELLO ,这里是百里,一个学习中的ABAPER. 今天想讲一下return ,stop ,breadk contie 的使用方式. 这个东西涉及不多但是还是分享下 .

RETURN

RETURN用来退出当前执行的程序块,例如一个FORMMETHOD报表事件块,不管是否出现在循环(LOOP)中,RETURN都会退出当前执行的程序块,而不仅仅是退出循环(如果是在Form、METHOD中,只会退出Form、METHOD,不会退出Form、METHOD被调用所在的报表事件块,即退Form、METHOD后继续向被调用点后面执行)

STOP

INITIALIZATION中的STOP会导致跳转到AT SELECTION-SCREEN OUTPUT事件块;

如果STOP在AT SELECTION-SCREEN OUTPUT块里,则只是退出当前块(STOP后面语句不执行而已),仅接着是显示选择屏幕;

AT SELECTION-SCREEN [ON]…选择屏幕事件块中的STOP也只是退出当前事件块,继续后面的事件块;

另外,即使STOP在循环中,还是在FORM,METHOD,也是直接从被调用的点退出所在事件块,而不仅仅只退出当前循环、FORM、METHOD,这与直接在事件块中的效果是一样的;

EXIT

INITIALIZATION中的EXIT会导致跳转到AT SELECTION-SCREEN OUTPUT事件块;

如果EXIT在AT SELECTION-SCREEN OUTPUT块里,则只是退出当前块(EXIT后面语句不执行而已),仅接着是显示选择屏幕;

AT SELECTION-SCREEN [ON]…选择屏幕事件块中的EXIT也只是退出当前事件块,继续后面的事件块;

START-OF-SELECTION开始往后的事件块,如果出现EXIT,则会开始listprocessor(列表处理),并跳转到相应的List输出界面(前提条件是要在退出前已经向屏幕输出内容了,否则也不会跳转);注:END-OF-SELECTION事件块也会被跳过

另外,如果EXIT在循环(DO、WHILE、LOOP)里,只是跳出当前循环而已

如果是在FORM,METHOD中,而非循环中,则退出当前的FORM、METHOD,其作用与RETURN类似

CHECK

CHECK跳转的前提是为假时。

CHECK只是跳出当前事件块,继续下一个事件块的处理,相当于方法的return;

另外,如果CHECK在循环(DO、WHILE、LOOP)里,只是跳出当前循环而已

如果CHECK出现在循环以外,退出的是当前执行的程序块(processing block),例如一个FORM,METHOD,或EVENT。

代码:

Report YH_SEP_15.
DO 5 TIMES.
CHECK SY-INDEX BETWEEN 3 AND 4.
Write / SY-INDEX.
ENDDO.

结果

3
4

LEAVE

LEAVE PROGRAM. 退出整个程序

LEAVE TO TRANSACTION ta

LEAVE LIST-PROCESSING. 从list processor回到dialog processor

LEAVE TO LIST-PROCESSING 控制权从dialog processor转交给list processor

LEAVE { SCREEN | {TO SCREEN dynnr} }