Application Development 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: 

Get contents of 2 internal tables into third internal table.

former_member200872
Active Participant
0 Kudos

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 !!

5 REPLIES 5

Former Member
0 Kudos

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

Former Member
0 Kudos

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

Former Member
0 Kudos

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

former_member200872
Active Participant
0 Kudos

Thank you all for the help.

(Sorry for belated comments. I was not in touch with ABAP for nearly a year).

0 Kudos

The rest of us should be so lucky - glad to help.

Rob