Обработка внутренней строки таблицы по индексу - PullRequest
0 голосов
/ 30 мая 2018

Как я могу дать полю значение с определенным индексом.Или, если поле не начальное, я хочу изменить значение этого индекса. Пример:

TYPES : BEGIN OF itab,
         number1 type n,
endof itab.

lv_tabix = sy-tabix.

itab-number1 index lv-tabix = '1'.

Ответы [ 4 ]

0 голосов
/ 30 мая 2018

Это?

TYPES: begin OF ty_itab,
       number1 TYPE n,
END OF ty_itab.

DATA: itab TYPE TABLE OF ty_itab,
      wa_itab like line of itab,
      lv_tabix TYPE sy-tabix.

APPEND wa_itab TO itab.

lv_tabix = sy-tabix.
READ TABLE itab INTO wa_itab INDEX lv_tabix.
wa_itab-number1 = '1'.
MODIFY itab FROM wa_itab INDEX lv_tabix.

BREAK-POINT.

debug

0 голосов
/ 30 мая 2018

Проверьте подсказку предложения MODIFY (itab): https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abapmodify_itab_single.htm

DATA: workarea TYPE your_type.

workarea-field = value.
"modifying for an index
MODIFY your_table INDEX your_index FROM workarea TRANSPORTING field.
"modifying for a condition
MODIFY your_table FROM workarea TRANSPORTING field WHERE your_condition.

Или вы можете использовать ПОЛЕВЫЕ СИМВОЛЫ, как было указано до меня Антоном.

0 голосов
/ 30 мая 2018

Просто используйте табличные выражения для этого, если вы находитесь в последних выпусках ABAP:

TRY. 

    itab[ lv-tabix ]-number1  = '1'.

 CATCH cx_sy_itab_line_not_found INTO DATA(exc). 
 cl_demo_output=>display( exc->get_text( ) ). 
ENDTRY. 
0 голосов
/ 30 мая 2018

Вы должны прочитать таблицу по индексу и назначить целевую строку первому символу поля:

READ TABLE {your itab} INDEX lv_tabix ASSIGNING FIELD-SYMBOL(<fs>).
<fs>-number1 = '1'.

В зависимости от версии вашего сервера может потребоваться отдельное объявление символа поля:

 FIELD-SYMBOLS <fs> TYPE {your table line type}

Проверьте READ TABLE онлайн справку https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-US/abapread_table_outdesc.htm#!ABAP_ALTERNATIVE_2@2@

...