我编写了一小段代码,它根据另一个内部表 it_alv_to_check 中的值更新 it_alv 中的数据。在执行 ELSE 语句后的代码时,我收到错误:尚未分配字段符号。我首先在使用 READ TABLE 语句时动态分配它。如何确保即使sy-subrc <> 0,字段符号也会被赋值?
FIELD-SYMBOLS: <to_check> LIKE LINE OF it_alv.
LOOP AT it_alv ASSIGNING FIELD-SYMBOL(<fs_alv_2>).
READ TABLE it_alv_to_check ASSIGNING <to_check> WITH KEY belnr = <fs_alv_2>-belnr.
IF sy-subrc = 0.
<fs_alv_2>-statement_year = <to_check>-statement_year.
<fs_alv_2>-laufi = <to_check>-laufi.
<fs_alv_2>-user_field_1 = <to_check>-user_field_1.
<fs_alv_2>-stceg = <to_check>-stceg.
<fs_alv_2>-name1 = <to_check>-name1.
<fs_alv_2>-monat_from = <to_check>-monat_from.
ELSE.
<fs_alv_2>-statement_year = <to_check>-statement_year.
<fs_alv_2>-laufi = <to_check>-laufi.
<fs_alv_2>-user_field_1 = <to_check>-user_field_1.
<fs_alv_2>-stceg = <to_check>-stceg.
<fs_alv_2>-name1 = <to_check>-name1.
<fs_alv_2>-monat_from = <to_check>-monat_from.
ENDIF.
ENDLOOP.
在这种情况下,您无法分配字段符号。您使用
READ TABLE
语句读取内部表,如果使用给定键(即 sy-subrc = 0
)找到 条目,找到的表行将被 分配给字段符号 并且字段符号指向表记忆中的一行。
否则,如果未找到表行,则没有可为其分配字段符号的条目,并且字段符号保持不变或初始。在这种情况下,您不能依赖它被分配(它可以被分配,但指向错误的条目)或假设分配本身(保持初始状态,因为它之前未被分配)。
更多信息:阅读表格,结果...分配
根据您想要实现的目标,您可以在 else 分支中分配一些默认值或实现一些其他逻辑来处理这种情况。