Вот один для вас.Хотя такая языковая конструкция не имеет большого смысла, я хотел бы знать, почему вложенные LOOP AT SCREEN
вызывают бесконечный цикл (рекурсия?).
Давайте рассмотрим следующую простую программу.
REPORT yyy.
PARAMETERS:
p_x1 TYPE abap_bool.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
BREAK-POINT.
ENDLOOP.
Оператор BREAK-POINT
будет выполнен только 4 раза.Это приводит к предположению, что такой вложенный цикл будет выполняться 16 раз.Вместо этого упомянутая ниже программа работает вечно и заканчивается исключением времени ожидания.
REPORT yyy.
PARAMETERS:
p_x1 TYPE abap_bool.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
LOOP AT SCREEN.
ASSERT 1 = 1.
ENDLOOP.
ENDLOOP.
Похоже, что вложение LOOP AT SCREEN
вызывает либо бесконечный цикл, либо какую-то бесконечную рекурсию.
Почемуэто так?Это где-то задокументировано?Расширенная проверка не сообщает ничего о цикле.То же самое относится и к Code Inspector.
EDIT
Я также проверил, является ли это общей проблемой для внутренних таблиц со строкой заголовка.Кажется, нет.
REPORT YYY.
DATA: gt_t000 TYPE t000 OCCURS 10 WITH HEADER LINE.
START-OF-SELECTION.
SELECT * FROM t000
INTO TABLE gt_t000[].
LOOP AT gt_t000.
LOOP AT gt_t000.
WRITE / gt_t000-mandt.
ENDLOOP.
ENDLOOP.