我正在 ZXMBCU10 上进行增强植入,它在执行路径下的几个级别的自定义程序中调用。在 ZXMBCU10 内部,我想访问父程序中的一个表,我在下面的方法中进行;
声明父程序名;
DATA: ex_tbl_name TYPE char100 VALUE '(ZPROGRAM)G_TAB'.
通过字段符号赋值获取值。
FIELD-SYMBOLS: <fs> TYPE any.
ASSIGN (ex_tbl_name) TO <fs>.
然后我检查是否成功分配(这是真的)。
IF <fs> IS ASSIGNED.
我遇到的问题是如何读取 <fs>
中的数据字段符号。
我尝试了 LOOP 和 READ TABLE,但得到了以下结果;
这里添加了 Read Table 和 Loop 只是为了进行语法检查
循环;
内表“<FS>
”没有标题行 - 添加的内容之一“INTO
wa”,“分配”,“引用”,“不运输任何字段”。
需要。
阅读表格;
您不能对表使用显式或隐式索引操作
输入“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/