04-28-2006 3:58 PM
Hi all,
I'm new to SAP / ABAP.
I've got an issue.
How do i get data in 2 fields of itab1 and anoter field of itab2 into itab3 ?
TABLES : KNA1, VBAK.
DATA :
BEGIN OF ITAB1 OCCURS 5,
KUNNR LIKE KNA1-KUNNR,
NAME1 LIKE KNA1-NAME1,
LAND1 LIKE KNA1-LAND1,
END OF ITAB1,
BEGIN OF ITAB2 OCCURS 5,
VBELN LIKE VBAK-VBELN,
NETWR LIKE VBAK-NETWR,
END OF ITAB2,
BEGIN OF ITAB3 OCCURS 5,
KUNNR LIKE KNA1-KUNNR,
NAME1 LIKE KNA1-NAME1,
NETWR LIKE VBAK-NETWR,
END OF ITAB3.
SELECT KUNNR NAME1 LAND1
FROM KNA1 INTO TABLE ITAB1
WHERE ... (some CONDITION)
.
SELECT VBELN NETWR
FROM VBAK INTO TABLE ITAB2
WHERE ... (some CONDITION)
.
THE FOLLOWING WILL GET ONLY 1 CUSTOMER'S NAME IN ITAB3
LOOP AT ITAB1.
ITAB3-KUNNR = ITAB1-KUNNR.
ITAB3-NAME1 = ITAB1-NAME1.
APPEND ITAB3.
ENDLOOP.
LOOP AT ITAB2.
ITAB3-NETWR = ITAB2-NETWR.
APPEND ITAB3.
ENDLOOP.
IN DEBUGGING IT'S FINE TILL 1st LOOP, AFTER 2nd LOOP ITAB3 HAS ONLY ONE CUSTOMER'S NAME & NUMBER.
Please Help me in resolving this !!
04-28-2006 4:06 PM
Wajid,
Welcome to SDN Forums,
Here you need to have a common field between ITAB1 and ITAB2. then it will make sens to combine the two tables.
In this case KUNNR (Customer) could be the common field. So, the logic below assumes the same and also assumes that there will be only one field.
LOOP AT ITAB1.
READ TABLE ITAB2 WITH KEY KUNNR = ITAB1-KUNNR.
IF SY-SUBRC = 0
MOVE-CORRESPONDING FIELDS OF ITAB2 TO ITAB3.
ENDIF.
MOVE-CORRESPONDING FIELDS OF ITAB1 TO ITAB3.
APPEND ITAB3.
CLEAR ITAB3.
ENDLOOP.
If ITAB2 has multiple entries for each customer
LOOP AT ITAB1.
MOVE-CORRESPONDING FIELDS OF ITAB1 TO ITAB3.
LOOP AT TABLE ITAB2 WHERE KUNNR = ITAB1-KUNNR.
MOVE-CORRESPONDING FIELDS OF ITAB2 TO ITAB3.
APPEND ITAB3.
CLEAR ITAB3.
ENDLOOP.
IF SY-SUBRC <> 0 .
APPEND ITAB3.
CLEAR ITAB3.
ENDLOOP.
The modified code will make sure the Customers will be there in ITAB3, even if the orders are not in ITAB2 for that Customers
Regards,
Ravi
Note : Please mark the helpful answers
Message was edited by: Ravikumar Allampallam
04-28-2006 4:42 PM
Try this:
REPORT ztest MESSAGE-ID 00.
TABLES : kna1, vbak.
DATA :
BEGIN OF itab1 OCCURS 0,
kunnr LIKE kna1-kunnr,
name1 LIKE kna1-name1,
land1 LIKE kna1-land1,
END OF itab1,
BEGIN OF itab2 OCCURS 0,
kunnr LIKE vbak-kunnr,
vbeln LIKE vbak-vbeln,
netwr LIKE vbak-netwr,
END OF itab2,
BEGIN OF itab3 OCCURS 0,
kunnr LIKE kna1-kunnr,
name1 LIKE kna1-name1,
netwr LIKE vbak-netwr,
END OF itab3,
sy_tab2_index LIKE sy-tabix,
w_kunnr LIKE kna1-kunnr.
SELECT kunnr name1 land1
FROM kna1 INTO TABLE itab1
* where some condition
UP TO 100 ROWS.
SORT itab1 BY kunnr.
SELECT kunnr vbeln netwr
FROM vbak INTO TABLE itab2
FOR ALL ENTRIES IN itab1
WHERE kunnr = itab1-kunnr.
* and some condition
SORT itab2 BY kunnr.
LOOP AT itab1.
itab3-kunnr = itab1-kunnr.
itab3-name1 = itab1-name1.
READ TABLE itab2 WITH KEY
kunnr = itab1-kunnr
BINARY SEARCH.
sy_tab2_index = sy-tabix.
w_kunnr = itab1-kunnr.
WHILE sy-subrc = 0.
itab3-netwr = itab2-netwr.
APPEND itab3.
sy_tab2_index = sy_tab2_index + 1.
READ TABLE itab2 INDEX sy_tab2_index.
IF sy-subrc = 0.
IF itab2-kunnr <> w_kunnr.
sy-subrc = 9.
ENDIF.
ENDIF.
ENDWHILE.
ENDLOOP.
LOOP AT itab3.
WRITE: /001 itab3-kunnr,
itab3-name1,
itab3-netwr.
ENDLOOP.
Rob
04-28-2006 5:15 PM
Hi Wajid,
Welcome to the SDN community.
Use this..
LOOP AT ITAB1.
MOVE-CORRESPONDING FIELDS OF ITAB1 TO ITAB3.
LOOP AT TABLE ITAB2 WHERE KUNNR = ITAB1-KUNNR.
MOVE-CORRESPONDING FIELDS OF ITAB2 TO ITAB3.
APPEND ITAB3.
ENDLOOP.
ENDLOOP.
Regards,
Tanveer.
Please mark helpful answers by clicking on the star
10-02-2007 6:30 PM
Thank you all for the help.
(Sorry for belated comments. I was not in touch with ABAP for nearly a year).
10-02-2007 6:39 PM