‎2009 Oct 08 6:57 AM
Hi All,
I have written querry as follow but when i check the performance it's taking more time
and is se30 It's giveing ABAP grapf as 98.45%.
Can i optimize this selct querry or the way i moved data into final internal table?
Please help me.
SELECT werks
matnr
FROM ekpo INTO TABLE gt_ekpo
WHERE werks IN s_werks
AND matnr IN s_matnr.
IF gt_ekpo[] IS NOT INITIAL.
SELECT belnr
budat
ebeln
menge
FROM ekbe INTO TABLE gt_ekbe
FOR ALL ENTRIES IN gt_ekpo
WHERE belnr IN s_belnr
AND ebeln IN s_ebeln
AND werks EQ gt_ekpo-werks
AND matnr EQ gt_ekpo-matnr.
SELECT prctr FROM marc INTO TABLE gt_marc
FOR ALL ENTRIES IN gt_ekpo
WHERE werks EQ gt_ekpo-werks
AND matnr EQ gt_ekpo-matnr
AND prctr IN s_prctr.
SELECT pspnr FROM prps
INTO TABLE gt_prps
FOR ALL ENTRIES IN gt_ekpo
WHERE werks EQ gt_ekpo-werks
AND matnr EQ gt_ekpo-matnr
AND pspnr IN s_pspnr.
SELECT pstrm
eetrm
FROM prte INTO TABLE gt_prte
FOR ALL ENTRIES IN gt_prps
WHERE posnr EQ gt_prps-pspnr
AND pstrm IN s_pstrm
AND eetrm IN s_eetrm.
SELECT anln1
anln2 FROM cobrb INTO TABLE gt_cobrb
FOR ALL ENTRIES IN gt_ekpo
WHERE matnr EQ gt_ekpo-matnr
AND werks EQ gt_ekpo-werks.
SELECT anln1 FROM anla
INTO TABLE gt_anla
FOR ALL ENTRIES IN gt_cobrb
WHERE anln1 EQ gt_cobrb-anln1.
SELECT dmbtr FROM mseg INTO TABLE gt_mseg
FOR ALL ENTRIES IN gt_ekbe
WHERE ebeln EQ gt_ekbe-ebeln
AND menge EQ gt_ekbe-menge.
SELECT amort_val
asset_val FROM /bgt/amort_extn
INTO TABLE gt_/bgt/amort_extn
FOR ALL ENTRIES IN gt_ekpo
WHERE werks EQ gt_ekpo-werks
AND matnr EQ gt_ekpo-matnr.
ENDIF.
LOOP AT gt_ekbe INTO gs_ekbe.
gs_final-belnr = gs_ekbe-belnr.
gs_final-budat = gs_ekbe-budat.
gs_final-ebeln = gs_ekbe-ebeln.
gs_final-menge = gs_ekbe-menge.
APPEND gs_final TO gt_final.
ENDLOOP.
LOOP AT gt_ekpo INTO gs_ekpo.
gs_final-werks = gs_ekpo-werks.
gs_final-matnr = gs_ekpo-matnr.
APPEND gs_final TO gt_final.
ENDLOOP.
LOOP AT gt_marc INTO gs_marc.
gs_final-prctr = gs_marc-prctr.
APPEND gs_final TO gt_final.
ENDLOOP.
LOOP AT gt_prps INTO gs_prps.
gs_final-pspnr = gs_prps-pspnr.
APPEND gs_final TO gt_final.
ENDLOOP.
LOOP AT gt_prte INTO gs_prte.
gs_final-pstrm = gs_prte-pstrm.
gs_final-eetrm = gs_prte-eetrm.
APPEND gs_final TO gt_final.
ENDLOOP.
LOOP AT gt_cobrb INTO gs_cobrb.
gs_final-anln1 = gs_cobrb-anln1.
gs_final-anln2 = gs_cobrb-anln2.
APPEND gs_final TO gt_final.
ENDLOOP.
LOOP AT gt_anla INTO gs_anla.
gs_final-anln1 = gs_anla-anln1.
APPEND gs_final TO gt_final.
ENDLOOP.
LOOP AT gt_mseg INTO gs_mseg.
gs_final-dmbtr = gs_mseg-dmbtr.
APPEND gs_final TO gt_final.
ENDLOOP.
LOOP AT gt_/bgt/amort_extn INTO gs_/bgt/amort_extn.
gs_final-amort_val = gs_/bgt/amort_extn-amort_val.
gs_final-asset_val = gs_/bgt/amort_extn-asset_val.
APPEND gs_final TO gt_final.
ENDLOOP.
Regards,
oorvi
‎2009 Oct 08 6:59 AM
Kndly format the code to make it readable and keep in mind the 2500 character limit
‎2009 Oct 08 6:59 AM
Hi,
Please put your code in the following manner , so that it will be in readable format.
->put this first
<put your code>
fianlly another <code> like above to end it.
Regards,
Nagaraj
‎2009 Oct 08 7:23 AM
i am writing code in
---
---
But is it not formating
Edited by: oorvi joshi on Oct 8, 2009 8:23 AM
‎2009 Oct 08 7:26 AM
split your code in to 2 or 3 parts and post.It must be exceeding 2500 character limit
‎2009 Oct 08 7:31 AM
LOOP AT gt_ekbe INTO gs_ekbe.
gs_final-belnr = gs_ekbe-belnr.
gs_final-budat = gs_ekbe-budat.
gs_final-ebeln = gs_ekbe-ebeln.
gs_final-menge = gs_ekbe-menge.
APPEND gs_final TO gt_final.
ENDLOOP.
LOOP AT gt_ekpo INTO gs_ekpo.
gs_final-werks = gs_ekpo-werks.
gs_final-matnr = gs_ekpo-matnr.
APPEND gs_final TO gt_final.
ENDLOOP.
LOOP AT gt_marc INTO gs_marc.
gs_final-prctr = gs_marc-prctr.
APPEND gs_final TO gt_final.
ENDLOOP.
LOOP AT gt_prps INTO gs_prps.
gs_final-pspnr = gs_prps-pspnr.
APPEND gs_final TO gt_final.
ENDLOOP.
LOOP AT gt_prte INTO gs_prte.
gs_final-pstrm = gs_prte-pstrm.
gs_final-eetrm = gs_prte-eetrm.
APPEND gs_final TO gt_final.
ENDLOOP.
LOOP AT gt_cobrb INTO gs_cobrb.
gs_final-anln1 = gs_cobrb-anln1.
gs_final-anln2 = gs_cobrb-anln2.
APPEND gs_final TO gt_final.
ENDLOOP.
LOOP AT gt_anla INTO gs_anla.
gs_final-anln1 = gs_anla-anln1.
APPEND gs_final TO gt_final.
ENDLOOP.
LOOP AT gt_mseg INTO gs_mseg.
gs_final-dmbtr = gs_mseg-dmbtr.
APPEND gs_final TO gt_final.
ENDLOOP.
LOOP AT gt_/bgt/amort_extn INTO gs_/bgt/amort_extn.
gs_final-amort_val = gs_zbill_acs_val.
gs_final-asset_val = gs_/zbill-atm_val.
APPEND gs_final TO gt_final.
ENDLOOP.
‎2009 Oct 08 7:38 AM
Hello,
Keep the performance part aside. First your code does not make sense. It just keeps on appending each field in the gs_final internal table. You must be using modify statement after the first append to get the correct output. Are you sure only performance is the issue here and the output is displayed correctly?
Vikranth
‎2009 Oct 08 7:49 AM
Thanks vikrant for your quick reply.
I am just appending all the data into final internal table.
No need to modify the internal table.
I was thinking of instead of using loop can i use read statement for the same?
‎2009 Oct 08 7:56 AM
Hi,
Yes you can use read statement but all the internal tables must be interlinked with a common field for that.
For Eg,
loop at itab1.
move-corresponding itab1 to it_final.
read table itab2 with key field1 = itab1-field1.
if sy-subrc = 0 .
move-corresponding itab2 to it_final.
endif.
read table itab3 with key field1 = itab1-field2.
if sy-subrc = 0 .
move-corresponding itab3 to it_final.
endif.
append it_final.
clear it_final.
endloop.
Vikranth
‎2009 Oct 08 7:33 AM