Показать сообщение отдельно
Старый 14.11.2015, 01:05   #2  
AlexSD is offline
AlexSD
Microsoft Dynamics
Сотрудники Microsoft Dynamics
 
257 / 302 (11) ++++++
Регистрация: 14.10.2003
Цитата:
Сообщение от Ильдар Посмотреть сообщение
А скажите, пожалуйста, в каком месте кода это
Наверно речь идет о методе \Classes\ExchangeRateProviderCBRF_RU\getExchangeRatesFromService
строка 64:
X++:
currencyPair.parmToCurrency(#RUB);
Код смотрел в DAX 2012 R2 CU7.

Честно говоря, я не очень понял в чем суть проблемы. Какая прога засылала "Руб" вместо RUB?
Импорт курсов валют ни никуда не "засылает" Руб или RUB. Единственно, что он "засылает" - это дату, за которую необходимо получить курсы. Получив от ЦБ курсы валют на дату, импорт курсов сохраняет курсы в таблице. Поиск соответствий кодов валют происходит по currency.CurrencyCodeISO в методе \Classes\ExchangeRateImportOperation\saveRates(43)
X++:
toCurrency = Currency::findCurrencyCodeISO(externalCurrencyPair.parmToCurrency());
Т.е. для российского импорта курсов валют "To Currency" всегда будет валюта, у которой ISO код - RUB.
Если говорить про "From Currency", то в отличие от других провайдеров, в российском From Currency ищется по двум полям или CurrencyCode или CurrencyCodeISO:
Метод \Classes\ExchangeRateProviderCBRF_RU\getExchangeRatesFromService(46)

X++:
           select CurrencyCode from fromCurrency
                where fromCurrency.CurrencyCode     == cbCurrencyCode
                   || fromCurrency.CurrencyCodeISO  == cbCurrencyCode;
...
                if (fromCurrency)
                {
                    currencyCode = fromCurrency.CurrencyCode;
                }
                else
                {
                    currencyCode = cbCurrencyCode;
                }
и тут уже валюта ищется по коду:
\Classes\ExchangeRateImportOperation\saveRates(31)

X++:
                // Get the internal currency code that relates to the ISO Currency Code.
                // <GEERU>
                if (_exchangeRateImportRequest.parmProviderId() == ExchangeRateProviderCBRF_RU::providerId())
                {
                    fromCurrency = Currency::find(externalCurrencyPair.parmFromCurrency());
                }
                else
                {
                // </GEERU>

Последний раз редактировалось AlexSD; 14.11.2015 в 01:33.
За это сообщение автора поблагодарили: Ильдар (1).