Hi Matthew,
Thank you for your suggestion,
I check the below code but the performance of FAE is better than inner join why?
TABLES : EKKO , EKPO , LFA1.
TYPES : BEGINOF TY_EKKO,
EBELN TYPE EKKO-EBELN,
BUKRS TYPE EKKO-BUKRS,
BSTYP TYPE EKKO-BSTYP,
BSART TYPE EKKO-BSART,
LIFNR TYPE EKKO-LIFNR,
ENDOF TY_EKKO.
TYPES : BEGINOF TY_EKPO,
EBELN TYPE EKPO-EBELN,
EBELP TYPE EKPO-EBELP,
MATNR TYPE EKPO-MATNR,
WERKS TYPE EKPO-WERKS,
LGORT TYPE EKPO-LGORT,
ENDOF TY_EKPO.
TYPES : BEGINOF TY_LFA1,
LIFNR TYPE LFA1-LIFNR,
NAME1 TYPE LFA1-NAME1,
ENDOF TY_LFA1.
TYPES : BEGINOF TY_FINAL,
EBELN TYPE EKKO-EBELN,
BUKRS TYPE EKKO-BUKRS,
BSTYP TYPE EKKO-BSTYP,
BSART TYPE EKKO-BSART,
LIFNR TYPE EKKO-LIFNR,
EBELP TYPE EKPO-EBELP,
MATNR TYPE EKPO-MATNR,
WERKS TYPE EKPO-WERKS,
LGORT TYPE EKPO-LGORT,
ENDOF TY_FINAL.
DATA : IT_EKKO TYPESTANDARDTABLEOF TY_EKKO,
IT_EKPO TYPESTANDARDTABLEOF TY_EKPO,
IT_LFA1 TYPESTANDARDTABLEOF TY_LFA1.
DATA : WA_EKKO TYPE TY_EKKO,
WA_EKPO TYPE TY_EKPO,
WA_LFA1 TYPE TY_LFA1.
DATA : IT_FINAL1 TYPESTANDARDTABLEOF TY_FINAL,
IT_FINAL2 TYPESTANDARDTABLEOF TY_FINAL,
IT_FINAL3 TYPESTANDARDTABLEOF TY_FINAL.
DATA : WA_FINAL1 TYPE TY_FINAL,
WA_FINAL2 TYPE TY_FINAL,
WA_FINAL3 TYPE TY_FINAL.
*SELECTION-SCREEN : BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS : S_BUKRS FOR EKKO-BUKRS .
SELECT-OPTIONS : S_WERKS FOR EKPO-WERKS .
SELECT-OPTIONS : S_LIFNR FOR LFA1-LIFNR.
*SELECTION-SCREEN : END OF BLOCK B1.
INITIALIZATION.
START-OF-SELECTION.
DATA: START TYPEI,
END TYPEI,
DIF TYPEI.
CLEAR : START , END , DIF.
GETRUNTIMEFIELD START.
SELECT A~EBELN A~BUKRS A~BSTYP A~BSART A~LIFNR
B~EBELP B~MATNR B~WERKS B~LGORT
FROM EKKO AS A INNER JOIN EKPO AS B
ON A~EBELN = B~EBELN
INTOTABLE IT_FINAL1
WHERE A~BUKRS in S_BUKRS
AND B~WERKS in S_WERKS
AND A~LIFNR in S_LIFNR.
GETRUNTIMEFIELDEND.
DIF = END - START.
WRITE: /001 'Time for Join (Header to Item)' ,
055':', DIF, 'microseconds'.
CLEAR : START , END ,DIF.
GETRUNTIMEFIELD START.
SELECT A~EBELN A~BUKRS A~BSTYP A~BSART A~LIFNR
B~EBELP B~MATNR B~WERKS B~LGORT
FROM EKPO AS B INNER JOIN EKKO AS A
ON A~EBELN = B~EBELN
INTOTABLE IT_FINAL2
WHERE A~BUKRS in S_BUKRS
AND B~WERKS in S_WERKS
AND A~LIFNR in S_LIFNR.
GETRUNTIMEFIELDEND.
DIF = END - START.
WRITE: /001 'Time for Join (Item to Header)' ,
055':', DIF, 'microseconds'.
CLEAR : START , END ,DIF.
GETRUNTIMEFIELD START.
SELECT EBELN BUKRS BSTYP BSART LIFNR FROM EKKO
INTOTABLE IT_EKKO
WHERE BUKRS IN S_BUKRS
AND LIFNR IN S_LIFNR.
IF IT_EKKO ISNOTINITIAL.
SORT IT_EKKO BY EBELN.
SELECT EBELN EBELP MATNR WERKS LGORT FROM EKPO
INTOTABLE IT_EKPO
FORALL ENTRIES IN IT_EKKO
WHERE EBELN = IT_EKKO-EBELN
AND WERKS IN S_WERKS.
ENDIF.
LOOPAT IT_EKPO INTO WA_EKPO.
READTABLE IT_EKKO INTO WA_EKKO WITHKEY EBELN = WA_EKPO-EBELN BINARYSEARCH.
IF SY-SUBRC = 0.
WA_FINAL3-EBELN = WA_EKKO-EBELN.
WA_FINAL3-BUKRS = WA_EKKO-BUKRS.
WA_FINAL3-BSTYP = WA_EKKO-BSTYP.
WA_FINAL3-BSART = WA_EKKO-BSART.
WA_FINAL3-LIFNR = WA_EKKO-LIFNR.
WA_FINAL3-EBELP = WA_EKPO-EBELP.
WA_FINAL3-MATNR = WA_EKPO-MATNR.
WA_FINAL3-WERKS = WA_EKPO-WERKS.
WA_FINAL3-LGORT = WA_EKPO-LGORT.
APPEND WA_FINAL3 TO IT_FINAL3.
CLEAR : WA_FINAL3.
ENDIF.
CLEAR : WA_EKKO , WA_EKPO.
ENDLOOP.
GETRUNTIMEFIELDEND.
DIF = END - START.
WRITE: /001 'Time for For All Entries in',
055':', DIF, 'microseconds'.
END-OF-SELECTION.
Output: