我正在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,但是得到了以下内容;
在此处添加了“读取表和循环”,只是为了进行语法检查
LOOP;
内部表“ <FS>
”没有标题行-其中之一是“ INTO”
wa”,“分配”,“参考”,“运输无田地”。
必填。
阅读表;
您不能对具有以下内容的表使用显式或隐式索引操作
类型“哈希表”或“任何表”。 “ <FS>
”的类型为“ ANY TABLE”。
可能之前未指定“ TABLE”添加项
“ <FS>
”。
答案 0 :(得分:2)
将字段符号类型更改为
any table.
代替:
any.
答案 1 :(得分:2)
LOOP AT
关于LOOP AT
(内部表“ <FS>
”的错误没有标题行-附加项之一“ INTO wa”,“ ASSIGNING”,“ REFERENCE INTO”,“ TRANSPORTING NO字段),是因为您未指明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 “。可能未在” {<FS>
“ 之前指定” TABLE“附加项是因为您使用了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
是首选。