Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Symplify a calendar loop code

Former Member
0 Likes
841

Hi experts,

Could anyone help me to symplify this following code ?

LOOP AT itab.
    IF itab-daytype01 EQ 1.
      itab-daytext01 = 'holi'.
      MODIFY itab.
    ENDIF.
    IF itab-daytype02 EQ 1.
      itab-daytext02 = 'holi'.
      MODIFY itab.      
    ENDIF.
    IF itab-daytype03 EQ 1.
      itab-daytext03 = 'holi'.
      MODIFY itab.      
    ENDIF.
    .
    .
    .
    IF itab-daytype31 EQ 1.
      itab-daytext31 = 'holi'.
      MODIFY itab.
    ENDIF.           
  ENDLOOP.

A calendar loops 12 times for 12 months and in each loop there are 31 days. For each day I need to change the daytext value due to the daytype value...

Thanks a lot,

Nata

1 ACCEPTED SOLUTION
Read only

SuhaSaha
Product and Topic Expert
Product and Topic Expert
0 Likes
729

Internal tables with header lines & VARYING addition for DO loops are obsolete

You can try something like this

DATA: 
gv_index TYPE numc2,
gv_fieldname TYPE string.

FIELD-SYMBOLS: 
<wa> LIKE LINE OF itab,
<gv_daytype> TYPE ANY,
<gv_daytext> TYPE ANY.

LOOP AT itab ASSIGNING <wa>.

  CLEAR gv_index. "Reset the index before each iteration

  DO 31 TIMES.

    gv_index = gv_index + 1.

    CONCATENATE 'DAYTYPE' gv_index INTO gv_fieldname.
    ASSIGN COMPONENT gv_fieldname OF STRUCTURE <wa> TO <gv_daytype>.
    IF sy-subrc NE 0. EXIT. ENDIF.

    IF <gv_daytype> = 1.
      CLEAR gv_fieldname.
      CONCATENATE 'DAYTEXT' gv_index INTO gv_fieldname.
      ASSIGN COMPONENT gv_fieldname OF STRUCTURE <wa> TO <gv_daytext>.
      IF sy-subrc NE 0. CONTINUE. ENDIF.
      <gv_daytext> = 'holi'.
    ENDIF.

  ENDDO.

ENDLOOP.

4 REPLIES 4
Read only

JackGraus
Active Contributor
0 Likes
729
loop at itab assigning <itab>.
  do 31 times
    varying daytype from <itab>-daytype01 next <itab>-daytype02
    varying daytext from <itab>-daytext01 next <itab>-daytext02.
    check daytype eq 1.
    daytext = 'holi'.
  enddo.
endloop.
Read only

Former Member
0 Likes
729

Within your loop you could create another loop which will go over the compnents of your itab synamicaly.

Here is an example from SAP documentation :

DATA spfli_wa TYPE spfli.

FIELD-SYMBOLS: <wa> TYPE ANY,

<comp> TYPE ANY.

ASSIGN spfli_wa TO <wa>.

SELECT SINGLE *

FROM spfli

INTO spfli_wa

WHERE carrid = 'LH' AND

connid = '400'.

WHILE sy-subrc = 0.

ASSIGN COMPONENT sy-index OF STRUCTURE <wa> TO <comp>.

WRITE / <comp>.

ENDWHILE.

Read only

SuhaSaha
Product and Topic Expert
Product and Topic Expert
0 Likes
730

Internal tables with header lines & VARYING addition for DO loops are obsolete

You can try something like this

DATA: 
gv_index TYPE numc2,
gv_fieldname TYPE string.

FIELD-SYMBOLS: 
<wa> LIKE LINE OF itab,
<gv_daytype> TYPE ANY,
<gv_daytext> TYPE ANY.

LOOP AT itab ASSIGNING <wa>.

  CLEAR gv_index. "Reset the index before each iteration

  DO 31 TIMES.

    gv_index = gv_index + 1.

    CONCATENATE 'DAYTYPE' gv_index INTO gv_fieldname.
    ASSIGN COMPONENT gv_fieldname OF STRUCTURE <wa> TO <gv_daytype>.
    IF sy-subrc NE 0. EXIT. ENDIF.

    IF <gv_daytype> = 1.
      CLEAR gv_fieldname.
      CONCATENATE 'DAYTEXT' gv_index INTO gv_fieldname.
      ASSIGN COMPONENT gv_fieldname OF STRUCTURE <wa> TO <gv_daytext>.
      IF sy-subrc NE 0. CONTINUE. ENDIF.
      <gv_daytext> = 'holi'.
    ENDIF.

  ENDDO.

ENDLOOP.

Read only

Former Member
0 Likes
729

Thanks Suhas very much !