Добрый день!
В работе столкнулись с такой проблемой, как некорректная конвертация валютных платежей. В справочники курс валют были загружены курсы валют помесячно за период с 2009 по 2020 год. Далее мы произвели импорт платежей с помощью Excel за период с 2009 по январь 2020 г.
Обратили внимание что платеж, в карточке Платежа отражается по курсу, который соответствует Дате создания записи в системе. Т.е. в том случае когда загружаются платежи за ранние периоды, конвертация курса валют не учитывает дату платежа (хотя правильная логика - это конвертировать валютный платеж по курсу, соответствующему дате платежа).
Выяснили что, в методе setCurrencyRate используется коробочный метод LoadCurrencyRate модуля MoneyModule, в который передается текущая дата платежа (т.е. дата создания записи в системе) Т.о. если импорт платежей был создан в системе в январе 2020 года, но, например - дата импортируемого платежа за ноябрь 2009 года, то платеж будет конвертироваться по курсу января 2020 года.
Возникает вопрос: почему логика опирается на дату создания записи, а не на дату фактического платежа?
Можно ли изменить логику в методе LoadCurrencyRate модуля MoneyModule?
Нравится
Судя по коду, LoadCurrencyRate получает дату извне в параметре, а заполняет её функция setCurrencyRate на конкретной карточке. Видимо, у Вас в ней берётся дата не из того поля. Нужно менять там, а не в MoneyModule.
/** * Calls onLoadCurrencyRate and sets specified currencyRateAttribute if currencyAttribute isn't empty. * @param currencyAttribute - Currency attribute. * @param currencyRateAttribute - Currency rate attribute. * @param startDate - Currency start date. * @param {function} callback */ moneyModule.LoadCurrencyRate = function(currencyAttribute, currencyRateAttribute, startDate, callback) { var currency = this.get(currencyAttribute); if (Ext.isEmpty(currency)) { return; } moneyModule.self.onLoadCurrencyRate.call(this, currency.value, startDate, function(item) { this.set(currencyRateAttribute, item.Rate); if (callback) { callback.call(this); } }, function() { this.set(currencyRateAttribute, null); }); };
Не вижу раздела «Платежи», видимо, он разработан в ходе проекта или переименован. Как называется схема карточки?
Мультивалютное поле работает с теми данными, которые есть в связанных с ним полях объекта: сумма, сумма в базовой валюте, выбранная валюта и курс. Вам нужно, чтобы уже при заливке были корректные данные во всех этих полях.