READ TABLE(函数方法的返回)分配字段符号奇怪的语法错误

2020-09-06 17:02发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)你好 我在读取内部表时遇到语法...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我在读取内部表时遇到语法错误,该内部表是功能方法的返回并将其分配给字段符号。 与LOOP相同的指令不会给我语法错误。

有人知道为什么READ TABLE出现语法错误吗?

示例:

 *&---------------------------------------------  ------------------------ *
 *&报告ZFFS_SYNTAX_ERROR
 *&------------------------------------------------  --------------------- *
 *&
 *&------------------------------------------------  --------------------- *
 报告zffs_syntax_error。

 类别lcl_ffs_c1定义
 创建公共
 最后。

  公共部分。

  类别方法get_it返回值(et_it)类型suid_tt_usr01。

 ENDCLASS。

 类别lcl_ffs_c1的实现。

  方法get_it。
  终结法。

 ENDCLASS。

 数据lt_it类型suid_tt_usr01。

 选择开始。

 *:示例1A:确定,没有语法错误。
  在lcl_ffs_c1 => get_it()处循环传送bname并非初始值的任何字段。
  结局。

 *:示例1B:好的,没有语法错误。
  读取表lcl_ffs_c1 => get_it()传输没有字段的索引1。

 *:示例2A:确定,没有语法错误。
  环回lcl_ffs_c1 => get_it()分配字段符号()。
  结局。

 *:示例2B:确定,没有语法错误。
  读取表lcl_ffs_c1 => get_it()放入数据(ls_it)索引1。

 *:示例2C:确定,没有语法错误。
  读取表lt_it ASSIGNING FIELD-SYMBOL()索引1。

 *:示例2D:否,语法错误!
  读取表lcl_ffs_c1 => get_it()分配字段符号()索引1。

请注意,示例2B和2D与READ TABLE的结果存储方式(INTO VS ASSIGNING)几乎相同。

谢谢。

2条回答
哎,真难
2020-09-06 17:24 .采纳回答

已记录为行为。 读取表上的文档说:

" 如果将内部表指定为函数方法,构造函数表达式或表表达式的返回值或结果,则该值仅在执行语句时可用。 不再可以访问内部表。"

在读取表-结果-分配文档的一部分中,您可以找到:

" 如果将itab指定为函数方法,构造函数表达式或表表达式的返回值或结果,则进行指定,因为一旦执行语句,该值就不再存在。"

博客中讨论了类似主题:

https://blogs.sap.com/2018/06/21/abap-traps-lifetime-of-functional-operand-values/

编辑:也请尝试看看 您的示例2A。 字段符号仅在LOOP内部分配。 并且在LOOP之后,您将无法使用它,因为它无法指向任何itab。

一周热门 更多>