Skip to Content
0
Former Member
May 10, 2008 at 09:09 AM

Performance issue

20 Views

Hi friends,

I have an internal table which having > 50000 records, but problem is its taking too much time to get executed. Pl.

chk my below code and suggests me right way. Points will be rewarded.

code.

  • SORT it_pos BY blart descending bschl descending.

SORT it_pos BY zuonr.

LOOP AT it_pos INTO <fs_pos> WHERE blart = 'WE' AND bschl = '96'.

IF <fs_pos>-blart = 'WE' AND <fs_pos>-bschl = '96'.

flag = 'X'.

<fs_bsis>-bukrs = <fs_pos>-bukrs.

<fs_bsis>-hkont = <fs_pos>-hkont.

<fs_bsis>-budat = <fs_pos>-budat.

<fs_bsis>-xref3 = <fs_pos>-xref3.

<fs_bsis>-zuonr = <fs_pos>-zuonr.

<fs_bsis>-blart = <fs_pos>-blart.

<fs_bsis>-bschl = <fs_pos>-bschl.

<fs_bsis>-wrbtr = <fs_pos>-dmshb.

<fs_bsis>-dcnum = <fs_pos>-xblnr.

READ TABLE it_pos INTO wa_pos1 WITH KEY bukrs = <fs_pos>-bukrs

hkont = <fs_pos>-hkont

xref3 = <fs_pos>-xref3

zuonr = <fs_pos>-zuonr

blart = <fs_pos>-blart

bschl = '86'.

IF sy-subrc = 0.

wa_pos1-bstat = 'X'.

MODIFY it_pos FROM wa_pos1 INDEX sy-tabix TRANSPORTING bstat.

<fs_bsis>-we86amt = wa_pos1-dmshb.

<fs_bsis>-wrbtr = <fs_bsis>-wrbtr + <fs_bsis>-we86amt. " added because wrbtr amt has minus sign

IF <fs_bsis>-wrbtr = 0.

CLEAR flag.

ENDIF.

ENDIF.

CLEAR wa_pos1.

READ TABLE it_pos INTO wa_pos1 WITH KEY bukrs = <fs_pos>-bukrs

hkont = <fs_pos>-hkont

xref3 = <fs_pos>-xref3

zuonr = <fs_pos>-zuonr

blart = 'RE'

bschl = '86'.

IF sy-subrc = 0.

wa_pos1-bstat = 'X'.

<fs_bsis>-invnum = wa_pos1-xblnr.

MODIFY it_pos FROM wa_pos1 INDEX sy-tabix TRANSPORTING bstat.

<fs_bsis>-re86amt = wa_pos1-dmshb.

ENDIF.

CLEAR wa_pos1.

READ TABLE it_pos INTO wa_pos1 WITH KEY bukrs = <fs_pos>-bukrs

hkont = <fs_pos>-hkont

xref3 = <fs_pos>-xref3

zuonr = <fs_pos>-zuonr

blart = 'RO'

bschl = '96'.

IF sy-subrc = 0 .

wa_pos1-bstat = 'X'.

MODIFY it_pos FROM wa_pos1 INDEX sy-tabix TRANSPORTING bstat.

<fs_bsis>-ro96amt = wa_pos1-dmshb.

<fs_bsis>-re86amt = <fs_bsis>-re86amt + <fs_bsis>-ro96amt. " added because re86amt has minus sign

IF <fs_bsis>-re86amt = 0.

<fs_bsis>-inv_amt = 0.

ELSE.

<fs_bsis>-inv_amt = <fs_bsis>-re86amt.

ENDIF.

ELSE.

<fs_bsis>-inv_amt = <fs_bsis>-re86amt.

ENDIF.

IF flag = 'X'.

MOVE <fs_bsis>-zuonr+0(10) TO <fs_bsis>-ebeln.

MOVE <fs_bsis>-zuonr+10(5) TO <fs_bsis>-ebelp.

MOVE <fs_bsis>-xref3+4(14) TO <fs_bsis>-mblnr.

APPEND <fs_bsis> TO it_bsis.

ENDIF.

CLEAR: wa_pos1, <fs_bsis>, <fs_pos>,wa_bsis1,flag,flag1.

ENDIF.

ENDLOOP.

Thanks in advance,

senthil kumar.s