‎2007 Jun 09 5:40 AM
Hi,
In my programme i am getting less performance
So pls suggest me how to increase my programme performance.
TABLES:
marc,
makt,
mara,
ekko,
EKPO,
t604,
t023t,
t001w.
TYPE-POOLS: slis.
SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-001.
SELECT-OPTIONS:
s_werks FOR marc-werks,
s_spras FOR makt-spras,
s_matnr FOR mara-matnr,
s_ersda FOR mara-ersda,
s_vpsta FOR mara-vpsta,
s_matkl FOR mara-matkl,
s_land1 FOR t604-land1,
s_stawn FOR marc-stawn,
s_wgbez FOR t023t-wgbez,
s_ebeln FOR ekko-ebeln,
s_aedat FOR ekko-ebeln,
s_lifnr FOR ekko-lifnr.
SELECTION-SCREEN END OF BLOCK block1.
DATA: BEGIN OF itab_mara OCCURS 0,
matnr LIKE mara-matnr,
mfrpn LIKE mara-mfrpn,
mfrnr LIKE mara-mfrnr,
matkl LIKE mara-matkl,
werks LIKE marc-werks,
stawn LIKE marc-stawn,
mtver LIKE marc-mtver,
herkl LIKE marc-herkl,
maktx LIKE makt-maktx,
END OF itab_mara.
DATA: BEGIN OF itab_t023t OCCURS 0,
matkl LIKE t023t-matkl,
wgbez LIKE t023t-wgbez,
END OF itab_t023t.
*DATA: BEGIN OF itab_ekpo OCCURS 0,
ebeln LIKE ekpo-ebeln,
matnr LIKE ekpo-matnr,
END OF itab_ekpo.
*DATA: ITAB_EKPO TYPE STANDARD TABLE OF EKPO WITH HEADER LINE.
DATA: BEGIN OF itab_ekpo OCCURS 0,
ebeln LIKE ekpo-ebeln,
matnr LIKE ekpo-matnr,
lifnr LIKE ekko-lifnr,
END OF itab_ekpo.
DATA: BEGIN OF itab_lfa1 OCCURS 0,
lifnr LIKE lfa1-lifnr,
name1 LIKE lfa1-name1,
END OF itab_lfa1.
DATA: BEGIN OF itab_t604 OCCURS 0,
stawn LIKE t604-stawn,
text1 LIKE T604T-text1,
END OF itab_t604.
DATA:BEGIN OF itab_cdpos OCCURS 0,
objectclas LIKE cdpos-objectclas,
objectid LIKE cdpos-objectid,
changenr LIKE cdpos-changenr,
END OF itab_cdpos.
DATA: BEGIN OF itab_cdhdr OCCURS 0,
changenr LIKE cdhdr-changenr,
username LIKE cdhdr-username,
udate LIKE cdhdr-udate,
END OF itab_cdhdr.
*DATA:BEGIN OF itab_makt OCCURS 0,
maktx LIKE makt-maktx,
END OF itab_makt.
DATA: BEGIN OF itab_final OCCURS 0,
werks LIKE marc-werks,
stawn LIKE marc-stawn,
mtver LIKE marc-mtver,
herkl LIKE marc-herkl,
matnr LIKE mara-matnr,
mfrpn LIKE mara-mfrpn,
mfrnr LIKE mara-mfrnr,
matkl LIKE mara-matkl,
ebeln LIKE ekpo-ebeln,
lifnr LIKE ekko-lifnr,
name1 LIKE lfa1-name1,
stawn LIKE t604-stawn,
text1 LIKE T604T-text1,
maktx LIKE makt-maktx,
wgbez LIKE t023t-wgbez,
changenr LIKE cdhdr-changenr,
username LIKE cdhdr-username,
udate LIKE cdhdr-udate,
END OF itab_final.
*
**DATA: wa_marc LIKE itab_marc.
*DATA: wa_mara LIKE itab_mara.
*DATA: wa_ekko LIKE itab_ekko.
*DATA: wa_ekpo LIKE itab_ekpo.
*DATA: wa_lfa1 LIKE itab_lfa1.
*DATA: wa_t604 LIKE itab_t604.
**DATA: wa_makt LIKE itab_makt.
DATA:ve_ausw TYPE c,
ve_lines TYPE i.
DATA: fieldcat TYPE slis_t_fieldcat_alv,
fieldcat_ln LIKE LINE OF fieldcat.
DATA : col_pos TYPE i.
AT SELECTION-SCREEN ON s_werks.
IF s_werks-low <> space.
SELECT SINGLE * from T001W
WHERE werks = s_werks-low.
IF sy-subrc <> 0.
MESSAGE e011 WITH 'Invalid Plant Code'
s_werks-low '' ''.
ENDIF.
ENDIF.
IF s_werks-high <> space.
SELECT SINGLE * from T001W
WHERE werks = s_werks-high.
IF sy-subrc <> 0.
MESSAGE e011 WITH 'Invalid Plant Code'
s_werks-high '' ''.
ENDIF.
ENDIF.
AT SELECTION-SCREEN ON s_matnr.
IF s_matnr-low <> space.
SELECT single * from MARA
WHERE matnr = s_matnr-low.
IF sy-subrc <> 0.
MESSAGE e011 WITH 'Invalid Material number'
s_matnr '' ''.
ENDIF.
ENDIF.
IF s_matnr-high <> space.
SELECT single * from MARA
WHERE matnr = s_matnr-high.
IF sy-subrc <> 0.
MESSAGE e011 WITH 'Invalid Material number'
s_matnr-high '' ''.
ENDIF.
ENDIF.
START-OF-SELECTION.
PERFORM extract_data.
PERFORM build_print.
PERFORM build_fieldcat.
PERFORM start_list_viewer.
.
END-OF-SELECTION.
----
FORM extract_data *
----
........ *
----
FORM extract_data.
SELECT amatnr amfrpn amfrnr amatkl
bwerks bstawn bmtver bherkl
c~maktx
INTO corresponding fields of table itab_mara
FROM ( mara
as a
INNER JOIN marc as b
on amatnr = bmatnr )
INNER JOIN makt as c
on amatnr = cmatnr
WHERE werks IN s_werks
AND a~matnr IN s_matnr
AND b~stawn IN s_stawn
AND a~ersda IN s_ersda
AND a~matkl IN s_matkl
AND c~spras IN s_spras.
clear: itab_mara.
SELECT ebeln matnr
INTO CORRESPONDING FIELDS OF table itab_ekpo
from ekpo
FOR ALL ENTRIES IN itab_mara
WHERE matnr = itab_mara-matnr.
*
DELETE ADJACENT DUPLICATES FROM itab_ekpo.
*
SELECT lifnr ebeln
INTO table itab_ekko
from ekko
FOR ALL ENTRIES IN itab_ekpo
WHERE ebeln = itab_ekpo-ebeln.
SELECT wgbez matkl
INTO table itab_t023t
FROM t023t
FOR ALL ENTRIES IN itab_mara
WHERE matkl = itab_mara-matkl
AND wgbez IN s_wgbez.
SELECT aebeln amatnr b~lifnr
INTO CORRESPONDING FIELDS OF table itab_ekpo
from ekpo as a
INNER JOIN ekko as b
ON aebeln = bebeln
FOR ALL ENTRIES IN itab_mara
WHERE a~matnr = itab_mara-matnr.
sort itab_mara.
SELECT lifnr name1
INTO table itab_lfa1
FROM lfa1
FOR ALL ENTRIES IN itab_mara
WHERE lifnr = itab_mara-mfrnr
OR lifnr = itab_ekpo-lifnr.
sort itab_ekko.
SELECT lifnr name1
appending table itab_lfa1
FROM LFA1
FOR ALL ENTRIES IN itab_ekko
WHERE lifnr = itab_ekko-lifnr.
*
sort itab_lfa1.
SELECT astawn btext1
INTO table itab_t604
FROM t604 as a
INNER JOIN t604t as b
on astawn = bstawn
FOR ALL ENTRIES IN itab_mara
WHERE a~stawn = itab_mara-stawn.
SELECT maktx
INTO table itab_makt
FROM makt
FOR ALL ENTRIES IN itab_mara
WHERE matnr = itab_mara-matnr.
SELECT objectclas objectid changenr
INTO TABLE itab_cdpos
from cdpos
WHERE fname = 'stawn'
AND tabname = 'marc'.
IF sy-subrc = 0.
SELECT username udate changenr
INTO TABLE itab_cdhdr
FROM cdhdr
FOR ALL ENTRIES IN itab_cdpos
WHERE changenr = itab_cdpos-changenr
AND OBJECTCLAS = itab_cdpos-objectclas
AND objectid = itab_cdpos-objectid.
ENDIF.
ENDFORM.
FORM build_print.
LOOP AT itab_mara ."into wa_mara.
itab_final-matnr = itab_mara-matnr.
itab_final-mfrpn = itab_mara-mfrpn.
itab_final-mfrnr = itab_mara-mfrnr.
itab_final-matkl = itab_mara-matkl.
itab_final-werks = itab_mara-werks.
itab_final-stawn = itab_mara-stawn.
itab_final-mtver = itab_mara-mtver.
itab_final-herkl = itab_mara-herkl.
itab_final-maktx = itab_mara-maktx.
READ TABLE itab_t023t with key matkl = itab_final-matkl.
itab_final-wgbez = itab_t023t-wgbez.
READ TABLE itab_ekpo with key matnr = itab_final-matnr.
itab_final-ebeln = itab_ekpo-ebeln.
itab_final-lifnr = itab_ekpo-lifnr.
READ TABLE itab_ekko with key ebeln = itab_ekpo-ebeln.
itab_final-lifnr = itab_ekko-lifnr.
READ TABLE itab_lfa1 with key lifnr = itab_ekpo-lifnr.
itab_final-lifnr = itab_lfa1-lifnr.
itab_final-name1 = itab_lfa1-name1.
READ TABLE itab_t604 WITH KEY stawn = itab_mara-stawn.
itab_final-text1 = ITAB_t604-text1.
READ TABLE itab_cdhdr WITH KEY changenr = itab_cdpos-changenr.
itab_final-username = itab_cdhdr-username.
itab_final-udate = itab_cdhdr-udate.
APPEND itab_final.
ENDLOOP.
ENDFORM.
Thanks,
SK
‎2007 Jun 09 6:07 AM
please use ST05 and find out the unwanted declaration and complex select query and clrear it.
regards
prabhu
‎2007 Jun 09 6:07 AM
please use ST05 and find out the unwanted declaration and complex select query and clrear it.
regards
prabhu
‎2007 Jun 09 6:08 AM
Hi
I hope the the select statements of CDHDR and CDPOS is wrong
Since they consume lot of time you should fetch with all key fields
first write select statement to CDHDR and then to CDPOS
pass the OBJECTCLAS 'MATERIAL' and OBJECT ID as MATERIAL NUMBER
and also you can pass the TCODE field also.
see the right selects.
IF sy-subrc = 0.
if not itab_mara[] is initial.
SELECT object class objectid changenr username udate
INTO TABLE itab_cdhdr
FROM cdhdr
FOR ALL ENTRIES IN itab_mara
WHERE objectclas = 'MATERIAL' and
objectid = itab_mara-matnr.
if sy-subrc = 0.
SELECT objectclas objectid changenr
INTO TABLE itab_cdpos
from cdpos
forall entries in itab_cdhdr
WHERE objectclas = 'MATERIAL' and
objectid = itab_cdhdr-objectid and
changenr = itab_cdhdr-changenr and
fname = 'STAWN'
AND tabname = 'MARC.
ENDIF.
endif.
like this write and see the effect.
<b>Reward points for useful Answers</b>
Regards
Anji
‎2007 Jun 09 6:25 AM
Anji,
According to requirement my aim is to fetch username and date.
So i will first get objectclass ,objectid , changenr from CDPOS table
Where tabnam = marc and fname = stawn.
Then giving these i will get username and date from cdhdr table.
But i am not getting username and date