‎2011 Sep 14 2:40 PM
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
‎2011 Sep 14 3:49 PM
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.
‎2011 Sep 14 2:49 PM
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.
‎2011 Sep 14 2:51 PM
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.
‎2011 Sep 14 3:49 PM
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.
‎2011 Sep 15 9:59 AM