04-16-2008 3:52 PM
Hi,
Pls check this piece of code .
My focus is on performance.
Pls help me to improve effeciency of this code.
Moving all the respective internal tables to i_customermaster.
LOOP AT I_KNA1 .
READ TABLE I_ADRC WITH KEY ADDRNUMBER = I_KNA1-ADRNR.
IF SY-SUBRC = 0.
MOVE-CORRESPONDING I_KNA1 TO I_CUSTOMERMASTER.
MOVE-CORRESPONDING I_ADRC TO I_CUSTOMERMASTER.
ENDIF.
READ TABLE I_ADR2 WITH KEY ADDRNUMBER = I_KNA1-ADRNR.
IF SY-SUBRC = 0.
MOVE-CORRESPONDING I_ADR2 TO I_CUSTOMERMASTER.
ENDIF.
READ TABLE I_ADR6 WITH KEY ADDRNUMBER = I_KNA1-ADRNR.
IF SY-SUBRC = 0.
MOVE-CORRESPONDING I_ADR6 TO I_CUSTOMERMASTER.
ENDIF.
READ TABLE I_KNVV WITH KEY KUNNR = I_KNA1-KUNNR.
IF SY-SUBRC = 0.
MOVE-CORRESPONDING I_KNVV TO I_CUSTOMERMASTER.
ENDIF.
READ TABLE I_J1IMOCUST WITH KEY KUNNR = I_KNA1-KUNNR.
IF SY-SUBRC = 0.
MOVE-CORRESPONDING I_J1IMOCUST TO I_CUSTOMERMASTER.
ENDIF.
READ TABLE I_KNBK WITH KEY KUNNR = I_KNA1-KUNNR.
IF SY-SUBRC = 0.
MOVE-CORRESPONDING I_KNBK TO I_CUSTOMERMASTER.
ENDIF.
READ TABLE I_KNB1 WITH KEY KUNNR = I_KNA1-KUNNR.
IF SY-SUBRC = 0.
MOVE-CORRESPONDING I_KNB1 TO I_CUSTOMERMASTER.
ENDIF.
READ TABLE I_KNVK WITH KEY KUNNR = I_KNA1-KUNNR.
IF SY-SUBRC = 0.
MOVE-CORRESPONDING I_KNVK TO I_CUSTOMERMASTER.
ENDIF.
READ TABLE I_BNKA WITH KEY BANKS = I_KNBK-BANKS .
IF SY-SUBRC = 0.
MOVE-CORRESPONDING I_BNKA TO I_CUSTOMERMASTER.
ENDIF.
READ TABLE I_TSAD3T WITH KEY TITLE = I_ADRC-TITLE .
IF SY-SUBRC = 0.
MOVE-CORRESPONDING I_TSAD3T TO I_CUSTOMERMASTER.
ENDIF.
APPEND I_CUSTOMERMASTER.
ENDLOOP.
LOOP AT I_CUSTOMERMASTER.
WRITE : / I_CUSTOMERMASTER.
I_CUSTOMERMASTER-ZDATE = SY-DATUM.
I_CUSTOMERMASTER-ZTIME = SY-UZEIT.
I_CUSTOMERMASTER-FLAG = 'X'.
"To indicate the records to be transferred.
ZCUSTOMER_MASTER = I_CUSTOMERMASTER. "To update the Z-Table.
MODIFY ZCUSTOMER_MASTER.
MODIFY I_CUSTOMERMASTER.
ENDLOOP.
04-16-2008 3:57 PM
In palce of Move corresponding just transfer the data in the corresponding fields filed by field .
When records a and b have the exact same structure, it is more efficient to MOVE a TO b than to
MOVE-CORRESPONDING a TO b.
MOVE BSEG TO *BSEG.
Is better than
MOVE-CORRESPONDING BSEG TO *BSEG.
<REMOVED BY MODERATOR>
Edited by: Ashish Paliwal on Apr 16, 2008 8:31 PM
Edited by: Alvaro Tejada Galindo on Apr 16, 2008 1:36 PM
04-16-2008 4:09 PM
When ever u use READ TABLE add BINARY SEARCH clause at the end.Prior to read statement sort itab.
04-16-2008 4:09 PM
Jaya,
It looks to me like all these internal tables are hashed tables. WIth a quick look, I don't see anything blatantly wrong with the code you have posted with the exception of the below.
LOOP AT I_CUSTOMERMASTER.
WRITE : / I_CUSTOMERMASTER.
I_CUSTOMERMASTER-ZDATE = SY-DATUM.
I_CUSTOMERMASTER-ZTIME = SY-UZEIT.
I_CUSTOMERMASTER-FLAG = 'X'.
"To indicate the records to be transferred.
ZCUSTOMER_MASTER = I_CUSTOMERMASTER. "To update the Z-Table.
MODIFY ZCUSTOMER_MASTER.
MODIFY I_CUSTOMERMASTER.
ENDLOOP.
In the above code, Z table is being updated one record at a time. Firstly, MODIFY is an expensive statement. Secondly, updating one at a time, is inefficient.
Look for help on MODIFY statement. Do something like below:
LOOP AT I_CUSTOMERMASTER.
WRITE : / I_CUSTOMERMASTER.
I_CUSTOMERMASTER-ZDATE = SY-DATUM.
I_CUSTOMERMASTER-ZTIME = SY-UZEIT.
I_CUSTOMERMASTER-FLAG = 'X'.
"To indicate the records to be transferred.
ZCUSTOMER_MASTER = I_CUSTOMERMASTER. "To update the Z-Table.
MODIFY I_CUSTOMERMASTER.
ENDLOOP.
MODIFY ZCUSTOMER_MASTER FROM TABLE I_CUSTOMERMASTER.
If there are a lot of records in I_CUSTOMERMASTER table, you may see significant improvement. Otherwise, you have to look elsewhere. Run time analysis (SE30) will help you in that task.
Edited by: Sudhi Karkada on Apr 16, 2008 5:12 PM
04-17-2008 5:59 AM
Hi sudi...
Thanks a lot.
But When I checked after making changes to my code it didnt make any diffrence...Dnt know why.
response time was agin talmost same..