You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

ABAP代码第22行出现“Statement is not accessible”语法错误的原因及解决方法

ABAP语法错误:Statement is not accessible 原因及解决办法

错误原因

这个Statement is not accessible错误说白了就是:你的第22行WRITE语句永远不会被程序执行到,编译器一眼就看出来了,所以给你报了这个错。

具体到你的代码逻辑:
ABAP是事件驱动的编程语言,主程序里的可执行代码必须放在指定的事件块(比如START-OF-SELECTIONEND-OF-SELECTION)内部。你的代码中,START-OF-SELECTION事件块包含了DO循环和子程序调用,当这个事件块里的代码执行完毕后,程序的主执行流程就直接终止了——后面的WRITE语句不在任何事件块里,程序根本不会“走到”这里,所以这条语句完全是“无效”的,编译器就会提示这个错误。

另外顺便提一句:FORM子程序的定义位置没问题(放在主事件块之后),但它不影响主流程的执行逻辑,主流程还是在START-OF-SELECTION结束后就停了。

解决办法

把这条WRITE语句放到程序能执行到的事件块里就行,有两种常用的方案:

方案1:移到START-OF-SELECTION事件块内部

把WRITE放在ENDDO后面,这样循环执行完就会打印这串字符:

REPORT zabap01_sue02.
START-OF-SELECTION.
DO 3 TIMES.
PERFORM call_subr01.
ENDDO .
WRITE: /'1111111111111111111111111'. "<========= 移到这里
FORM call_subr01.
DATA: lv_val TYPE I.
lv_val = lv_val + 1.
WRITE:/ 'local variable', lv_val.
ENDFORM.

方案2:放到END-OF-SELECTION事件块

如果你想在所有主事件执行完后再打印,可以单独加一个END-OF-SELECTION事件块,把WRITE放进去:

REPORT zabap01_sue02.
START-OF-SELECTION.
DO 3 TIMES.
PERFORM call_subr01.
ENDDO .
FORM call_subr01.
DATA: lv_val TYPE I.
lv_val = lv_val + 1.
WRITE:/ 'local variable', lv_val.
ENDFORM.
END-OF-SELECTION.
WRITE: /'1111111111111111111111111'. "<========= 放到这个事件块里

这样修改后,编译器就不会再报错,这条WRITE语句也能正常执行了。

内容的提问来源于stack exchange,提问作者zhang sue

火山引擎 最新活动