Abap 如何在动态内部表中循环?

Abap 如何在动态内部表中循环?,abap,Abap,我正在ZXMBCU10上进行增强植入,它在执行路径的两个级别的自定义程序中调用。在ZXMBCU10内部,我希望访问父程序中的a表,我使用以下方法进行访问 声明父程序名 数据:ex_tbl_name TYPE char100 VALUE'(ZPROGRAM)G_选项卡。 通过字段符号赋值获取值 字段符号:键入任意。 ASSIGN(ex\u tbl\u name)TO. 然后我检查任务是否成功(这是真的) 如果已分配。 我遇到的问题是如何读取字段符号中的数据 我尝试了循环阅读表格,但得到了以下结

我正在ZXMBCU10上进行增强植入,它在执行路径的两个级别的自定义程序中调用。在ZXMBCU10内部,我希望访问父程序中的a表,我使用以下方法进行访问

  • 声明父程序名

    数据:ex_tbl_name TYPE char100 VALUE'(ZPROGRAM)G_选项卡。

  • 通过字段符号赋值获取值

    字段符号:键入任意。

    ASSIGN(ex\u tbl\u name)TO.

  • 然后我检查任务是否成功(这是真的)

    如果已分配。
    

    我遇到的问题是如何读取
    字段符号中的数据

    我尝试了循环阅读表格,但得到了以下结果:

    在这里添加readtable和Loop只是为了进行语法检查

    内部表格“
    ”没有标题行-添加到 wa、“分配”、“引用到”、“不传输字段”为必填项。 必需的

    读取表格

    不能对具有的表使用显式或隐式索引操作 输入“哈希表”或“任意表”。“
    ”的类型为“ANY TABLE”。 可能之前未指定“表”添加

    将字段符号类型更改为

    any table.
    
    而不是:

    any.
    

    关于
    处的
    循环的错误(内部表“
    ”没有标题行-需要添加“到wa”、“分配”、“引用到”、“传输到”字段之一),是因为您没有在
    处指示
    循环的“结果”部分,即分配、引用到。。。(如消息中所述)

    对于字段符号,仅在处循环始终无效,如果它是变量而不是字段符号,则它将被废弃,因为这意味着使用标题行

    LOOP AT <fs>. " always invalid !
    
    读取表格

    关于
    读取表的错误(您不能对类型为“哈希表”或“任何表”的表使用显式或隐式索引操作)。
    “具有类型为“任何表”。可能在“
    ”之前未指定“表”添加项)是因为您使用了
    读取表。。。索引…
    其索引意味着它只能与分类为
    已排序的
    标准的内部表一起使用

    由于任何表和读取表索引的组合,下一个代码无效,因为
    最终可能是哈希内部表(谁知道呢),然后读取表索引将失败,因此编译器错误:

    DATA: ex_tbl_name TYPE char100 VALUE '(ZPROGRAM)G_TAB'.
    FIELD-SYMBOLS: <fs> TYPE ANY TABLE. " <=== impossible with READ TABLE INDEX !
    
    ASSIGN (ex_tbl_name) TO <fs>.
    READ TABLE <fs> ASSIGNING FIELD-SYMBOL(<line>) INDEX 1. " <=== impossible with ANY TABLE !
    
    DATA:ex_tbl_name TYPE char100 VALUE'(ZPROGRAM)G_选项卡'。
    
    字段符号:键入任何表格。“根据您的描述,无法在
    获取您为
    循环显示的消息。您能否提供可编译的代码以便重现您的问题。谢谢。(PS:READ TABLE
    的消息与您的描述相对应)我同意@SandraRossi。关于这个问题没有足够的信息来得出解决方案。@SandraRossi和Umar Abdullah我已经更新了这个问题。希望现在问题更清楚。@isuru谢谢。我的意思只是复制/粘贴你的循环代码到。很抱歉说“可编译”“因为它与您的情况无关,所以请帮助我们重现语法错误。@SandraRossi添加了其余的代码。我编写了Read表和循环,只是为了抛出语法错误。感谢大家的持续关注:)我意识到它解决了AT循环的问题,但没有解决READ TABLE的问题,因为它是一个带有
    索引的访问。因此,如果在同一过程中使用这两个语句,则应使用
    字段符号类型索引表
    。使用这两种方法,我可以引用G_选项卡中的行,但现在问题在于访问它。当我在两种访问方法(循环和读取)中使用-colName调用表中的列时,我得到了语法错误;字段“-MBLNR”未知。它既不在指定的表中,也不由“DATA”语句定义。“数据”声明。该文件确实存在@Isuru add:将结构的组件“MBLNR”分配给FIELD-SYMBOL()。@Isuru事实上问题的标题说明了一切,但您的问题只关注主题的第一部分。你能把问题扩展到主要问题(事实上是全球性的)上吗?我认为有必要补充一个答案来解释整个逻辑,而不需要附带问题的细节。此外,我假设内部表G_选项卡的类型是在ZPROGRAM中静态定义的,因此可以将其类型设置为全局类型(通过接口池类型或DDIC类型),并且可以基于此类型定义字段符号。
    DATA: ex_tbl_name TYPE char100 VALUE '(ZPROGRAM)G_TAB'.
    FIELD-SYMBOLS: <fs> TYPE ANY TABLE.
    
    ASSIGN (ex_tbl_name) TO <fs>.
    LOOP AT <fs> ASSIGNING FIELD-SYMBOL(<line>).
    ENDLOOP.
    
    DATA: ex_tbl_name TYPE char100 VALUE '(ZPROGRAM)G_TAB'.
    FIELD-SYMBOLS: <fs> TYPE ANY TABLE. " <=== impossible with READ TABLE INDEX !
    
    ASSIGN (ex_tbl_name) TO <fs>.
    READ TABLE <fs> ASSIGNING FIELD-SYMBOL(<line>) INDEX 1. " <=== impossible with ANY TABLE !
    
    DATA: ex_tbl_name TYPE char100 VALUE '(ZPROGRAM)G_TAB'.
    FIELD-SYMBOLS: <fs> TYPE INDEX TABLE.
    
    ASSIGN (ex_tbl_name) TO <fs>.
    READ TABLE <fs> ASSIGNING FIELD-SYMBOL(<line>) INDEX 1.