FOR Operator is used to avoid iteration Expression. It means When we need to transfer our data from one internal table to another internal table then we use loops. But using FOR operator we don't have to create loops anymore.
Example 1: Append data from one internal table to another internal table.
TYPES: BEGIN OF ty_mara,
matnr TYPE matnr,
mtart TYPE mtart,
matkl TYPE matkl,
meins TYPE meins,
END OF ty_mara.
DATA: lt_mara TYPE STANDARD TABLE OF ty_mara,
lt_mara_app TYPE STANDARD TABLE OF ty_mara.
SELECT matnr
mtart
matkl
meins
FROM mara INTO TABLE lt_mara UP TO 5 ROWS.
IF sy-subrc EQ 0.
lt_mara_app[] = VALUE #( FOR ls_mara IN lt_mara
( matnr = ls_mara-matnr
mtart = ls_mara-mtart
matkl = ls_mara-matkl
meins = ls_mara-meins ) ).
ENDIF.
Example 2: FOR with WHERE Condition
TYPES: BEGIN OF ty_mara,
matnr TYPE matnr,
mtart TYPE mtart,
matkl TYPE matkl,
meins TYPE meins,
END OF ty_mara.
DATA: lt_mara TYPE STANDARD TABLE OF ty_mara.
RANGES: lr_matnr FOR mara-matnr.
SELECT matnr
mtart
matkl
meins
FROM mara INTO TABLE lt_mara UP TO 10 ROWS
WHERE ( mtart = 'ZHT1' or mtart = 'ZROH' ) .
IF sy-subrc EQ 0.
lr_matnr[] = VALUE #( FOR ls_mara IN lt_mara
WHERE ( mtart = 'ZHT1' )
( sign = 'I' option = 'EQ' low = ls_mara-matnr ) ).
ENDIF.
Example 3: Nested FOR with Multiple table.
TYPES: BEGIN OF ty_mara,
matnr TYPE matnr,
mtart TYPE mtart,
meins TYPE meins,
maktx TYPE maktx,
mtbez TYPE mtbez,
END OF ty_mara.
DATA: lt_mara TYPE STANDARD TABLE OF ty_mara,
lt_mara_add TYPE STANDARD TABLE OF ty_mara.
"&... Fetch material number
SELECT matnr
mtart
meins
FROM mara INTO TABLE lt_mara UP TO 10 ROWS
WHERE ( mtart = 'ZHT1' OR mtart = 'ZROH' ) .
IF sy-subrc EQ 0.
"&... Fetch material type description
SELECT *
FROM t134t INTO TABLE @DATA(lt_t134)
FOR ALL ENTRIES IN @lt_mara
WHERE mtart EQ @lt_mara-mtart.
"&... Fetch material description
SELECT matnr,
spras,
maktx
FROM makt INTO TABLE @DATA(lt_makt)
FOR ALL ENTRIES IN @lt_mara
WHERE matnr EQ @lt_mara-matnr.
IF sy-subrc EQ 0.
"&... Fill final table
lt_mara_add[] = VALUE #( FOR ls_mara IN lt_mara WHERE ( mtart = 'ZROH' )
FOR ls_makt IN lt_makt
WHERE ( matnr = ls_mara-matnr AND spras = sy-langu )
FOR ls_t134 IN lt_t134
WHERE ( mtart = ls_mara-mtart AND spras = sy-langu )
( matnr = ls_mara-matnr
mtart = ls_mara-mtart
meins = ls_mara-meins
maktx = ls_makt-maktx
mtbez = ls_t134-mtbez ) ).
ENDIF.
ENDIF.
Example 4: FOR with PIPE Operator ( Concatenate ).
TYPES: BEGIN OF ty_mara,
matnr TYPE char255,
mtart TYPE mtart,
meins TYPE meins,
END OF ty_mara.
DATA: lt_mara TYPE STANDARD TABLE OF ty_mara,
lt_mara_add TYPE STANDARD TABLE OF ty_mara.
"&... Fetch material number
SELECT matnr
mtart
meins
FROM mara INTO TABLE lt_mara UP TO 10 ROWS
WHERE ( mtart = 'ZHT1' OR mtart = 'ZROH' ) .
IF sy-subrc EQ 0.
"&... Fetch Material description
SELECT matnr,
maktx
FROM makt INTO TABLE @DATA(lt_makt)
FOR ALL ENTRIES IN @lt_mara
WHERE matnr EQ @lt_mara-matnr+0(18)
AND spras EQ @sy-langu.
IF sy-subrc EQ 0.
lt_mara_add[] = VALUE #( FOR ls_mara IN lt_mara
FOR ls_makt IN lt_makt WHERE ( matnr = ls_mara-matnr )
( matnr = |{ ls_mara-matnr } - { ls_makt-maktx }|
mtart = ls_mara-mtart
meins = ls_mara-meins ) ).
ENDIF.
ENDIF.