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: 

For all entries usage

Former Member
0 Kudos

I have a small doubt on FOR ALL ENTRIES usage.. I awant to get kunnr,name1 from KNA1

and vbeln, netwr from VBAK. In this scenario How can I declare the INTERNAL tables and the SELECT STATEMENTS..

Regards,

bhargava

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi,

Check this example.

TABLES: VBAK.

SELECT-OPTIONS: SO_ERDAT FOR VBAK-ERDAT.

DATA: BEGIN OF ITAB OCCURS 0,

VBELN TYPE VBELN,

NETWR TYPE VBAK-NETWR,

KUNNR TYPE VBAK-KUNNR,

NAME1 TYPE KNA1-NAME1,

END OF ITAB.

DATA: BEGIN OF ITAB_KUNNR OCCURS 0,

KUNNR TYPE VBAK-KUNNR,

NAME1 TYPE KNA1-NAME1,

END OF ITAB_KUNNR.

  • GET THE SALES ORDERS..

SELECT VBELN NETWR KUNNR

FROM VBAK

INTO TABLE ITAB

WHERE ERDAT IN SO_ERDAT.

  • GET THE CUSTOMERS.

IF NOT ITAB[] IS INITIAL.

SELECT KUNNR NAME1

INTO TABLE ITAB_KUNNR

FROM KNA1

FOR ALL ENTRIES IN ITAB

WHERE KUNNR = ITAB-KUNNR.

IF SY-SUBRC = 0.

SORT ITAB_KUNNR BY KUNNR.

ENDIF.

ENDIF.

  • MODIFY THE INTERNAL TABLE.

LOOP AT ITAB.

READ TABLE ITAB_KUNNR

WITH KEY KUNNR = ITAB-KUNNR

BINARY SEARCH.

IF SY-SUBRC = 0.

ITAB-NAME1 = ITAB_KUNNR-NAME1.

MODIFY ITAB.

ENDIF.

ENDLOOP.

Hope this helps..

Thanks,

Naren

4 REPLIES 4

Former Member
0 Kudos

hai

u declare two internal tables one contain data of kna1 table and another one is

abt vbak table.

write select query as like this,

select * from kna1

into table it_kna1 where <cond>.

select * from vbak

into table it_vbak for all entries in table it_kna1

where <cond> with relate to it_kna1 table key.

Clemenss
Active Contributor
0 Kudos

k b ram,

try selecting from both tables together using join:

DATA:
  BEGIN OF gs_data,
  kunnr TYPE KNA1-kunnr,
  name1 TYPE KNA1-name1, 
  vbeln TYPE VBAK-vbeln,  
  netwr TYPE VBAK-netwr, 
  END OF gs_data,
  gt_itab LIKE TABLE OF gs_data.

SELECT-OPTIONS:
  s_vbeln FOR gs_data-vbeln,
  s_kunnr FOR gs_data-kunnr.

SELECT KNA1~kunnr KNA1~name1 VBAK~vbeln  VBAK~netwr 
  INTO CORRESPONDING FIELDS OF TABLE gt_itab
  FROM KNA1 
  JOIN VBAK
    ON KNA1~KUNNR = VBAK~KUNNR
  WHERE vbeln in s_vbeln
     AND kunnr in s_kunnr.

Sorry, no FOR ALL ENTRIES this time. Modify/extend to your needs.

Regards,

Clemens

Former Member
0 Kudos

Hi Ram,

The FOR ALL ENTRIES as follows :

DATA : BEGIN OF I_KNA1 OCCURS 0,

KUNNR LIKE KNA1-KUNNR,

NAME1 LIKE KNA1-NAME1,

END OF I_KNA1.

DATA : BEGIN OF I_VBAK OCCURS 0,

VBELN LIKE VBAK-VBELN,

NETWR LIKE VBAK-NETWR,

END OF I_KNA1.

SELECT-OPTIONS : S_KUNNR FOR KAN1-KUNNR.

SELECT KUNNR

NAME1

FROM KNA1 INTO TABLE I_KNA1

WHERE KUNNR IN S_KUNNR.

IF NOT I_KNA1[] IS INITIAL. --->>> This condition is mandatory

SELECT VBELN

NETWR

FROM VBAK

INTO TABLE I_VBAK

FOR ALL ENTRIES IN I_KNA1

WHERE KUNNR = I_KNA1-KUNNR.

ENDIF.

This is the way we need to write the code..

Srini.

Former Member
0 Kudos

Hi,

Check this example.

TABLES: VBAK.

SELECT-OPTIONS: SO_ERDAT FOR VBAK-ERDAT.

DATA: BEGIN OF ITAB OCCURS 0,

VBELN TYPE VBELN,

NETWR TYPE VBAK-NETWR,

KUNNR TYPE VBAK-KUNNR,

NAME1 TYPE KNA1-NAME1,

END OF ITAB.

DATA: BEGIN OF ITAB_KUNNR OCCURS 0,

KUNNR TYPE VBAK-KUNNR,

NAME1 TYPE KNA1-NAME1,

END OF ITAB_KUNNR.

  • GET THE SALES ORDERS..

SELECT VBELN NETWR KUNNR

FROM VBAK

INTO TABLE ITAB

WHERE ERDAT IN SO_ERDAT.

  • GET THE CUSTOMERS.

IF NOT ITAB[] IS INITIAL.

SELECT KUNNR NAME1

INTO TABLE ITAB_KUNNR

FROM KNA1

FOR ALL ENTRIES IN ITAB

WHERE KUNNR = ITAB-KUNNR.

IF SY-SUBRC = 0.

SORT ITAB_KUNNR BY KUNNR.

ENDIF.

ENDIF.

  • MODIFY THE INTERNAL TABLE.

LOOP AT ITAB.

READ TABLE ITAB_KUNNR

WITH KEY KUNNR = ITAB-KUNNR

BINARY SEARCH.

IF SY-SUBRC = 0.

ITAB-NAME1 = ITAB_KUNNR-NAME1.

MODIFY ITAB.

ENDIF.

ENDLOOP.

Hope this helps..

Thanks,

Naren