‎2008 Apr 09 12:32 PM
Hi!
I have the following code. With huge amount of data (250000 record) it is running for 8 minutes.
The SELECT is not a problem, because it takes only 20 seconds, after I created an alternative index for the COEP table.
SELECT * FROM covp
INTO TABLE lt_covp
WHERE budat >= datum_tol AND
budat <= datum_ig AND
objnr LIKE 'OR%'. "pm orders
IF sy-subrc = 0.
REFRESH lt_aufk_seged.
LOOP AT lt_covp INTO wa_covp.
MOVE wa_covp-objnr+2(12) TO wa_aufk_seged-aufnr.
APPEND wa_aufk_seged TO lt_aufk_seged.
ENDLOOP.
SORT lt_aufk_seged.
DELETE ADJACENT DUPLICATES FROM lt_aufk_seged.
SELECT * FROM aufk
INTO TABLE lt_aufk
FOR ALL ENTRIES IN lt_aufk_seged
WHERE aufnr = lt_aufk_seged-aufnr.
ENDIF.
* until this point, the program runs for 20 seconds. This is fine.
* Only the following code part causes the problem!!!!!!!!!!!!!!!!!!!!!
SORT lt_aufk.
LOOP AT lt_covp INTO wa_covp.
lv_aufnr = wa_covp-objnr+2(12).
READ TABLE lt_aufk INTO wa_aufk
WITH KEY aufnr = lv_aufnr
BINARY SEARCH.
IF sy-subrc = 0.
CLEAR wa_worktime.
CLEAR wa_material.
CLEAR wa_service.
CLEAR wa_pm_orders.
IF wa_covp-vrgng = 'RKL' OR
wa_covp-vrgng = 'RKLN'.
PERFORM move_covp_to_other USING wa_covp
CHANGING wa_worktime.
ENDIF.
IF wa_covp-vrgng = 'COIN' AND NOT
wa_covp-matnr IS INITIAL.
IF wa_covp-ebeln IS INITIAL. "anyag
PERFORM move_covp_to_other USING wa_covp
CHANGING wa_material.
ELSE. "szolgáltatás
PERFORM move_covp_to_other USING wa_covp
CHANGING wa_service.
ENDIF.
ENDIF.
IF NOT wa_worktime IS INITIAL.
APPEND wa_worktime TO gt_worktime.
ENDIF.
IF NOT wa_material IS INITIAL.
APPEND wa_material TO gt_material.
ENDIF.
IF NOT wa_service IS INITIAL.
APPEND wa_service TO gt_service.
ENDIF.
READ TABLE gt_pm_orders INTO wa_pm_orders
WITH KEY aufnr = wa_aufk-aufnr.
IF sy-subrc <> 0.
MOVE-CORRESPONDING wa_aufk TO wa_pm_orders.
APPEND wa_pm_orders TO gt_pm_orders.
ENDIF.
ENDIF.
ENDLOOP.
ENDFUNCTION.
*-----------------------------------------------------------------------
* FORM move_covp_to_other
*-----------------------------------------------------------------------
FORM move_covp_to_other USING p_wa_covp LIKE covp
CHANGING p_wa LIKE covp.
MOVE p_wa_covp-kokrs TO p_wa-kokrs.
MOVE p_wa_covp-belnr TO p_wa-belnr.
MOVE p_wa_covp-buzei TO p_wa-buzei.
MOVE p_wa_covp-perio TO p_wa-perio.
MOVE p_wa_covp-wtgbtr TO p_wa-wtgbtr.
MOVE p_wa_covp-wogbtr TO p_wa-wogbtr.
MOVE p_wa_covp-wkgbtr TO p_wa-wkgbtr.
MOVE p_wa_covp-megbtr TO p_wa-megbtr.
MOVE p_wa_covp-mbgbtr TO p_wa-mbgbtr.
MOVE p_wa_covp-objnr TO p_wa-objnr.
MOVE p_wa_covp-gjahr TO p_wa-gjahr.
MOVE p_wa_covp-kstar TO p_wa-kstar.
MOVE p_wa_covp-vrgng TO p_wa-vrgng.
MOVE p_wa_covp-twaer TO p_wa-twaer.
MOVE p_wa_covp-owaer TO p_wa-owaer.
MOVE p_wa_covp-meinh TO p_wa-meinh.
MOVE p_wa_covp-meinb TO p_wa-meinb.
MOVE p_wa_covp-werks TO p_wa-werks.
MOVE p_wa_covp-matnr TO p_wa-matnr.
MOVE p_wa_covp-budat TO p_wa-budat.
ENDFORM. "move_covp_to_otherAny suggestions are welcome.
Tamá
‎2008 Apr 09 12:34 PM
Hi,
Enhance the Speed of the query in alterting the READ TABLE.
CHECK THELINK.
[Reading Lines of Tables|http://help.sap.com/saphelp_nw70/helpdata/en/fc/eb35f8358411d1829f0000e829fbfe/content.htm]
Regards,
Balakumar G.
Reward Points if Helpful.
‎2008 Apr 09 12:34 PM
Hi,
Enhance the Speed of the query in alterting the READ TABLE.
CHECK THELINK.
[Reading Lines of Tables|http://help.sap.com/saphelp_nw70/helpdata/en/fc/eb35f8358411d1829f0000e829fbfe/content.htm]
Regards,
Balakumar G.
Reward Points if Helpful.
‎2008 Apr 09 12:40 PM
I would suggest using LOOP AT....ASSIGNING <fs>.
With this you point to your data rather than putting it into a work area.
This should help you a little.
Regards,
Bert
‎2008 Apr 29 2:34 PM
This statement was slow.
READ TABLE gt_pm_orders INTO wa_pm_orders
WITH KEY aufnr = wa_aufk-aufnr.
IF sy-subrc <> 0.
...
ENDIF.
This code part was storing only those entries, which are not already in this internal table.
I removed it and after the loop I used a DELETE ADJACENT DUPLICATES statement.
It caused a cc. 100 times improvement in the performance. But of course it depends on the number of entries.