‎2006 Oct 12 3:01 PM
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
‎2006 Oct 12 3:04 PM
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.
‎2006 Oct 12 3:06 PM
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.
‎2006 Oct 12 3:19 PM
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