2014 Mar 02 9:35 AM
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
2014 Mar 02 10:42 AM
Hello Smriti,
As I understand below is your requirement.
| ITAB1 | |||
| Material | Field1 | Field2 | |
| mat1 | aa | bb | |
| mat2 | xx | yy | |
| ITAB2 | |||
| Material | Ref | ||
| mat1 | A1 | ||
| mat1 | A2 | ||
| mat1 | A3 | ||
| mat2 | B2 | ||
| mat2 | B3 | ||
| itab_final | |||
| Material | Field1 | Field2 | ref |
| mat1 | aa | bb | A1 |
| mat1 | aa | bb | A2 |
| mat1 | aa | bb | A3 |
| mat2 | xx | yy | B1 |
| mat2 | xx | yy | B2 |
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
2014 Mar 02 10:38 AM
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
2014 Mar 02 10:42 AM
Hello Smriti,
As I understand below is your requirement.
| ITAB1 | |||
| Material | Field1 | Field2 | |
| mat1 | aa | bb | |
| mat2 | xx | yy | |
| ITAB2 | |||
| Material | Ref | ||
| mat1 | A1 | ||
| mat1 | A2 | ||
| mat1 | A3 | ||
| mat2 | B2 | ||
| mat2 | B3 | ||
| itab_final | |||
| Material | Field1 | Field2 | ref |
| mat1 | aa | bb | A1 |
| mat1 | aa | bb | A2 |
| mat1 | aa | bb | A3 |
| mat2 | xx | yy | B1 |
| mat2 | xx | yy | B2 |
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
2014 Mar 02 11:11 AM
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.. |
2014 Mar 02 11:35 AM
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
2014 Mar 02 11:53 AM
Hello Smriti,
Forgot to do sy-subrc check after READ statement do it while trying.
Regards,
Thanga
2014 Mar 02 12:24 PM
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.
2014 Mar 03 1:11 PM
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.