Ну как и обещался немного абапа и можно сделать выбор курса валюты по дате документа а не по дате проводки. Для этого идем в тему Enhancement Spot (You are not allowed to view links.
Register or
Login) и читаем как создавать расширения, а именно там берем файлик
Enhancement Spot 2.pdf . Далее будем использовать не явное расширение функции
function fi_currency_check, почему она, ну в общем таки она, в ней есть подпрограмма
*---------------------------------------------------------------------*
* FORM READ_EXCHANGE_RATE *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
form read_exchange_rate using i_kurs
i_hwae
i_basw
i_umrd
i_kuty
changing e_kurs e_fixk.
data: waers like t001-waers,
datum like sy-datum.
*
e_kurs = i_kurs.
if i_kurs is initial.
if not i_hwae is initial.
if i_basw eq char_1.
waers = i_waers.
else.
waers = t001-waers.
endif.
if i_hwae ne waers.
case i_umrd.
when char_1.
datum = i_bldat.
when char_2.
datum = i_budat.
when char_3.
datum = e_wwert.
endcase.
call function 'READ_EXCHANGE_RATE'
exporting
foreign_currency = waers
local_currency = i_hwae
type_of_rate = i_kuty
date = datum
importing
exchange_rate = e_kurs
fixed_rate = e_fixk.
endif.
endif.
endif.
endform. "read_exchange_rate
В эту подпрограмму передается параметр i_umrd, значение этого параметра определяет какую дату брать, исходя из конструкции:
case i_umrd.
when char_1.
datum = i_bldat.
when char_2.
datum = i_budat.
when char_3.
datum = e_wwert.
endcase.
Короче если 1, то дата документа, если 2, дата проводки, если три, то дата вычисляется на более высоком уровне и передается в переменной e_wwert. Так вот при проводке поступления и вообще движения материала, значение идет 3. Ну значит можно вставить неявное расширение и заменить значение i_umrd на цифру 1, дата будет браться из даты документа. К сожалению поменять эту переменную никак нельзя, она как параметр USING, а поэтому придется частично скопировать весь код расчета себе, что не очень хорошо, но если по другому никак, а клиент хочет, то почему бы и нет. В общем виде код будет где-то такой
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1 ) FORM READ_EXCHANGE_RATE, Начало S
*$*$-Start: (1 )--------------------------------------------------------------------------------$*$*
ENHANCEMENT 1 Y_KURS_BLDAT. "active version
DATA: ls_mkpf LIKE mkpf,
l_waers like t001-waers,
l_datum like sy-datum.
FIELD-SYMBOLS: <fs_mkpf> TYPE ANY.
ASSIGN ('(SAPMM07M)MKPF') TO <fs_mkpf>.
CHECK sy-subrc = 0.
ls_mkpf = <fs_mkpf>.
IF ( ls_mkpf-vgart = 'WE' AND ls_mkpf-blart = 'WE' AND
ls_mkpf-blaum = 'PR' AND
ls_mkpf-bldat <> ls_mkpf-budat AND
ls_mkpf-tcode2 = 'MIGO_GR').
e_kurs = i_kurs.
if i_kurs is initial.
if not i_hwae is initial.
if i_basw eq char_1.
l_waers = i_waers.
else.
l_waers = t001-waers.
endif.
if i_hwae ne l_waers.
l_datum = i_bldat. "Всегда дата документа
* case i_umrd.
* when char_1.
* l_datum = i_bldat.
* when char_2.
* l_datum = i_budat.
* when char_3.
* l_datum = e_wwert.
* endcase.
call function 'READ_EXCHANGE_RATE'
exporting
foreign_currency = l_waers
local_currency = i_hwae
type_of_rate = i_kuty
date = l_datum
importing
exchange_rate = e_kurs
fixed_rate = e_fixk.
endif.
endif.
endif.
UNASSIGN <fs_mkpf>.
exit.
ENDIF.
UNASSIGN <fs_mkpf>.
ENDENHANCEMENT.
*$*$-End: (1 )--------------------------------------------------------------------------------$*$*
Ну где-то так, по быстрому проверил работает... но я бы подумал на вашем месте, все таки это вмешательство в работу системы и существенное. Тут клиент сильно не прав, настаивая на таком функционировании системы.