‎2006 Feb 20 7:36 AM
HI,
I NEED HELP REGARDING THE IMPROOVEMENT OF THIS CODE
&----
*& Report ZFI_CREDITOR
*&
&----
*&
*&
&----
REPORT zfi_creditor no standard page heading line-size 255.
TABLES: bkpf, bseg.
*************************************************
SELECT-OPTIONS: s_werks FOR bseg-werks,
s_budat FOR bkpf-budat.
PARAMETERS: p_monat LIKE bkpf-monat OBLIGATORY,
p_gjahr LIKE bkpf-gjahr OBLIGATORY.
************************************************
DATA: BEGIN OF it_bkpf OCCURS 0.
INCLUDE STRUCTURE bkpf.
DATA: END OF it_bkpf.
DATA: BEGIN OF it_bseg OCCURS 0.
INCLUDE STRUCTURE bseg.
DATA: END OF it_bseg.
DATA: BEGIN OF it2_bseg OCCURS 0.
INCLUDE STRUCTURE bseg.
DATA: END OF it2_bseg.
DATA: BEGIN OF it3_bseg OCCURS 0.
INCLUDE STRUCTURE bseg.
DATA: END OF it3_bseg.
DATA: BEGIN OF it_lifnr OCCURS 0,
belnr LIKE bseg-belnr,
gjahr LIKE bseg-gjahr,
augbl LIKE bseg-augbl,
lifnr LIKE bseg-lifnr,
END OF it_lifnr.
DATA: BEGIN OF it_final_intr OCCURS 0,
mtart TYPE mtart,
lifnr TYPE lifnr,
ebeln TYPE ebeln,
matnr TYPE matnr,
maktx TYPE maktx,
dmbtr type dmbtr,
hwbas TYPE hwbas,
END OF it_final_intr.
**Addition by deepak
TYPES: BEGIN OF ty_final_intr ,
mtart TYPE mtart,
LIFNR TYPE LIFNR,
EBELN TYPE EBELN,
MATNR TYPE MATNR,
MAKTX TYPE MAKTX,
dmbtr TYPE dmbtr,
hwbas TYPE hwbas,
END OF ty_final_intr.
DATA: BEGIN OF it_temp OCCURS 0,
belnr LIKE bseg-belnr,
augbl LIKE bseg-augbl,
dmbtr LIKE bseg-dmbtr,
hwbas LIKE bseg-hwbas,
END OF it_temp.
DATA: v_dmbtr LIKE bseg-dmbtr,
v_hwbas LIKE bseg-hwbas,
v_augbl LIKE bseg-augbl,
v_belnr LIKE bseg-belnr,
l_augbl LIKE bseg-augbl,
v_amt(13) type c.
DATA: it_final_sum TYPE ty_final_intr,
it_sumtab TYPE HASHED TABLE OF ty_final_intr
WITH UNIQUE KEY mtart .
DATA : it_final TYPE STANDARD TABLE OF ty_final_intr WITH
NON-UNIQUE DEFAULT KEY INITIAL SIZE 0 WITH HEADER LINE.
**Addition by deepak
DATA: g_lifnr TYPE lifnr,
g_mtart TYPE mtart,
g_dmbtr TYPE dmbtr,
g_hwbas TYPE hwbas,
g_maktx type maktx,
g_finalpayable type dmbtr,
g_payable type dmbtr,
gtotal_dmbtr type dmbtr,
gtotal_hwbas type hwbas,
gtotal_payable type dmbtr.
SELECT * FROM bkpf INTO TABLE it_bkpf
WHERE budat IN s_budat
AND monat = p_monat
AND gjahr = p_gjahr
AND blart = 'RE'
AND tcode = 'MIRO'.
*append it_bkpf. "dg
SORT it_bkpf BY belnr.
IF NOT it_bkpf[] IS INITIAL. "DG
SELECT * FROM bseg INTO CORRESPONDING FIELDS
OF table it_lifnr FOR ALL ENTRIES IN it_bkpf
WHERE belnr = it_bkpf-belnr
AND gjahr = it_bkpf-gjahr
AND AUGBL EQ ' '
AND koart = 'K'.
APPEND it_lifnr.
ENDSELECT.
ENDIF.
IF NOT it_lifnr[] IS INITIAL.
SELECT * FROM bseg INTO TABLE it2_bseg
FOR ALL ENTRIES IN it_lifnr
WHERE belnr = it_lifnr-belnr
AND gjahr = it_lifnr-gjahr
AND buzid = 'W'
AND werks IN s_werks.
ENDIF.
IF NOT it2_bseg[] IS INITIAL.
SELECT * FROM bseg INTO TABLE it3_bseg
FOR ALL ENTRIES IN it2_bseg
WHERE belnr = it2_bseg-belnr
AND gjahr = it2_bseg-gjahr
AND buzid = 'T'.
ENDIF.
LOOP AT it2_bseg.
READ TABLE it3_bseg INDEX sy-tabix .
READ TABLE it_lifnr WITH KEY belnr = it2_bseg-belnr.
SELECT SINGLE mtart FROM mara INTO g_mtart
WHERE matnr = it2_bseg-matnr.
select single maktx from makt into g_maktx
where matnr = it2_bseg-matnr.
g_dmbtr = it2_bseg-dmbtr + it3_bseg-dmbtr.
IF it_lifnr-augbl EQ space.
g_hwbas = g_dmbtr.
g_hwbas = 0.
ELSE.
v_augbl = it_lifnr-augbl.
AT NEW belnr.
v_belnr = it2_bseg-belnr.
WHILE v_augbl <> v_belnr .
SELECT SINGLE belnr augbl dmbtr hwbas INTO it_temp
FROM bseg WHERE belnr = v_augbl AND
gjahr = p_gjahr AND
buzei = '001'.
IF sy-subrc = 0.
v_dmbtr = v_dmbtr + it_temp-dmbtr.
v_hwbas = v_hwbas + it_temp-hwbas.
SELECT SINGLE augbl INTO l_augbl
FROM bseg WHERE belnr = v_augbl AND
gjahr = p_gjahr AND
buzei = '002'.
IF sy-subrc = 0.
IF ( l_augbl = v_augbl OR
l_augbl = space ).
EXIT.
ELSE.
v_belnr = v_augbl.
v_augbl = l_augbl.
ENDIF.
ENDIF.
ENDIF.
ENDWHILE.
it_temp-augbl = it_lifnr-augbl.
it_temp-dmbtr = v_dmbtr.
it_temp-hwbas = v_hwbas.
g_hwbas = v_dmbtr. " - g_dmbtr.
APPEND it_temp.
CLEAR: it_temp,v_dmbtr,v_hwbas.
ENDAT.
ENDIF.
MOVE G_MTART TO IT_FINAL_INTR-MTART.
MOVE it_lifnr-lifnr TO it_final_intr-lifnr.
MOVE it2_bseg-ebeln TO it_final_intr-ebeln.
MOVE it2_bseg-matnr TO it_final_intr-matnr.
MOVE G_maktx TO IT_FINAL_INTR-Maktx.
MOVE g_dmbtr TO it_final_intr-dmbtr.
if g_hwbas gt g_dmbtr.
move g_dmbtr to it_final_intr-hwbas.
else.
MOVE g_hwbas TO it_final_intr-hwbas.
endif.
MOVE-CORRESPONDING it_final_intr TO it_final.
COLLECT it_final INTO it_sumtab. "DG
CLEAR: it_final.
*APPEND IT_FINAL.
APPEND it_final_intr.
CLEAR: it_final_intr.
ENDLOOP.
SORT it_final_intr BY mtart.
FORMAT INTENSIFIED OFF.
skip.
uline at /01(67).
FORMAT COLOR = 5 intensified.
write: : /01 '|',
03 'Merch. Category',
19 '|',
20 'Tot Amt',
34 '|',
35 'Amt Paid',
50 '|',
51 'Pending Payable',
67 '|'.
uline at /01(67).
LOOP AT it_sumtab INTO it_final_sum.
FORMAT COLOR = 4 intensified.
g_finalpayable = it_final_sum-dmbtr - it_final_sum-hwbas.
write: : /01 '|',
03 it_final_sum-mtart,
19 '|',
20 it_final_sum-dmbtr left-justified ,
34 '|',
35 it_final_sum-hwbas left-JUSTIFIED,
50 '|',
51 g_finalpayable,
67 '|'.
uline at /01(67).
ENDLOOP.
DATA: V_VAR(68) TYPE C,
v_mtart like mara-mtart.
AT LINE-SELECTION.
read line sy-lilli field value
it_final_sum-mtart into v_mtart.
if sy-subrc = 0.
FORMAT INTENSIFIED OFF.
skip.
uline at /01(147).
FORMAT COLOR = 5 intensified.
write: : /01 '|',
02 'Material type',
19 '|',
20 'Account Number ',
34 '|',
35 'Purchasing Document ',
58'|',
59 'Material Number',
80 '|',
81 'Material description',
104 '|',
105 'Amount',
117 '|',
118 'Amount Paid',
130 '|',
132 'Pending Payable',
147 '|'.
uline at /01(147).
*sort it_final_intr by lifnr.
loop at it_final_intr where mtart = v_mtart.
FORMAT COLOR = 4 intensified.
g_payable = it_final_intr-DMBTR - it_final_intr-HWBAS.
write: : /01 '|',
02 it_final_intr-MTART,
19 '|',
20 it_final_intr-LIFNR,
34 '|',
35 it_final_intr-EBELN ,
58'|',
59 it_final_intr-MATNR,
80 '|',
81 it_final_intr-MAKTX,
104 '|',
105 it_final_intr-DMBTR left-justified,
117 '|',
118 it_final_intr-HWBAS left-justified,
130 '|',
132 g_payable left-justified,
147 '|'.
gtotal_dmbtr = gtotal_dmbtr + it_final_intr-DMBTR.
gtotal_hwbas = gtotal_hwbas + it_final_intr-HWBAS.
gtotal_payable = gtotal_payable + g_payable.
uline at /01(147).
at end of lifnr.
Format Color 3.
write:/01 '|',
30 'Total Amout for vendor', it_final_intr-LIFNR,
104'|',
105 gtotal_dmbtr left-justified,
117 '|',
118 gtotal_hwbas left-justified,
130 '|',
132 gtotal_payable left-justified,
147 '|'.
clear gtotal_dmbtr.
clear gtotal_hwbas.
clear gtotal_payable.
uline at /01(147).
ENDAT.
endloop.
endif.
HELP ME
‎2006 Feb 20 8:00 AM
SELECT * FROM bkpf INTO TABLE it_bkpf
WHERE budat IN s_budat
AND monat = p_monat
AND gjahr = p_gjahr
AND blart = 'RE'
AND tcode = 'MIRO'.--- Include key fields in your selection criteria..
SELECT * FROM bseg INTO CORRESPONDING FIELDS
OF table it_lifnr FOR ALL ENTRIES IN it_bkpf
WHERE belnr = it_bkpf-belnr
AND gjahr = it_bkpf-gjahr
* AND AUGBL EQ ' '
AND koart = 'K'.
--- Try to avoid INTO CORRESPONDING FIELDS... Use INTO TABLE instead.
And instead of using many conditions in the SELECT statement , use some base condition on the key field and fetch records on matching conditions and then filter your internal table fields applying the selection criteria on the internal table rows. This can improve the performance...
‎2006 Feb 20 8:07 AM
as u know bseg is a cluster table u can use
bsis(open item_ ,bsik(closed item) inplace of bseg ...
and avoid to use select* .. select only those fields which are required .....
‎2006 Feb 20 11:17 AM
dear munish....
do one thing use logical databases ..this can increase ur performance by 50%.
Regards ..]
Madan Gopal Sharma...
‎2006 Feb 20 11:21 AM
Hi Manish,
inspect your code using code inspector .(tran-sci)
program->check->code inspector
for performance improvement
Regards,
Kavitha
‎2006 Feb 20 11:24 AM
dear munish....
do one thing use logical databases ..this can increase ur performance by 50%.
Regards ..]
Madan Gopal Sharma...
‎2006 Feb 20 12:56 PM
Manish,
1) Do only one time data base select for <b>BSEG</b> <b>instead of 3 times</b> , combine all in one and use only internal table to manupulate other details .
Again it has been looped 2 times in BSEG table with SINGLE SELECT instead use the internal table which was populated intially --> this part is going to be more costly.
2)Dont use single select like mara & MAKT when there are many time checking inside a loop instead extract once into internal table and read that from internal table .
3) After doing the changes check with SE30 for performance it will point out the costly area .
Hope this will help
Regards
R. Ramvelu