FOR ALL ENTRIES
For all entries is the best choice when you want to retrieve data from multiple tables. It is the best alternative to SELECT WITH JOINS, as for all entries improves the performance and reduces the load of database.
The syntax to use FOR ALL ENTRIES is as follows-
IF <PARENTAL INTERNAL TABLE> IS NOT INITIAL.
SELECT <FIELDS>
FROM <TABLENAME> INTO TABLE <INTERNAL TABLE NAME>
FOR ALL ENTRIES IN <PARENTAL INTERNAL TABLE>
WHERE <FIELDNAME> = <PARENTAL INTERNAL TABLE>-<FIELDNAME>.
ENDIF.
For example-
IF IT1[] IS NOT INITIAL.
SELECT EBELN AEDAT ZTERM LIFNR
FROM EKKO INTO TABLE IT2
FOR ALL ENTRIES IN IT1
WHERE LIFNR = IT1-LIFNR.
ENDIF.
The only condition to use FOR ALL ENTRIES is that the Parental Internal Table should not be empty.
You need to create the same number of local structures as the number of tables from where you want to retrieve the data, and also one structure for the common fields to merge at one table.
Let us take a requirement to understand the concept in more detail-
Requirement - Display data from the tables LFA1 (LIFNR, NAME1, ORT01) , EKKO (EBELN, AEDAT, ZTERM) , EKPO (EBELP, MATNR) with two pushbuttons to display the data and to exit from the program.
TABLES: LFA1, EKKO, EKPO, SSCRFIELDS.
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: PUSHBUTTON (10) BUTTON1 USER-COMMAND DISPLAY,
PUSHBUTTON (10) BUTTON2 USER-COMMAND EXIT.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-000.
SELECT-OPTIONS: S_LIFNR FOR LFA1-LIFNR.
SELECTION-SCREEN: END OF BLOCK B1.
TYPES: BEGIN OF TY_STR1,
LIFNR TYPE LIFNR,
NAME1 TYPE NAME1_GP,
ORT01 TYPE ORT01_GP,
END OF TY_STR1,
BEGIN OF TY_STR2,
EBELN TYPE EBELN,
AEDAT TYPE ERDAT,
ZTERM TYPE DZTERM,
LIFNR TYPE LIFNR,
END OF TY_STR2,
BEGIN OF TY_STR3,
EBELP TYPE EBELP,
MATNR TYPE MATNR,
EBELN TYPE EBELN,
END OF TY_STR3,
BEGIN OF TY_STR4,
LIFNR TYPE LIFNR,
NAME1 TYPE NAME1,
ORT01 TYPE ORT01,
EBELN TYPE EBELN,
AEDAT TYPE ERDAT,
ZTERM TYPE DZTERM,
EBELP TYPE EBELP,
MATNR TYPE MATNR,
END OF TY_STR4.
DATA: IT1 TYPE TABLE OF TY_STR1,
WA1 TYPE TY_STR1,
IT2 TYPE TABLE OF TY_STR2,
WA2 TYPE TY_STR2,
IT3 TYPE TABLE OF TY_STR3,
WA3 TYPE TY_STR3,
IT4 TYPE TABLE OF TY_STR4,
WA4 TYPE TY_STR4.
INITIALIZATION.
BUTTON1 = 'DISPLAY'.
BUTTON2 = 'EXIT'.
AT SELECTION-SCREEN ON S_LIFNR.
IF SSCRFIELDS-UCOMM = 'DISPLAY'.
SSCRFIELDS-UCOMM = 'ONLI'.
ELSEIF SSCRFIELDS-UCOMM = 'EXIT'.
LEAVE PROGRAM.
ENDIF.
START-OF-SELECTION.
SELECT LIFNR NAME1 ORT01
FROM LFA1 INTO TABLE IT1
WHERE LIFNR IN S_LIFNR.
IF IT1[] IS NOT INITIAL.
SELECT EBELN AEDAT ZTERM LIFNR
FROM EKKO INTO TABLE IT2
FOR ALL ENTRIES IN IT1
WHERE LIFNR = IT1-LIFNR.
ENDIF.
IF IT2[] IS NOT INITIAL.
SELECT EBELP MATNR EBELN
FROM EKPO INTO TABLE IT3
FOR ALL ENTRIES IN IT2
WHERE EBELN = IT2-EBELN.
ENDIF.
LOOP AT IT1 INTO WA1.
MOVE: WA1-LIFNR TO WA4-LIFNR,
WA1-NAME1 TO WA4-NAME1,
WA1-ORT01 TO WA4-ORT01.
LOOP AT IT2 INTO WA2 WHERE LIFNR = WA1-LIFNR.
WA4-EBELN = WA2-EBELN.
WA4-AEDAT = WA2-AEDAT.
WA4-ZTERM = WA2-ZTERM.
LOOP AT IT3 INTO WA3 WHERE EBELN = WA2-EBELN.
MOVE: WA3-EBELP TO WA4-EBELP,
WA3-MATNR TO WA4-MATNR.
APPEND WA4 TO IT4.
ENDLOOP.
ENDLOOP.
ENDLOOP.
WRITE:/ 'LIFNR',
10 'NAME1',
30 'ORT01',
45 'EBELN',
60 'AEDAT',
80 'ZTERM',
100 'EBELP',
120 'MATNR'.
ULINE.
SKIP.
LOOP AT IT4 INTO WA4.
WRITE:/ WA4-LIFNR,
10 WA4-NAME1,
30 WA4-ORT01,
45 WA4-EBELN,
60 WA4-AEDAT,
80 WA4-ZTERM,
100 WA4-EBELP,
120 WA4-MATNR.
ENDLOOP.
TOP-OF-PAGE.
WRITE:/65 'FOR ALL ENTRIES PROGRAM' COLOR 3.
ULINE.
SKIP.
The output for the above program is-

Comments
Post a Comment