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