Как добавить новую строку в itab с выражением VALUE

ABAP 7.40 принес нам новый синтаксис, я все еще разбираюсь в нем.
Я хочу добавить новую строку в существующую таблицу lt_itab. Я нашел обходной путь, добавив пустую строку и выяснив текущую длину таблицы для обновления по индексу, но есть ли более простой способ?

SELECT spfli~carrid, carrname, connid, cityfrom, cityto
  FROM scarr
  INNER JOIN spfli
  ON scarr~carrid = spfli~carrid
  WHERE scarr~carrid = @carrier
  ORDER BY scarr~carrid
  INTO TABLE @DATA(lt_itab).

"How can I simplify the following code part?" 
DATA(lv_idx) = lines( lt_itab ).
APPEND INITIAL LINE TO lt_itab.
lt_itab[ lv_idx + 1 ] = VALUE #( carrid    = 'UA'
                                 carrname  = 'United Airlines'
                                 connid    = 941
                                 cityfrom  = 'Frankfurt'
                                 cityto    = 'San Francisco' ).

person András    schedule 11.01.2017    source источник
comment
Решение @Gert Beukema, пожалуй, самое разумное. Мы хотим использовать новые функции только там, где они действительно полезны. В вашем случае это не так, просто используйте APPEND   -  person    schedule 12.01.2017


Ответы (2)


Это все в документации:

lt_itab = VALUE #( BASE lt_itab ( carrid = ... ) ).
person vwegert    schedule 14.01.2017
comment
Действительно ли BASE является ключевым словом, которое подразумевает исходную таблицу и, следовательно, автоматически может работать со всеми типами таблиц? - person icbytes; 31.01.2017
comment
Я действительно считаю, что документация, на которую я ссылаюсь, относительно ясно говорит об этом: Если указано BASE, содержимое stab присваивается возвращаемому значению до того, как будут вставлены отдельные строки. - person vwegert; 31.01.2017
comment
Мое основное внимание было уделено типам таблиц, я прочту документ подробно. - person icbytes; 31.01.2017

Логика индекса довольно уродлива, вы можете легко использовать добавление ASSIGNING к команде APPEND, чтобы получить символ поля во вновь добавленной строке. Затем вы можете использовать этот символ поля для заполнения записи в таблице, используя ту же конструкцию VALUE, которую вы используете сейчас.

Или вы можете сделать это одним оператором:

APPEND VALUE #( ... ) TO lt_itab.
person Gert Beukema    schedule 11.01.2017
comment
В моих тестовых случаях это также самое быстрое решение - person ; 17.02.2017