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.


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow