Ricerca…
Osservazioni
Quando si esegue il looping su tabelle interne, è generalmente preferibile ASSIGN a un simbolo campo piuttosto che eseguire il ciclo INTO un'area di lavoro. L'assegnazione dei simboli di campo aggiorna semplicemente il loro riferimento per puntare alla riga successiva della tabella interna durante ogni iterazione, mentre usando INTO risulta la linea della tabella che viene copiata nell'area di lavoro, che può essere costosa per le tabelle lunghe / larghe.
Loop tavolo interno
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.
Ciclo condizionale
Se solo le linee che corrispondono a una determinata condizione dovrebbero essere inserite nel ciclo, aggiungere WHERE può essere aggiunto.
LOOP AT itab INTO wa WHERE f1 = 'Max'.
ENDLOOP.
Mentre Loop
ABAP offre anche il convenzionale WHILE -Loop che viene eseguito fino a quando l'espressione data restituisce false. L' sy-index sistema del campo verrà aumentato per ogni passo del ciclo.
WHILE condition.
* do something
ENDWHILE
Fai il ciclo
Senza alcuna aggiunta, DO -Loop funziona all'infinito o almeno fino a quando non viene esplicitamente rimosso dall'interno. L' sy-index sistema del campo verrà aumentato per ogni passo del ciclo.
DO.
* do something... get it?
* call EXIT somewhere
ENDDO.
L'aggiunta di TIMES offre un modo molto conveniente per ripetere il codice (l' amount rappresenta un valore di tipo i ).
DO amount TIMES.
* do several times
ENDDO.
Comandi generali
Per interrompere i loop, è possibile utilizzare il comando 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.
Per saltare alla fase successiva del ciclo, è possibile utilizzare il comando CONTINUE .
DO.
IF sy-index MOD 1 = 0.
CONTINUE. " continue to next even index
ENDIF.
" some code
ENDDO.
L'istruzione CHECK è CONTINUE con condizioni. Se la condizione risulta falsa , verrà eseguito CONTINUE . In altre parole: il ciclo proseguirà con il passo solo se la condizione è vera .
Questo esempio di CHECK ...
DO.
" some code
CHECK sy-index < 10.
" some code
ENDDO.
... è equivalente a ...
DO.
" some code
IF sy-index >= 10.
CONTINUE.
ENDIF.
" some code
ENDDO.