Поиск…
замечания
При переходе по внутренним таблицам обычно предпочтительнее использовать ASSIGN для символа поля, а не для цикла INTO в рабочей области. Присвоение символов поля просто обновляет их ссылку, чтобы указать на следующую строку внутренней таблицы во время каждой итерации, тогда как использование INTO приводит к тому, что строка таблицы будет скопирована в рабочую область, что может быть дорогостоящим для таблиц с длинными / большими.
Внутренний стол
LOOP AT itab INTO wa.
ENDLOOP.
FIELD-SYMBOLS <fs> LIKE LINE OF itab.
LOOP AT itab ASSIGNING <fs>.
ENDLOOP.
LOOP AT itab ASSIGNING FIELD-SYMBOL(<fs>).
ENDLOOP.
LOOP AT itab REFERENCE INTO dref.
ENDLOOP.
LOOP AT itab TRANSPORTING NO FIELDS.
ENDLOOP.
Условный цикл
Если в цикл должны быть взяты только строки, соответствующие определенному условию, добавление WHERE может быть добавлено.
LOOP AT itab INTO wa WHERE f1 = 'Max'.
ENDLOOP.
Пока цикл
ABAP также предлагает обычный WHILE -Loop, который выполняется до тех пор, пока данное выражение не станет равно false. Системный sy-index будет увеличен для каждого шага цикла.
WHILE condition.
* do something
ENDWHILE
Do Loop
Без какого-либо дополнения DO -Loop работает бесконечно или, по крайней мере, до тех пор, пока он не будет явно удален изнутри. Системный sy-index будет увеличен для каждого шага цикла.
DO.
* do something... get it?
* call EXIT somewhere
ENDDO.
Добавление TIMES предлагает очень удобный способ повторить код ( amount представляет значение типа i ).
DO amount TIMES.
* do several times
ENDDO.
Общие команды
Чтобы разбить петли, можно использовать команду EXIT .
DO.
READ TABLE itab INDEX sy-index INTO DATA(wa).
IF sy-subrc <> 0.
EXIT. "Stop this loop if no element was found
ENDIF.
" some code
ENDDO.
Чтобы перейти к следующему шагу цикла, можно использовать команду CONTINUE .
DO.
IF sy-index MOD 1 = 0.
CONTINUE. " continue to next even index
ENDIF.
" some code
ENDDO.
CHECK является CONTINUE с условием. Если условие окажется ложным , будет выполнено CONTINUE . Другими словами: цикл будет выполняться только с шагом, если условие истинно .
Этот пример CHECK ...
DO.
" some code
CHECK sy-index < 10.
" some code
ENDDO.
... эквивалентно ...
DO.
" some code
IF sy-index >= 10.
CONTINUE.
ENDIF.
" some code
ENDDO.