Buscar..


Observaciones

Cuando se realiza un bucle sobre tablas internas, generalmente es preferible ASSIGN a un símbolo de campo en lugar de un bucle INTO un área de trabajo. La asignación de símbolos de campo simplemente actualiza su referencia para apuntar a la siguiente línea de la tabla interna durante cada iteración, mientras que el uso de INTO hace que la línea de la tabla se copie en el área de trabajo, lo que puede ser costoso para las tablas largas / anchas.

Lazo de tabla 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.

Bucle condicional

Si solo las líneas que coinciden con una determinada condición deben incluirse en el bucle, la adición WHERE se puede agregar.

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

Mientras bucle

ABAP también ofrece el WHILE -Loop convencional que se ejecuta hasta que la expresión dada se evalúa como falsa. El sy-index sistema del campo del sistema se incrementará para cada paso del bucle.

WHILE condition.
* do something
ENDWHILE 

Hacer bucle

Sin ninguna adición, el DO Loop se ejecuta sin fin o al menos hasta que sale explícitamente del interior. El sy-index sistema del campo del sistema se incrementará para cada paso del bucle.

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

La adición de TIMES ofrece una manera muy conveniente de repetir el código (la amount representa un valor de tipo i ).

DO amount TIMES.
* do several times
ENDDO.

Comandos generales

Para romper bucles, se puede usar el 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.

Para saltar al siguiente paso del bucle, se puede usar el comando CONTINUE .

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

La sentencia CHECK es un CONTINUE con condición. Si la condición resulta ser falsa , se ejecutará CONTINUE . En otras palabras: el bucle solo continuará con el paso si la condición es verdadera .

Este ejemplo de CHECK ...

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

... es 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow