gpt4 book ai didi

abap - 如何在动态内部表上循环?

转载 作者:行者123 更新时间:2023-12-04 01:48:59 24 4
gpt4 key购买 nike

我正在 ZXMBCU10 上进行增强植入,它在执行路径下的几个级别的自定义程序中调用。在 ZXMBCU10 内部,我想访问父程序中的一个表,我在下面的方法中进行;

  1. 声明父程序名;

    DATA: ex_tbl_name TYPE char100 VALUE '(ZPROGRAM)G_TAB'.

  2. 通过字段符号赋值获取值。

    FIELD-SYMBOLS: <fs> TYPE any.

    ASSIGN (ex_tbl_name) TO <fs>.

然后我检查是否成功分配(这是真的)。​​

IF <fs> IS ASSIGNED.

Accessing parent table

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

我尝试了 LOOP 和 READ TABLE,但得到了以下结果;

Loop and Read table sample

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

循环;

内表“<FS>”没有标题行 - 添加的内容之一“INTOwa”,“分配”,“引用”,“不运输任何字段”。需要。

阅读表格;

您不能对表使用显式或隐式索引操作输入“HASHED TABLE”或“ANY TABLE”。 “<FS> ”的类型为“ANY TABLE”。有可能之前没有指定“TABLE”添加“<FS>”。

最佳答案

循环在

关于LOOP AT的错误(内部表“<FS>”没有标题行 - 需要添加“INTO wa”、“ASSIGNING”、“REFERENCE INTO”、“TRANSPORTING NO FIELDS”之一),是不是't 表示 LOOP AT 的“结果”部分即 ASSIGNING, REFERENCE INTO...(如消息中所述)。

对于字段符号,LOOP AT 单独 总是无效的,如果它是变量而不是字段符号,则它已过时,因为这将暗示使用标题行。

LOOP AT <fs>. " always invalid !

有效语法如下:您必须将字段符号声明为内部表(至少包含单词 TABLE ,或引用“表类型”),支持任何类别的内部表LOOP AT(散列、排序、标准),因此您可以使用 TYPE ANY TABLE :

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.

阅读表格

关于READ TABLE的错误(您不能对类型为“HASHED TABLE”或“ANY TABLE”的表使用显式或隐式索引操作。“<FS>”的类型为“ANY TABLE”。可能未添加“TABLE”在“<FS>”之前指定)是您使用了READ TABLE ... INDEX ...其 INDEX 意味着它只能与类别为 SORTED 的内部表一起使用或 STANDARD .

由于 ANY TABLE 和 READ TABLE INDEX 的组合,下一个代码无效,因为 <FS>最终可能是一个哈希内部表(谁知道),那么 READ TABLE INDEX 将失败,因此编译器错误:

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 !

解决方案:使用READ TABLE <fs> INDEX ...您可以将字段符号声明为 SORTED、STANDARD 或 INDEX(后者是对应于 SORTED 和 STANDARD 的通用名称)。

此代码有效:

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.

当然,这里假设G_TAB是一个“索引”表,而不是哈希表!

PS:在您的代码中,您使用了 INTO DATA(lv_fs)但通常如果你有一个通用的内部表 ASSIGNING是首选。

关于abap - 如何在动态内部表上循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54181729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com