从ABAP结构中选择字段值

时间:2020-03-05 14:59:31

标签: sap abap

我正在尝试从表格行中的字段中提取值。但是我无法访问它,因为我的表没有标题行。 我有以下代码:

DATA: t2            TYPE TABLE OF komlfp,
      go_settlement TYPE REF TO cl_wb2_rebate_settlement_2.
TRY.

  CREATE OBJECT go_settlement.

  go_settlement->settlement(
                   EXPORTING
                     iv_testrun        = 'X'
                     iv_bldat          = sy-datum
                     iv_wfdat          = sy-datum
                     is_contract       = wa_view
                     is_contract_first = wa_view
                   IMPORTING
                     et_komlfk         = t1
                     et_komlfp         = t2 ).

CATCH cx_wb2_rebates.
ENDTRY.

我现在想要的是使用值 t2-kzwi6d ,但是我总是得到:

“ T2”是没有标题行的表,因此没有组件 称为“ KZWI6D”。

我已经尝试过用标题行声明表,但是当我尝试这样做时,我得到了:

OO上下文不再支持带有标题的表。

有人可以帮我吗?

谢谢

1 个答案:

答案 0 :(得分:4)

您将t2创建为没有标题行的表,因此程序无法识别任何列名。

一种解决方案可能是将其定义为带有标题行的表,尽管这种方法被认为已过时且过时。

DATA: t2 TYPE STANDARD TABLE OF komlfp WITH HEADER LINE.

另一个选择是动态获取字段值。但是然后您必须确保它确实存在并且分配有效,因此必须进行更多的错误管理。

DATA: t2 TYPE STANDARD TABLE OF komlfp.

FIELD-SYMBOLS: <t2_line> LIKE LINE OF t2,
               <kzwi6d>  TYPE kzwi6.

LOOP AT t2 ASSIGNING <t2_line>.
  ASSIGN COMPONENT 'KZWI6D' OF STRUCTURE <t2_line> TO <kzwi6d>.
ENDLOOP.

编辑:正如Sandra所指出的,您不必动态地进行操作,也可以像这样直接获取值

DATA: t2 TYPE STANDARD TABLE OF komlfp.

FIELD-SYMBOLS: <t2_line> LIKE LINE OF t2.

LOOP AT t2 ASSIGNING <t2_line>.
  " you now have access to the value using <t2_line>-kzwi6d
ENDLOOP.