24.2.11

SAP Note 23382 - Clearing: Fast selection via allocation number

Symptom:

Key words: F-28, F-30, F-31, FB05, SAPMF05A, SAPMF05B
Runtime problems with clearing items/incoming payments. The selection is made via the allocation number. If there are a large number of open items belonging to an account, it takes a long time until the selected items are found.

Cause and prerequisites

The data in the allocation number is stored in upper/lower case. The selection entry is made in upper case (due to the variability). Therefore the selection cannot be directly passed on to the database. Instead a restriction is carried out in the program.

Solution
If only upper case letters and numbers are stored in the allocation number, you can make the following modification:

1. /NSE38 - MF05BTOP
FIND RANGES
ranges: r_budat for rfops-budat,
r_bldat for rfops-bldat,
r_xblnr for rfops-xblnr,
r_belnr for rfops-belnr,
r_filkd for rfops-filkd,
r_zuonr for rfops-zuonr, <<<<<<<<<< insert
r_anfbn for rfops-anfbn.


2. /NSE38 - MF05BFS0
FIND SELTAB_ABARBEITEN

form seltab_abarbeiten.

ranges: x_zuonr for rfops-zuonr. <<<<<<<<<<< insert
data: fl_select(1) type c. <<<<<<<<<<< insert

...

case rf05a-agkoa.
when 'D'.
if rf05a-agums = space. <<<<<<<<<<<< insert
refresh x_zuonr. <<<<<<<<<<<< insert
loop at r_zuonr. <<<<<<<<<<<< insert
move-corresponding r_zuonr to x_zuonr. <<<<<<<<<<<< insert
append x_zuonr. <<<<<<<<<<<< insert
describe table x_zuonr lines sy-tfill. <<<<<<<<<<<< insert
if sy-tfill = 50. <<<<<<<<<<<< insert
select * into bsid from bsid <<<<<< <<<<<< insert
where kunnr = kna1-kunnr <<<<<< <<<<<< insert
and bukrs = rf05a-agbuk <<<<<< <<<<<< insert
and augdt = '00000000' <<<<<< <<<<<< insert
and augbl = space <<<<<< <<<<<< insert
and umsks = space <<<<<< <<<<<< insert
and umskz = space <<<<<< <<<<<< insert
and belnr in r_belnr <<<<<< <<<<<< insert
and xblnr in r_xblnr <<<<<< <<<<<< insert
and budat in r_budat <<<<<< <<<<<< insert
and bldat in r_bldat <<<<<< <<<<<< insert
and filkd in r_filkd <<<<<< <<<<<< insert
and zuonr in x_zuonr <<<<<< <<<<<< insert
and anfbn in r_anfbn. <<<<<<<<<<<< insert
perform seltab_abarbeiten_s1. <<<<<<<<<<<< insert
endselect. <<<<<<<<<<<< insert
refresh x_zuonr. <<<<<<<<<<<< insert
endif. <<<<<<<<<<<< insert
endloop. <<<<<<<<<<<< insert

fl_select = space. <<<<<<<<<<<< insert
describe table r_zuonr lines sy-tfill. <<<<<<<<<<<< insert
if sy-tfill = 0. <<<<<<<<<<<< insert
fl_select = 'X'. <<<<<<<<<<<< insert
endif. <<<<<<<<<<<< insert
describe table x_zuonr lines sy-tfill. <<<<<<<<<<<< insert
if sy-tfill > 0 or fl_select <> space. <<<<<<<<<<<< insert
select * into bsid from bsid <<< <<<<<<<<< insert
where kunnr = kna1-kunnr <<< <<<<<<<<< insert
and bukrs = rf05a-agbuk <<< <<<<<<<<< insert
and augdt = '00000000' <<< <<<<<<<<< insert
and augbl = space <<< <<<<<<<<< insert
and umsks = space <<< <<<<<<<<< insert
and umskz = space <<< <<<<<<<<< insert
and belnr in r_belnr <<< <<<<<<<<< insert
and xblnr in r_xblnr <<< <<<<<<<<< insert
and budat in r_budat <<< <<<<<<<<< insert
and bldat in r_bldat <<< <<<<<<<<< insert
and filkd in r_filkd <<< <<<<<<<<< insert
and zuonr in x_zuonr <<< <<<<<<<<< insert
and anfbn in r_anfbn. <<<<<<<<<<<< insert
perform seltab_abarbeiten_s1. <<<<<<<<<<<< insert
endselect. <<<<<<<<<<<< insert
endif. <<<<<<<<<<<< insert
else. <<<<<<<<<<<< insert
select * into bsid from bsid
where kunnr = kna1-kunnr
and bukrs = rf05a-agbuk
and augdt = '00000000'
and augbl = space
and umsks between umsks_von and umsks_bis
and belnr in r_belnr
and xblnr in r_xblnr
and budat in r_budat
and bldat in r_bldat
and filkd in r_filkd
and anfbn in r_anfbn.
perform seltab_abarbeiten_s1.
endselect.
endif. <<<<<<<<<<<< insert
when 'K'.
if rf05a-agums = space. <<<<<<<<<<<< insert
refresh x_zuonr. <<<<<<<<<<<< insert
loop at r_zuonr. <<<<<<<<<<<< insert
move-corresponding r_zuonr to x_zuonr. <<<<<<<<<<<< insert
append x_zuonr. <<<<<<<<<<<< insert
describe table x_zuonr lines sy-tfill. <<<<<<<<<<<< insert
if sy-tfill = 50. <<<<<<<<<<<< insert
select * into bsik from bsik <<<<<<<<< <<< insert
where lifnr = lfa1-lifnr <<<<<<<<< <<< insert
and bukrs = rf05a-agbuk <<<<<<<<< <<< insert
and augdt = '00000000' <<<<<<<<< <<< insert
and augbl = space <<<<<<<<< <<< insert
and umsks = space <<<<<<<<< <<< insert
and umskz = space <<<<<<<<< <<< insert
and belnr in r_belnr <<<<<<<<< <<< insert
and xblnr in r_xblnr <<<<<<<<< <<< insert
and budat in r_budat <<<<<<<<< <<< insert
and bldat in r_bldat <<<<<<<<< <<< insert
and filkd in r_filkd <<<<<<<<< <<< insert
and zuonr in x_zuonr <<<<<<<<< <<< insert
and anfbn in r_anfbn. <<<<<<<<<<<< insert
perform seltab_abarbeiten_s1. <<<<<<<<<<<< insert
endselect. <<<<<<<<<<<< insert
refresh x_zuonr. <<<<<<<<<<<< insert
endif. <<<<<<<<<<<< insert
endloop. <<<<<<<<<<<< insert

