Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

PERFORMANCE ISSUE

Former Member
0 Likes
770

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

6 REPLIES 6
Read only

Former Member
0 Likes
740
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...

Read only

0 Likes
740

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 .....

Read only

Former Member
0 Likes
740

dear munish....

do one thing use logical databases ..this can increase ur performance by 50%.

Regards ..]

Madan Gopal Sharma...

Read only

Former Member
0 Likes
740

Hi Manish,

inspect your code using code inspector .(tran-sci)

program->check->code inspector

for performance improvement

Regards,

Kavitha

Read only

Former Member
0 Likes
740

dear munish....

do one thing use logical databases ..this can increase ur performance by 50%.

Regards ..]

Madan Gopal Sharma...

Read only

Former Member
0 Likes
740

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