Тройничок: ABAP-Компилятор, ABAP-Runtime и сортированная таблица
В большинстве случае ABAP-компилятор и ABAP-Runtime показывают один и тот же результат: рекомендации или ошибки.
Однако не в 100% случаев. Сниппет ниже демонстрирует один из таких вариантов. (полный код).
CLASS lcl_app DEFINITION.
PUBLIC SECTION.
METHODS main.
PROTECTED SECTION.
PRIVATE SECTION.
TYPES: BEGIN OF ts_name_val
, key_name TYPE string
, val TYPE string
, add_value TYPE string
, END OF ts_name_val
, tt_name_val TYPE STANDARD TABLE OF ts_name_val WITH DEFAULT KEY
, tt_name_val_srt TYPE SORTED TABLE OF ts_name_val WITH UNIQUE KEY key_name
.
METHODS fill_add_value
CHANGING cs_name_val TYPE ts_name_val.
ENDCLASS.
CLASS lcl_app IMPLEMENTATION.
METHOD main.
DATA lt_name_val TYPE tt_name_val_srt.
FIELD-SYMBOLS <fs_name_val> TYPE ts_name_val.
lt_name_val = value #(
( key_name = 'NUM100' val = 'base_val_100' )
( key_name = 'NUM102' val = 'base_val_102' )
).
LOOP AT lt_name_val ASSIGNING <fs_name_val>.
fill_add_value( CHANGING cs_name_val = <fs_name_val> ).
ENDLOOP.
ENDMETHOD.
METHOD fill_add_value.
cs_name_val-add_value = 'some val'.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
new lcl_app( )->main( ).
Сниппет 1: Компилятор ошибки не выдаст, Runtime остановится в ошибке.
При активации (компиляции) программа не выдаст ошибки, однако в runtime (при запуске) система остановится и будет runtime error: MOVE_TO_LIT_NOTALLOWED_NODATA.

Причина: changing параметр предполагает изменение переменной. А в качестве строки в снипете указана сортированная таблица. В ней нельзя менять порядок строк; и RUNTIME плохо себя чувствует, когда строка передаётся на changing. При этом компилятор, как можно убедиться – не сообщит об ошибке. Кроме того, реального изменения ключа нет (но теоретически могло быть).
А вот код ниже (где мы changing поменяли на ссылку и также внесли изменения) уже будет выполнен без проблем.
REPORT zrep_c8a014_cmplr_vs_runtime.
CLASS lcl_app DEFINITION.
PUBLIC SECTION.
METHODS main.
PROTECTED SECTION.
PRIVATE SECTION.
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
ЗарегистрироватьсяУ вас уже есть учетная запись?
Войти
Обсуждения
2
Комментарий от
Максим Алейников
| 25 декабря 2024, 01:28
TYPES: BEGIN OF ts_name_val
, key_name TYPE string
, val TYPE string
, add_value TYPE string
, END OF ts_name_val
, tt_name_val TYPE STANDARD TABLE OF ts_name_val WITH DEFAULT KEY
, tt_name_val_srt TYPE SORTED TABLE OF ts_name_val WITH UNIQUE KEY key_name
.
Комментарий от
Олег Башкатов
| 25 декабря 2024, 13:26
Максим Алейников 25 декабря 2024, 01:28
Ужасно смотрятся точки и запятые слева.
TYPES: BEGIN OF ts_name_val
, key_name TYPE string
, val TYPE string
, add_value TYPE string
, END OF ts_name_val
, tt_name_val TYPE STANDARD TABLE OF ts_name_val WITH DEFAULT KEY
, tt_name_val_srt TYPE SORTED TABLE OF ts_name_val WITH UNIQUE KEY key_name
.
а если хотите больше узнать, то присоединяйтесь сюда: t.me/ABAPclub