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

DOUBLE LOOP WITH APPEND STATEMENTS

Former Member
0 Likes
1,840

Hi experts,

i have below code.

LOOP AT lt_head INTO wa_head.	u201C Loop -A
      CHECK <>.
      APPEND wa_output TO lt_output. u201C Append -A
      LOOP AT lt_i INTO ls_i.   "aDDED	Loop -B
        CHECK <>.
        APPEND wa_output TO lt_output. u201C Append -B
      ENDLOOP.
    <CONDITION IF APPEND-B STATEMENT NOT INSERT ANY RECORD.
   < THEN DELETE INSERTED RECORD BY APPEND -A.
    ENDLOOP.

My problem is that if Append - B statement append at least one record

then the Append -A record is store in table lt_output.

otherwise delete the append A statement.

ANYONE HAVE SOLUTION????

6 REPLIES 6
Read only

Former Member
0 Likes
930

Hi,

Try like this.


LOOP AT lt_head INTO wa_head.	u201C Loop -A
      CHECK .
      flag = 0.
      LOOP AT lt_i INTO ls_i.   "aDDED	Loop -B
        CHECK .
        APPEND wa_output TO lt_output. u201C Append -B
flag = 1.
      ENDLOOP.
if flag = 1.
APPEND wa_output TO lt_output. u201C Append -A
endif.
    <CONDITION IF APPEND-B STATEMENT NOT INSERT ANY RECORD.
   < THEN DELETE INSERTED RECORD BY APPEND -A.
    ENDLOOP.

alternatively you can append-a at first and based on flag write a DELETE statement.

Thanks,

Jyothi

Read only

Former Member
0 Likes
930

DATA: L_CHECK TYPE C,

L_CNT(3) TYPE N.

LOOP AT lt_head INTO wa_head. u201C Loop -A

CHECK .

APPEND wa_output TO lt_output. u201C Append -A

DESCRIBE TABLE lt_output LINES INTO L_CNT.

LOOP AT lt_i INTO ls_i. "aDDED Loop -B

CHECK .

APPEND wa_output TO lt_output. u201C Append -B

IF SY-SUBRC EQ 0.

L_CHECK = 'X'.

ENDIF.

ENDLOOP.

IF L_CHECK EQ ' '.

DELETE FROM IT_OUTPUT INDEX L_CNT.

ELSE.

CLEAR; L_CNT,

L_CHECK.

ENDIF.

<CONDITION IF APPEND-B STATEMENT NOT INSERT ANY RECORD.

< THEN DELETE INSERTED RECORD BY APPEND -A.

ENDLOOP.

Edited by: Poorna Chandrasekhar on May 27, 2009 11:52 AM

Edited by: Poorna Chandrasekhar on May 27, 2009 11:53 AM

Read only

Former Member
0 Likes
930

Hi,

LOOP AT lt_head INTO wa_head.	u201C Loop -A
      CHECK .
*    APPEND wa_output TO lt_output. u201C Append -A  " Comment 
     CLEAR Insertb_flag.            " Insert
      LOOP AT lt_i INTO ls_i.   "aDDED	Loop -B
        CHECK .
         Insertb_flag = 'X'                                       " Insert 
        APPEND wa_output TO lt_output. u201C Append -B
      ENDLOOP.
      IF Insertb_flag EQ 'X'.                        " Insert
        APPEND wa_output TO lt_output. u201C Append -A Insert
      ENDIF.                                           " Insert
    ENDLOOP.

If you want the order to be maintained i.e first record from A and second record from B then try this way.



LOOP AT lt_head INTO wa_head.	u201C Loop -A
      CHECK .
*    APPEND wa_output TO lt_output. u201C Append -A  " Comment 
     CLEAR Count.            " Insert
      LOOP AT lt_i INTO ls_i.   "aDDED	Loop -B
        CHECK .
        IF COUNT EQ '0'.                        " Insert
*          Take another variable wa_output1 
            APPEND wa_output1 TO lt_output. u201C Append -A Insert
         COUNT = COunt + 1.                 " insert
         ENDIF.                                           " Insert
        APPEND wa_output TO lt_output. u201C Append -B
      ENDLOOP.
    ENDLOOP.

Read only

Former Member
0 Likes
930

Hi,

Do as follows

LOOP AT lt_head INTO wa_head.	u201C Loop -A
      CHECK .
      APPEND wa_output TO lt_output. u201C Append -A
{color:red}
* add code here.
DESCRIBE IT_OUTPUT LINES v_index.
{color}

      LOOP AT lt_i INTO ls_i.   "aDDED	Loop -B
        CHECK .
        APPEND wa_output TO lt_output. u201C Append -B
      ENDLOOP.

{color:red}* add code here
   IF SY_SUBRC NE 0.
      DELETE IT_OUTPUT index  v_index.
   ENDIF.
{color}

    ENDLOOP.

Regards,

Ankur Parab

Read only

Former Member
0 Likes
930

SELF SOLVED

Read only

Former Member
0 Likes
930

Hi,

Below code would work as per the requirement.. kindly chk..



data: w_tabix type i,
      w_index type i,
      w_counter type i.

LOOP AT lt_head INTO wa_head.	u201C Loop -A
      CHECK .
      APPEND wa_output TO lt_output. u201C Append -A
      w_tabix = sy-tabix.

      // append statement sets sy-tabix to the last appended row.
      LOOP AT lt_i INTO ls_i.   "aDDED	Loop -B
        CHECK .
        APPEND wa_output TO lt_output. u201C Append -B
        w_index = sy-tabix.
        add 1 to w_counter.

      // if counter eq  index thn record gets inserted each time.if not thn delete record from lt_output.

        if w_counter ne w_index.
          delete lt_output
          INDEX w_tabix.
        endif.
      ENDLOOP.

    <CONDITION IF APPEND-B STATEMENT NOT INSERT ANY RECORD.
   < THEN DELETE INSERTED RECORD BY APPEND -A.
ENDLOOP.

Regards,