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 issue

Former Member
0 Likes
504

hi,

loop at i_tmp_caufv is taken extremly lot of time.can someone suggest me what has to be done.urgently require help and guidence.

i had to get the following info

Production Order Data (Released for Asprova) (ABI TransWork Table)

Order Number CAUFV-AUFNR

Part Type MARA-WRKST (first 11 characters)

Part Number CAUFV-PLNBEZ

Superior Order CAUFV-MAUFNR

Leading Order CAUFV-LEAD_AUFNR

Quantity Left to build (calculated) (CAUFV-GAMNG - AFPO-WEMNG)

Order Quantity CAUFV-GAMNG

Order Due Date CAUFV-GLTRP

Priority (For now, always set to zero. This field may be used in the future.) 0

Setup Attribute MARA-WRKST (last 3 characters)

Delivered Quantity AFPO-WEMNG

Control Key(PP01)

Status(REL) JEST-STAT

annd i hhave written the following code

FORM READ_DATA.

SELECT DISTINCT * FROM CAUFV INTO TABLE I_TMP_CAUFV

WHERE WERKS = 'HADP' AND AUART = 'PP01'.

SELECT * FROM JEST INTO TABLE I_JEST

WHERE STAT IN ('I0002','I0042').

<b>LOOP AT I_TMP_CAUFV.

READ TABLE I_JEST WITH KEY OBJNR = I_TMP_CAUFV-OBJNR.

IF SY-SUBRC = 0.

APPEND I_TMP_CAUFV TO I_CAUFV.

CLEAR I_TMP_CAUFV.

ENDIF.

ENDLOOP.</b>

IF NOT I_CAUFV[] IS INITIAL.

SELECT * FROM M_ORDNA INTO TABLE I_ORDNA FOR ALL ENTRIES IN I_CAUFV

WHERE LEAD_AUFNR = I_CAUFV-AUFNR.

SELECT * FROM MARA INTO TABLE I_MARA FOR ALL ENTRIES IN I_CAUFV

WHERE MATNR = I_CAUFV-PLNBEZ.

SELECT * FROM AFPO INTO TABLE I_AFPO FOR ALL ENTRIES IN I_CAUFV

WHERE AUFNR = I_CAUFV-AUFNR.

LOOP AT I_CAUFV.

READ TABLE I_AFPO WITH KEY AUFNR = I_CAUFV-AUFNR.

IF SY-SUBRC = 0.

DATA_TAB_TEMP-AUFNR = I_CAUFV-AUFNR.

DATA_TAB_TEMP-GAMNG = I_CAUFV-GAMNG.

DATA_TAB_TEMP-GLTRP = I_CAUFV-GLTRP.

DATA_TAB_TEMP-PLNBEZ = I_CAUFV-PLNBEZ.

DATA_TAB_TEMP-CALQTY = DATA_TAB_TEMP-CALQTY + I_CAUFV-GAMNG -

I_AFPO-WEMNG.

DATA_TAB_TEMP-OBJNR = I_CAUFV-OBJNR.

ENDIF.

READ TABLE I_MARA WITH KEY MATNR = I_CAUFV-PLNBEZ.

IF SY-SUBRC = 0.

DATA_TAB_TEMP-WRKST = I_MARA-WRKST.

ENDIF.

READ TABLE I_ORDNA WITH KEY LEAD_AUFNR = I_CAUFV-AUFNR.

I_CAUFV-LEAD_AUFNR = I_ORDNA-LEAD_AUFNR.

I_CAUFV-MAUFNR = I_ORDNA-MAUFNR.

MOVE I_CAUFV-LEAD_AUFNR TO DATA_TAB_TEMP-LEAD_AUFNR.

MOVE I_CAUFV-MAUFNR TO DATA_TAB_TEMP-MAUFNR.

MOVE-CORRESPONDING DATA_TAB_TEMP TO DATA_TAB.

APPEND DATA_TAB.

CLEAR DATA_TAB.

CLEAR CALQTY.

ENDLOOP.

ENDIF.

ENDFORM. " READ_DATA

3 REPLIES 3
Read only

Former Member
0 Likes
447

If you are sure that this is taking lot of time, you can do this:

sort i_jest by objnr.

LOOP AT I_TMP_CAUFV.

READ TABLE I_JEST WITH KEY OBJNR = I_TMP_CAUFV-OBJNR binary search.

IF SY-SUBRC = 0.

APPEND I_TMP_CAUFV TO I_CAUFV.

CLEAR I_TMP_CAUFV.

ENDIF.

ENDLOOP.

Read only

Former Member
0 Likes
447

Hi,

is it that you are using I_JEST internal table to check existence of I_TMP_CAUFV-OBJNR ?

In that case you can select data into I_JEST first.then loop thro it to check data from CAUFV table & append it in internal table.

Thanks.

Mark points if helpful.

Read only

Former Member
0 Likes
447

Try:


<b>sort: I_TMP_CAUFV by objnr,
      i_jest      by objnr.</b>
LOOP AT I_TMP_CAUFV.

  READ TABLE I_JEST WITH KEY OBJNR = I_TMP_CAUFV-OBJNR
    <b>binary search</b>.
  IF SY-SUBRC = 0.
    APPEND I_TMP_CAUFV TO I_CAUFV.
    CLEAR I_TMP_CAUFV.
  ENDIF.

ENDLOOP.

The binary search will make it go much more quickly.

Rob