fl_select = space. <<<<<<<<<<<< insert
describe table r_zuonr lines sy-tfill. <<<<<<<<<<<< insert
if sy-tfill = 0. <<<<<<<<<<<< insert
fl_select = 'X'. <<<<<<<<<<<< insert
endif. <<<<<<<<<<<< insert
describe table x_zuonr lines sy-tfill. <<<<<<<<<<<< insert
if sy-tfill > 0 or fl_select <> space. <<<<<<<<<<<< insert
select * into bsik from bsik <<< <<<<<<<<< insert
where lifnr = lfa1-lifnr <<< <<<<<<<<< insert
and bukrs = rf05a-agbuk <<< <<<<<<<<< insert
and augdt = '00000000' <<< <<<<<<<<< insert
and augbl = space <<< <<<<<<<<< insert
and umsks = space <<< <<<<<<<<< insert
and umskz = space <<< <<<<<<<<< insert
and belnr in r_belnr <<< <<<<<<<<< insert
and xblnr in r_xblnr <<< <<<<<<<<< insert
and budat in r_budat <<< <<<<<<<<< insert
and bldat in r_bldat <<< <<<<<<<<< insert
and filkd in r_filkd <<< <<<<<<<<< insert
and zuonr in x_zuonr <<< <<<<<<<<< insert
and anfbn in r_anfbn. <<<<<<<<<<<< insert
perform seltab_abarbeiten_s1. <<<<<<<<<<<< insert
endselect. <<<<<<<<<<<< insert
else. <<<<<<<<<<<< insert
select * into bsik from bsik
where lifnr = lfa1-lifnr
and bukrs = rf05a-agbuk
and augdt = '00000000'
and augbl = space
and umsks between umsks_von and umsks_bis
and belnr in r_belnr
and xblnr in r_xblnr
and budat in r_budat
and bldat in r_bldat
and filkd in r_filkd
and anfbn in r_anfbn.
perform seltab_abarbeiten_s1.
endselect.
endif. <<<<<<<<<<<< insert

FIND SELTAB_RANGES
form seltab_ranges.
refresh: r_budat, r_bldat, r_xblnr, r_belnr, r_filkd, r_anfbn.
refresh: r_zuonr. <<<<<<<<<<<<<<<<<<<<<<<<<<<< insert
last_nam = space.
loop at seltab.
if last_nam = seltab-nam
or last_nam = space.
last_nam = seltab-nam.
else.
last_nam = space.
exit.
endif.
endloop.

*------- Bei eindeutigem Kriterium Ranges fuellen ----
case last_nam.
when 'ZUONR'. <<<<<<<<<<<< insert
loop at seltab. <<<<<<<<<<<< insert
clear r_zuonr. <<< <<<<<<<<< insert
if seltab-str eq space <<<<<< insert
and seltab-von co '0123456789.-/ ' <<<<<< insert
and seltab-bis co '0123456789.-/ '. <<<<<< insert
r_zuonr-low = seltab-von. <<< <<<<<<<<< insert
r_zuonr-high = seltab-bis. <<< <<<<<<<<< insert
r_zuonr-sign = 'I'. <<<< <<<<<<<< insert
r_zuonr-option = kon_bt. << <<<<<<<<<< insert
append r_zuonr. <<<<<<<<<<<< insert
else. << <<<<<<<<<< insert
refresh r_zuonr. <<<<<<<<<<<< insert
exit. <<<<<<<<<<<< insert
endif. <<<<<<<<<<<< insert
endloop. <<<<<<<<<<<< insert

No comments:

Post a Comment