繁体   English   中英

语法错误“语句不可访问”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM