Tuesday, November 9, 2021

FOR Operator

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.

TYPESBEGIN OF ty_mara,
         matnr TYPE matnr,
         mtart TYPE mtart,
         matkl TYPE matkl,
         meins TYPE meins,
       END OF ty_mara.

DATAlt_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 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

TYPESBEGIN OF ty_mara,
         matnr TYPE matnr,
         mtart TYPE mtart,
         matkl TYPE matkl,
         meins TYPE meins,
       END OF ty_mara.

DATAlt_mara TYPE STANDARD TABLE OF ty_mara.

RANGESlr_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.

TYPESBEGIN OF ty_mara,
         matnr TYPE matnr,
         mtart TYPE mtart,
         meins TYPE meins,
         maktx TYPE maktx,
         mtbez TYPE mtbez,
       END OF ty_mara.

DATAlt_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 ).

TYPESBEGIN OF ty_mara,
         matnr TYPE char255,
         mtart TYPE mtart,
         meins TYPE meins,
       END OF ty_mara.

DATAlt_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.







SALV 8: Adding Custom PF STATUS in ALV

Note: First create Custom PF Status using below Link: https://sapabapc.blogspot.com/2022/08/create-custom-pf-status.html *&-------------...