Тройничок: 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