Recherche…


Remarques

Lorsque le bouclage sur les tables internes, il est généralement préférable de ASSIGN à un symbole de champ plutôt que la boucle INTO une zone de travail. L'affectation de symboles de champ met simplement à jour leur référence pour pointer vers la ligne suivante de la table interne pendant chaque itération, tandis que l'utilisation de INTO entraîne la copie de la ligne de la table dans la zone de travail, ce qui peut être coûteux pour les tables longues / larges.

Boucle de table interne

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.

Bouclage conditionnel

Si seules les lignes correspondant à une certaine condition doivent être insérées dans la boucle, vous pouvez ajouter WHERE .

LOOP AT itab INTO wa WHERE f1 = 'Max'.
ENDLOOP.

En boucle

ABAP propose également le traditionnel WHILE -Loop qui s'exécute jusqu'à ce que l'expression donnée soit évaluée à false. Le champ système sy-index sera augmenté pour chaque étape de la boucle.

WHILE condition.
* do something
ENDWHILE 

Do Loop

Sans aucun ajout, DO -Loop s'exécute sans fin ou du moins jusqu'à ce qu'il soit explicitement sorti de l'intérieur. Le champ système sy-index sera augmenté pour chaque étape de la boucle.

DO.
* do something... get it?
* call EXIT somewhere
ENDDO.

L'ajout de TIMES offre un moyen très pratique de répéter le code (le amount représente une valeur de type i ).

DO amount TIMES.
* do several times
ENDDO.

Commandes Générales

Pour casser des boucles, la commande EXIT peut être utilisée.

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.

Pour passer à l'étape suivante, vous pouvez utiliser la commande CONTINUE .

DO.
    IF sy-index MOD 1 = 0.
        CONTINUE. " continue to next even index
    ENDIF.
    " some code  
ENDDO.

L'instruction CHECK est un CONTINUE avec condition. Si la condition s'avère fausse , CONTINUE sera exécuté. En d'autres termes: la boucle ne poursuivra l'étape que si la condition est vraie .

Cet exemple de CHECK ...

DO.
    " some code
    CHECK sy-index < 10.        
    " some code
ENDDO.

... est équivalent à ...

DO.
    " some code
    IF sy-index >= 10.
        CONTINUE.
    ENDIF.
    " some code
ENDDO.


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow