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

Concatenate in loop

Former Member
0 Likes
2,497

Hai,

As Iam using Loop in a Loop iam getting time out dump .

in my internal table itab3 has unique objnr values.

for each objnr i have different status in itab_jcds.

each status column has diff status.

now i need to concatenate the status depending upon same objnr.

LOOP AT ITAB3 INTO WA_ITAB3.

RDX = SY-TABIX.

LOOP AT ITAB_JCDS INTO WA_ITAB_JCDS WHERE OBJNR = WA_ITAB3-OBJNR.

CONCATENATE WA_ITAB_JCDS-STATUS1 WA_ITAB3-STATUS1 INTO WA_ITAB3-STATUS1 SEPARATED BY SPACE.

CONCATENATE WA_ITAB_JCDS-STATUS2 WA_ITAB3-STATUS2 INTO WA_ITAB3-STATUS2 SEPARATED BY SPACE.

CONCATENATE WA_ITAB_JCDS-STATUS3 WA_ITAB3-STATUS3 INTO WA_ITAB3-STATUS3 SEPARATED BY SPACE.

CONCATENATE WA_ITAB_JCDS-STATUS4 WA_ITAB3-STATUS4 INTO WA_ITAB3-STATUS4 SEPARATED BY SPACE.

ENDLOOP.

MODIFY ITAB3 FROM WA_ITAB3 INDEX RDX

TRANSPORTING

OBJNR

STATUS1

STATUS2

STATUS3

STATUS4.

ENDLOOP.

example:

itab3

objnr

123

145

itab_jcds.

objnr stat1 stat2 stat3 stat4

123 nopr mav crtd rel

123 CRTD mnav rel prt

123 rel orsc txt crtd

now i req output as

itab3

objnr stat1 stat2 stat3 stat4.

123 nopr crtd rel mav mnav orsc crtd rel txt rel prt crtd

could u please help.

5 REPLIES 5
Read only

HermannGahm
Product and Topic Expert
Product and Topic Expert
0 Likes
876

Hi Goutam,

2 suggestions:

- change itab_jcds to a sorted table (key objnr) in order to avoid linear search on this table.

- use ASSIGNING on LOOP AT ITAB3 to avoid the MODIFY (instead just change fields

OBJNR STATUS1 STATUS2 STATUS3 STATUS4 directly in the table body with a field-symbol).

this should speed it up a little bit

Kind regards,

Hermann

Read only

Former Member
0 Likes
876

Hi,

Try this way..

SORT ITAB3 BY OBJNR.
SORT ITAB_JCDS BY OBJNR.

LOOP AT ITAB3 INTO WA_ITAB3.
RDX = SY-TABIX.

READ TABLE ITAB_JCDS INTO WA_ITAB_JCDS WITH KEY OBJNR = WA_ITAB3-OBJNR.
                                                                                BINARY SEARCH.
IF SY-SUBRC EQ 0.
LOOP AT ITAB_JCDS INTO WA_ITAB_JCDS FROM SY-TABIX.

IF WA_ITAB_JCDS-OBJNR NE WA_ITAB3-OBJNR.
EXIT.
ENDIF.
CONCATENATE WA_ITAB_JCDS-STATUS1 WA_ITAB3-STATUS1 INTO WA_ITAB3-STATUS1 SEPARATED BY SPACE.

CONCATENATE WA_ITAB_JCDS-STATUS2 WA_ITAB3-STATUS2 INTO WA_ITAB3-STATUS2 SEPARATED BY SPACE.

CONCATENATE WA_ITAB_JCDS-STATUS3 WA_ITAB3-STATUS3 INTO WA_ITAB3-STATUS3 SEPARATED BY SPACE.

CONCATENATE WA_ITAB_JCDS-STATUS4 WA_ITAB3-STATUS4 INTO WA_ITAB3-STATUS4 SEPARATED BY SPACE.

ENDLOOP.

MODIFY ITAB3 FROM WA_ITAB3 INDEX RDX
TRANSPORTING
OBJNR
STATUS1
STATUS2
STATUS3
STATUS4.
ENDIF.
ENDLOOP

Read only

0 Likes
876

Thanking you

Read only

former_member585060
Active Contributor
0 Likes
876

Hi,

Instead of MODIFY statement use Field-symbols,

Is ur wa_itab3-status1 has any value?

Using the above statement be little careful, as what ever value u assig to the field in field symbol it stores.

Try as below

FIELD-SYMBOLS :     <wa_itab3> TYPE ty_itab3.

LOOP AT itab3 ASSIGNING <wa_itab3>.    "  using ASSIGNING <field-symbol> no need of MODIFY statement.

LOOP AT itab_jcds INTO wa_itab_jcds WHERE objnr = <wa_itab3>-objnr.

CONCATENATE wa_itab_jcds-status1 <wa_itab3>-status1 INTO <wa_itab3>-status1 SEPARATED BY SPACE.
CONCATENATE wa_itab_jcds-status2 <wa_itab3>-status2 INTO <wa_itab3>-status2 SEPARATED BY SPACE.
CONCATENATE wa_itab_jcds-status3 <wa_itab3>-status3 INTO <wa_itab3>-status3 SEPARATED BY SPACE.

ENDLOOP.
ENDLOOP.

Regards

Bala Krishna

Read only

Former Member
0 Likes
876

the loop in loop causes the time out


LOOP AT ITAB3 INTO WA_ITAB3.
LOOP AT ITAB_JCDS INTO WA_ITAB_JCDS WHERE OBJNR = WA_ITAB3-OBJNR.

Either use SORTED table (convenient) as said above or the more complicated solution with the

BINARY SEARCH also shown above.

The assigning can even make it faster, but the first effect much much larger!

Siegfried