程序第22行出现以下语法错误:
该声明不可访问。
为什么以及如何解决?
代码:
{errorCode: 2147951872, message: "", code: 2147951872, innerror: undefined}
答案 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
向程序发出信号,表明程序下方没有任何内容需要执行。因此,如果那里有代码,编译器将显示语法错误。
无论如何,在代码之间放置子例程不是一个好主意,因为这会造成混乱并且难以阅读。只要您提供格式的名称易于理解,代码就会更具可读性。您始终可以通过单击它们来快速进入子例程的代码。