Выбрать значение поля из структуры ABAP - PullRequest
1 голос
/ 05 марта 2020

Я пытаюсь забрать значение из поля, которое находится в строке таблицы. Но я не могу получить к нему доступ, потому что в моей таблице нет строки заголовка. У меня есть следующий код:

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 Ответ

4 голосов
/ 05 марта 2020

Вы создали 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.

Редактировать: Как указала Сандра, вам не нужно делать он динамически и может просто получить значение напрямую, как это :

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.
...