В процессе написания формул для новой калькуляции столкнулся с заморочкой, что стандартные ФМ для получения курса валюты возвращают обратный курс и для того, чтобы получить нормальный курс (например доллара) в рублях нужно разделить 1 на полученный курс. Это неудобство натолкнуло на мысль написать свой ФМ.
PS Это был один из первых опытов, поэтому если у кого появятся предложения и замечания буду рад.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" VALUE(CLIENT) LIKE SY-MANDT DEFAULT SY-MANDT
*" VALUE(DATE) LIKE SYST-DATUM
*" VALUE(FOREIGN_CURRENCY)
*" VALUE(LOCAL_CURRENCY)
*" VALUE(TYPE_OF_KURS) DEFAULT 'MRUB'
*" EXPORTING
*" REFERENCE(KURS) LIKE TCURR-UKURS
*" REFERENCE(DATE_OF_KURS) TYPE D
*" REFERENCE(ERROR) TYPE C
*" EXCEPTIONS
*" NO_KURS_FOUND
*"----------------------------------------------------------------------
*{ INSERT TSTK902643 1
*Конвертируем дату в удобоваримую для таблицы TCURR
DATA: DATC(8) TYPE C.
DATA: gs_tcurr TYPE tcurr.
DATA: t_gdatu like tcurr-gdatu.
if FOREIGN_CURRENCY ne LOCAL_CURRENCY.
CONVERT DATE date INTO INVERTED-DATE datc.
*Выбираем из таблицы TCURR валютный курс по заданной дате
SELECT SINGLE * FROM tcurr INTO gs_tcurr
WHERE kurst eq Type_of_kurs
AND fcurr eq FOREIGN_CURRENCY
AND tcurr eq LOCAL_CURRENCY
AND gdatu eq datc
.
IF sy-subrc eq 0.
kurs = gs_tcurr-ukurs.
CONVERT INVERTED-DATE gs_tcurr-gdatu INTO DATE date_of_kurs.
else.
*На введенную дату курс не введен, поэтому ищем последний введенный курс
CLEAR t_gdatu.
SELECT min( gdatu ) FROM tcurr INTO t_gdatu
WHERE kurst eq Type_of_kurs
AND fcurr eq FOREIGN_CURRENCY
AND tcurr eq LOCAL_CURRENCY
AND gdatu ge datc
.
IF t_gdatu gt 0.
SELECT SINGLE * FROM tcurr INTO gs_tcurr
WHERE kurst eq Type_of_kurs
AND fcurr eq FOREIGN_CURRENCY
AND tcurr eq LOCAL_CURRENCY
AND gdatu eq t_gdatu
.
IF sy-subrc eq 0.
kurs = gs_tcurr-ukurs.
CONVERT INVERTED-DATE gs_tcurr-gdatu INTO DATE date_of_kurs.
endif.
ENDIF.
ENDIF.
ELSE.
kurs = 1.
endif.
CHECK kurs le 0.
error = 'Курс не найден!'.
*} INSERT
ENDFUNCTION.