‎2007 Jul 25 2:38 PM
Hi folks,
LOOP AT IT_EKPO INTO WA_EKPO.
SELECT single kunnr
ADRNR
FROM KNA1
INTO CORRESPONDING FIELDS OF wa_KNA1 WHERE KUNNR = wa_EKPO-KUNNR.
IF SY-SUBRC = 0.
SELECT SINGLE ADDRNUMBER
NAME1
STREET
HOUSE_NUM1
MC_CITY1
POST_CODE1
REGION
COUNTRY
FROM ADRC INTO CORRESPONDING FIELDS OF WA_ADRC1
WHERE ADDRNUMBER = WA_KNA1-ADRNR.
ENDIF.
ENDLOOP.
how can i make this code more efficient.
regards
jana
‎2007 Jul 25 2:41 PM
hi
<b>read table IT_EKPO INTO WA_EKPO .</b>
SELECT single kunnr
ADRNR
FROM KNA1
INTO CORRESPONDING FIELDS OF wa_KNA1 WHERE KUNNR = wa_EKPO-KUNNR
IF SY-SUBRC = 0.
SELECT SINGLE ADDRNUMBER
NAME1
STREET
HOUSE_NUM1
MC_CITY1
POST_CODE1
REGION
COUNTRY
FROM ADRC INTO CORRESPONDING FIELDS OF WA_ADRC1
regards
ravish
<b>plz dont forget to reward points if helpful</b>
‎2007 Jul 25 2:41 PM
hi
<b>read table IT_EKPO INTO WA_EKPO .</b>
SELECT single kunnr
ADRNR
FROM KNA1
INTO CORRESPONDING FIELDS OF wa_KNA1 WHERE KUNNR = wa_EKPO-KUNNR
IF SY-SUBRC = 0.
SELECT SINGLE ADDRNUMBER
NAME1
STREET
HOUSE_NUM1
MC_CITY1
POST_CODE1
REGION
COUNTRY
FROM ADRC INTO CORRESPONDING FIELDS OF WA_ADRC1
regards
ravish
<b>plz dont forget to reward points if helpful</b>
‎2007 Jul 25 2:45 PM
Hi Janapathi,
<b>Try this out,</b> Avoiding <b>'CORRESPONDING FIELDS OF'</b> would definitely improve the performance.
LOOP AT IT_EKPO INTO WA_EKPO.
SELECT single kunnr
ADRNR
FROM KNA1
INTO (wa_kna1-kunnr, wa_kna1-adrnr) WHERE KUNNR = wa_EKPO-KUNNR.
IF SY-SUBRC = 0.
SELECT SINGLE ADDRNUMBER
NAME1
STREET
HOUSE_NUM1
MC_CITY1
POST_CODE1
REGION
COUNTRY
FROM ADRC INTO
(WA_ADRC1-ADDRNUMBER,
WA_ADRC1-NAME1,
WA_ADRC1-STREET,
WA_ADRC1-HOUSE_NUM1,
WA_ADRC1-MC_CITY1,
WA_ADRC1-POST_CODE1,
WA_ADRC1-REGION,
WA_ADRC1-COUNTRY)
WHERE ADDRNUMBER = WA_KNA1-ADRNR.
ENDIF.
ENDLOOP.
<b>Reward points if this helps,</b>
Kiran
‎2007 Jul 25 2:47 PM
Hi Jana,
A solution is maybe the creation of an internal table for KNA1 table
SELECT kunnr
ADRNR
FROM KNA1
INTO CORRESPONDING FIELDS OF table it_KNA1
for all entries in it_ekpo WHERE KUNNR = wa_EKPO-KUNNR.
loop at it_kna1 into wa_kna1.
SELECT SINGLE ADDRNUMBER
NAME1
STREET
HOUSE_NUM1
MC_CITY1
POST_CODE1
REGION
COUNTRY
FROM ADRC INTO CORRESPONDING FIELDS OF WA_ADRC1
WHERE ADDRNUMBER = WA_KNA1-ADRNR.
ENDLOOP.
This way the selection to kna1 is much faster. Afterward you only have to loop your kna1 internal table and get the address.
Hope this helps.
Regards,
Marcelo Moreira
‎2007 Jul 25 2:51 PM
HI,
1) LOOP AT IT_EKPO INTO WA_EKPO.
SELECT single kunnr
ADRNR
FROM KNA1
INTO ( wa_KNA1-kunnr , wa_kna1-adrnr )WHERE KUNNR = wa_EKPO-KUNNR.
IF SY-SUBRC = 0.
SELECT SINGLE ADDRNUMBER
NAME1
STREET
HOUSE_NUM1
MC_CITY1
POST_CODE1
REGION
COUNTRY
FROM ADRC (WA_ADRC1-addrnumber,wa_adrc1-name1......)
WHERE ADDRNUMBER = WA_KNA1-ADRNR.
ENDIF.
ENDLOOP
2)Using For All entries and read.
take an internal table same as IT_EKPO
it_ekpo_temp[] = it_ekpo.
sort it_ekpo_temp by kunnr.
delete adjcent duplidated form it_ekpo-temp comparing kunnr.
if not it_ekpo_temp[] is initial.
SELECT single kunnr
ADRNR
FROM KNA1
for all entries in it_ekpo_temp
INTO table it_KNA1
WHERE KUNNR = it_EKPO_temp-KUNNR
endif.
if not it_kna1[] is initial.
SELECT SINGLE ADDRNUMBER
NAME1
STREET
HOUSE_NUM1
MC_CITY1
POST_CODE1
REGION
COUNTRY
FROM ADRC
for all entries in it_kna1
into table it_ADRC1
WHERE ADDRNUMBER = it_kna1-ADRNR.
ENDIF.
endif.
sort it_kna1 by kunnr.
sort it_adrc1 by adrnr.
loop at it_ekpo.
read table it_kna1 with key kunnr = it_ekpo-kunnr.
if sy-subrc eq 0.
read table it_adrc1 with key adrnr = it_kna1-adrnr.
endif.
endif.
Thansk
Mahesh
‎2007 Jul 25 2:56 PM
Hi Janapathi,
There are two flaws in your code:
SAP dose not appreciate:
1. using corresponding fields in select
2. and using select in loop!. (you can check how much performance is decreased if you are using this. use this if you have already tried 99 ways).
first of all take into a separate inernal table for addrnumber and values against addrnumber, then read it. your program will smile.
regards,
Krishnendu