Application Development and Automation 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: 
Read only

performance problem in code for MARD data in SAP Retail

Former Member
0 Likes
918

Dear all,

I am getting performance problem in following code.

Can any one guide how to improve the performance problem?

SELECT werks matnr lgort labst FROM mard INTO TABLE gt_mardstk

WHERE labst GT u20190u2019.

LOOP AT gt_mardstk .

gt_transfer-matnr = gt_mardstk-matnr .

gt_transfer-werks = gt_mardstk-werks .

gt_transfer-labst = gt_mardstk-labst .

SHIFT gt_transfer-labst RIGHT UP TO '.'.

SHIFT gt_transfer-labst RIGHT.

SHIFT gt_transfer-labst LEFT DELETING LEADING space.

APPEND gt_transfer .

DELETE gt_mardstk WHERE matnr = gt_transfer-matnr

AND werks = gt_transfer-werks

AND labst = gt_transfer-labst.

CLEAR gt_transfer .

ENDLOOP .

DESCRIBE TABLE gt_transfer LINES lv_cnt .

IF lv_cnt > 0 .

PERFORM open_file USING p_file.

LOOP AT gt_transfer .

CONDENSE gt_transfer-labst.

MOVE-CORRESPONDING gt_transfer TO ls_transfer .

MOVE ls_transfer TO lv_string.

TRANSFER lv_string TO p_file .

ENDLOOP .

CLOSE DATASET p_file

Thanks

6 REPLIES 6
Read only

Former Member
0 Likes
806

Did you check Code Inspector and SE30 yourself to figure out potential issues yourself?

Read only

0 Likes
806

In SE30

Evaluate option saying:

ABAP 55.1%

Database 10%

System 34.9%

Do you see any kind of program improvement possibility?

This program is taking more then 10 Hr run and still running,

But total records selected from MARD is 600000.

Thanks

Read only

Former Member
0 Likes
806

Why are you specifying where condition in trhe Delete command below, it is already in the same loop , so just put delete.


LOOP AT gt_mardstk .
gt_transfer-matnr = gt_mardstk-matnr .
gt_transfer-werks = gt_mardstk-werks .
gt_transfer-labst = gt_mardstk-labst .
SHIFT gt_transfer-labst RIGHT UP TO '.'.
SHIFT gt_transfer-labst RIGHT.
SHIFT gt_transfer-labst LEFT DELETING LEADING space.
APPEND gt_transfer .


DELETE gt_mardstk WHERE matnr = gt_transfer-matnr    <-------------------
AND werks = gt_transfer-werks     <-----------------
AND labst = gt_transfer-labst.       <--------------
CLEAR gt_transfer .
ENDLOOP .

Read only

Former Member
0 Likes
806

No Solution I think, other then I have to run report for small stores variant, not for bulk run.

I still appreciate if any other solution.

Regards

Read only

0 Likes
806

Did you see the post by MxG? I think that's where your problem lies.

Rob

Read only

0 Likes
806

Thanks for reply, I just combined both loop like follows,

and program takes only 205 sec compared to 44359 with old code.


    SELECT werks matnr lgort labst FROM mard 
                                          INTO TABLE gt_mardstk
                                                WHERE labst GT v_labst.
 

    DESCRIBE TABLE gt_mardstk LINES lv_cnt .
    IF lv_cnt > 0 .
      PERFORM open_file USING p_file.

      LOOP AT gt_mardstk .
        gt_transfer-matnr = gt_mardstk-matnr .
        gt_transfer-werks = gt_mardstk-werks .
        gt_transfer-labst = gt_mardstk-labst .
        SHIFT gt_transfer-labst RIGHT UP TO '.'.
        SHIFT gt_transfer-labst RIGHT.
        SHIFT gt_transfer-labst LEFT DELETING LEADING space.

        IF gt_transfer-labst NE 0.
          CONDENSE gt_transfer-labst.
          MOVE-CORRESPONDING gt_transfer TO ls_transfer .
          MOVE ls_transfer TO lv_string.
          TRANSFER lv_string TO p_file .
        ENDIF.
        CLEAR  gt_transfer .
      ENDLOOP .