[英]Syntax error "Statement is not accessible"
我的程序第 22 行出现以下语法错误:
声明不可访问。
为什么以及如何解决?
代码:
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.
WRITE: /'1111111111111111111111111'. "<========= line 22
*INCLUDE zabap01_sue02_zll.
你的问题是; 您可以在 subrutine 之后编写任何代码。 将第 22 行的代码移动到FORM指令之前。
为了让它工作,你把这部分代码放到你的主程序中:( INCLUDE X
应该一直放在底部)
REPORT zabap01_sue02.
START-OF-SELECTION.
DO 3 TIMES.
PERFORM call_subr01.
ENDDO.
WRITE: /'1111111111111111111111111'.
INCLUDE zabap01_sue02_zll.
然后创建一个包含,其中包含您的功能。
*---------------------------------------------------------------------*
* ZABAP01_SUE02_ZLL
*---------------------------------------------------------------------*
FORM call_subr01.
DATA: lv_val TYPE I.
lv_val = lv_val + 1.
WRITE:/ 'local variable', lv_val.
ENDFORM.
或者,根本不要使用 Include ,只需在您的程序中包含以下代码:
REPORT zabap01_sue02.
START-OF-SELECTION.
DO 3 TIMES.
PERFORM call_subr01.
ENDDO.
WRITE: /'1111111111111111111111111'.
*&---------------------------------------------------------------------*
*& Form call_subr01
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM call_subr01.
DATA: lv_val TYPE i.
lv_val = lv_val + 1.
WRITE:/ 'local variable', lv_val.
ENDFORM. "call_subr01
不能在子程序后编写任何代码的原因是程序的结构。 由于FORMS 只能在被调用时执行,第一个FORM X
向程序发出信号,表明它下面没有任何东西需要再执行。 所以如果那里有代码,编译器会显示一个语法错误。
无论如何,将子程序放在代码之间并不是一个好主意,因为这会令人困惑且难以阅读。 只要您为表单指定的名称易于理解,代码就会更具可读性。 您始终可以通过单击子程序快速转到它们的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.