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

时间:2019-07-30 13:31:23

标签: sap abap

程序第22行出现以下语法错误:

  

该声明不可访问。

为什么以及如何解决?

代码:

{errorCode: 2147951872, message: "", code: 2147951872, innerror: undefined}

2 个答案:

答案 0 :(得分:1)

您的问题是;您可以在子例程后编写任何代码。将第22行的代码移到 FORM 指令之前。

答案 1 :(得分:-1)

要使其正常工作,请将这部分代码放入主程序中:(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.

或者,根本不使用包含,而在程序中仅包含以下代码:

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向程序发出信号,表明程序下方没有任何内容需要执行。因此,如果那里有代码,编译器将显示语法错误。

无论如何,在代码之间放置子例程不是一个好主意,因为这会造成混乱并且难以阅读。只要您提供格式的名称易于理解,代码就会更具可读性。您始终可以通过单击它们来快速进入子例程的代码。