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

Reg Internal table modification based on other itab

Former Member
0 Likes
937

Hi Folks,

    I have two internal tables, my first internal table as follows(this is final internla table i want to modify this based on other itab)

material  field1 field2   newfield

  mat1    aa     bb     

  mat2   xx     yy

my second internal table has

mat                ref mat

mat1              A1

mat1              A2

mat1              A3

mat2             B2

mat2             B3

my final internal table is 1st one I want my new output as

material  field1 field2   newfield

  mat1    aa     bb         A1

  mat1    aa     bb         A2

  mat1    aa     bb         A3

  mat2   xx     yy         B2

  mat2   xx     yy         B3

Please give me some input how can i achieve the above.

Thanks,

Smriti

1 ACCEPTED SOLUTION
Read only

ThangaPrakash
Active Contributor
0 Likes
900

Hello Smriti,

As I understand below is your requirement.

ITAB1
MaterialField1Field2
mat1aabb
mat2xxyy
ITAB2
MaterialRef
mat1A1
mat1A2
mat1A3
mat2B2
mat2B3
itab_final
MaterialField1Field2ref
mat1aabbA1
mat1aabbA2
mat1aabbA3
mat2xxyyB1
mat2xxyyB2

Try with the below code.

LOOP at itab2 INTO str2.

     READ TABLE itab1 INTO str1 WITH KEY mat = str2-material.

     str_final-material = str2-material

     str_final-ref = str2-ref

     str_final-field1 = str1-field1

     str_final-field2 = str1-field2

  APPEND str_final TO itab_final.

ENDLOOP.

Regards,

Thanga

7 REPLIES 7
Read only

former_member226419
Contributor
0 Likes
900

Hi,

loop at itab1 into wtab1.

     loop at itab2 into wtab2 where material = itab1-material.

          wtab1-ref mat = wtab2-ref_mat.

          modify itab1 from wtab1 index sy-tabix transporting ref_mat.

          endloop.

               endloop.

BR

Sumeet

Read only

ThangaPrakash
Active Contributor
0 Likes
901

Hello Smriti,

As I understand below is your requirement.

ITAB1
MaterialField1Field2
mat1aabb
mat2xxyy
ITAB2
MaterialRef
mat1A1
mat1A2
mat1A3
mat2B2
mat2B3
itab_final
MaterialField1Field2ref
mat1aabbA1
mat1aabbA2
mat1aabbA3
mat2xxyyB1
mat2xxyyB2

Try with the below code.

LOOP at itab2 INTO str2.

     READ TABLE itab1 INTO str1 WITH KEY mat = str2-material.

     str_final-material = str2-material

     str_final-ref = str2-ref

     str_final-field1 = str1-field1

     str_final-field2 = str1-field2

  APPEND str_final TO itab_final.

ENDLOOP.

Regards,

Thanga

Read only

Former Member
0 Likes
900

Hello Smriti,

As per your requirement

material  field1 field2   newfield

  mat1    aa     bb     

   mat2   xx     yy

  my second internal table has

mat                ref mat

mat1              A1 

mat1              A2

mat1              A3

mat2             B2

mat2             B3

my final internal table is 1st one I want my new output as

material  field1 field2   newfield

   mat1    aa     bb         A1

  mat1    aa     bb         A2

  mat1    aa     bb         A3

   mat2   xx     yy         B2

  mat2   xx     yy         B3

for final output you need new internal table having structure Final having field

mat           

ref mat  field1 field2

copy corresponding field  into this structure after that  modify  field1 and field 2 data by using loop

loop at Final

READ TABLE second internal  table INTO work area  WITH KEY mat = first_internal table -material.

final-field1 =first_internal-field1.

final-field2= first_internal-field2..

Modify final internal table from work area transporting field1 field 2

endloop.

you will get desire format in final internal table.

now you can use this data as per requirement..

Read only

former_member223133
Active Participant
0 Likes
900

Hi Smriti,

Below code will work fine for your case.

DATA : itab1 TYPE STANDARD TABLE OF ty_itab1
             WITH KEY primary_key COMPONENTS field1 field2 field3.

LOOP AT itab2 INTO wa2.
   READ TABLE itab1 INTO wa1 WITH KEY field1 = wa2-field1.
   IF sy-subrc = 0.
     wa1-field4 = wa2-field2.
     MODIFY itab1 FROM wa1 TRANSPORTING field4 WHERE field1 = wa2-field1.
   ENDIF.
ENDLOOP.


Regards

Gangadhar

Read only

ThangaPrakash
Active Contributor
0 Likes
900

Hello Smriti,

Forgot to do sy-subrc check after READ statement do it while trying.

Regards,

Thanga

Read only

Former Member
0 Likes
900

Use inner join to build the final itab ( My Assumption - Only two tables are involved, in the current scenario ).

Select a~mat1 a~field1 a~field2 b~ref_mat as newfield

  INTO TABLE itab

   from table1 as a INNER JOIN table2 as b

     on a~mat1 = b~mat1

     where a~mat1 in s_matnr.

Read only

Private_Member_15166
Active Contributor
0 Likes
900

Hi,

Create a final table with all fields and use parallel cursor for better improvement and runtime.

DATA: lv_tabix TYPE i.

sort itab1 by matnr.

sort itab2 by matnr.

loop at itab1 assigning <fs_tab1>.

clear ls_tab2.

read table itab2 into ls_tab2 with key matnr = <fs_tab1>-matnr binary search.

if sy-subrc = 0.

lv_tabix = sy-tabix.

loop at itab2 into ls_tab2 from lv_tabix.

if ls_tab2-matnr <> <fs_tab1>-matnr.

exit.

endif.

ls_final-matnr = <fs_tab1>-matnr.

ls_final-field1 = <fs_tab1>-field1.

ls_final-field2 = <fs_tab1>-field2.

ls_final-newfield = ls_tab2-ref_mat.

append ls_final to lt_final.

endloop.

endif.

endloop.