Почему вложенный цикл LOOP AT SCREEN вызывает бесконечный цикл / рекурсию? - PullRequest
3 голосов
/ 25 июня 2019

Вот один для вас.Хотя такая языковая конструкция не имеет большого смысла, я хотел бы знать, почему вложенные 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.
...