点击此处---> 群内免费提供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)几乎相同。
谢谢。
已记录为行为。 读取表上的文档说:
" 如果将内部表指定为函数方法,构造函数表达式或表表达式的返回值或结果,则该值仅在执行语句时可用。 不再可以访问内部表。"
在读取表-结果-分配文档的一部分中,您可以找到:
" 如果将itab指定为函数方法,构造函数表达式或表表达式的返回值或结果,则进行指定,因为一旦执行语句,该值就不再存在。"
博客中讨论了类似主题:
https://blogs.sap.com/2018/06/21/abap-traps-lifetime-of-functional-operand-values/
编辑:也请尝试看看 您的示例2A。 字段符号仅在LOOP内部分配。 并且在LOOP之后,您将无法使用它,因为它无法指向任何itab。
Hi Tomas,
感谢您提供文档报价(我想我想念了)和博客文章。
问题已回答。
致谢
一周热门 更多>