This BAPI is efficient in execution in Loop and needs to be collected manually
data:begin of gs_exch_rate ,
kurst type kurst,
datum type datum,
waers_f type waers,
waers_t type waers,
kursf type kursf,
end of gs_exch_rate.
data gt_exch_rate like standard table of gs_exch_rate with header line.
perform frm_exchangerate_get using 'Z100' lv_datum_i gt_alv-waers gt_alv-waers_bb changing gt_alv-kursf.
form frm_exchangerate_get using uv_kurst uv_datum_i
uv_waers
uv_waers_bb
changing cv_kursf.
data:
ls_exch_rate type bapi1093_0,
ls_return type bapiret1.
read table gt_exch_rate with key kurst = uv_kurst datum = uv_datum_i waers_f = uv_waers waers_t = uv_waers_bb binary search.
if sy-subrc = 0.
cv_kursf = gt_exch_rate-kursf.
else.
call function 'BAPI_EXCHANGERATE_GETDETAIL'
exporting
rate_type = uv_kurst
from_curr = uv_waers
to_currncy = uv_waers_bb
date = uv_datum_i
importing
exch_rate = ls_exch_rate
return = ls_return.
cv_kursf = ls_exch_rate-exch_rate.
gt_exch_rate-kurst = uv_kurst.
gt_exch_rate-datum = uv_datum_i.
gt_exch_rate-waers_f = uv_waers.
gt_exch_rate-waers_t = uv_waers_bb.
gt_exch_rate-kursf = cv_kursf.
insert gt_exch_rate into table gt_exch_rate.
endif.
endform.