Автоматическая корректировка некорректного курса. УНФ 1.6
Клиент работает с российской версией конфигурации УНФ, хотя сам находится в РБ, национальная валюта в базе RUR, основная — EUR.
При этом настроен обмен с белорусской БП3, из нее в УНФ идут платежные документы по банку. Там основная валюта BYR, поэтому платежи идут с неправильным курсом. Никаких переконвертаций курса при обмене, естественно не происходит. 1С не рассчитывала при обменах, что основные валюты могут отличаться.
Я предложил разные варианты исправления ситуации, можно было при обмене менять курс на актуальный на дату. В итоге сошлись на том, что изменение курса будет происходить всегда, если курс отличается от курса на дату более чем на 5%.
Смотрите сами, условно RUR имеет курс 1, BYR 29.05, EUR 83.34 , USD 73.6. С другими валютами клиент не работает в белорусской БП3.
Все они отличаются друг от друга более чем на 5%.
Добавил корректировку расширением в событие перед записью документов «Поступление на счет», «Расход на счета»:
&После("ПередЗаписью") Процедура дор_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) дор_Сервер.ПересчитатьПриНеобходимостиКурсВалютыПлатежногоДокумента(ЭтотОбъект); КонецПроцедуры
Сама корректировка взята на основании моей предыдущей обработки для УНФ «Перекурсовка«.
После того, как убрал все лишнее, получилось:
Функция ПересчитатьПриНеобходимостиКурсВалютыПлатежногоДокумента(ДО) Экспорт ВалютаДокумента = ДО.ВалютаДенежныхСредств; ПолеПлатежа = "СуммаПлатежа"; ПолеРасчетов = "СуммаРасчетов"; Для Каждого СтрокаТЧ ИЗ ДО.РасшифровкаПлатежа Цикл ВалютаРасчетовТЧ = Неопределено; Если ЗначениеЗаполнено(СтрокаТЧ.Договор) Тогда ВалютаРасчетовТЧ = СтрокаТЧ.Договор.ВалютаРасчетов; Иначе ВалютаРасчетовТЧ = ВалютаДокумента; КонецЕсли; Если ЗначениеЗаполнено(ВалютаРасчетовТЧ) Тогда Если НЕ ЗначениеЗаполнено(ВалютаДокумента) Тогда Продолжить; КонецЕсли; НоваяСумма = РаботаСКурсамиВалют.ПересчитатьВВалюту(СтрокаТЧ[ПолеПлатежа], ВалютаДокумента, ВалютаРасчетовТЧ, ДО.Дата); СтараяСумма = СтрокаТЧ[ПолеРасчетов]; СтруктураКурса = РаботаСКурсамиВалют.ПолучитьКурсВалюты(ВалютаРасчетовТЧ, ДО.Дата); СтарыйКурс = СтрокаТЧ.Курс; НовыйКурс = СтруктураКурса.Курс; КСуммы = ?(СтараяСумма = 0, 0, НоваяСумма/СтараяСумма); ККурса = ?(СтарыйКурс = 0, 0, НовыйКурс/СтарыйКурс); Порог = 0.05; //5% Если КСуммы >= 1 - Порог И КСуммы <= 1 + Порог И ККурса >= 1 - Порог И ККурса <= 1 + Порог Тогда Продолжить; //Пропускаем, в рамках порога КонецЕсли; Сообщить("Пересчитана сумма " + ДО.Ссылка + ": " + СтрокаТЧ[ПолеПлатежа] + " " + ВалютаДокумента + " с: " + СтараяСумма + " на: " + НоваяСумма + " Разница: " + Окр(КСуммы*100, 2) + "%. Разница курса: " + Окр(ККурса*100, 2) + "%. Порог: " + Порог * 100 + "%"); СтрокаТЧ[ПолеРасчетов] = НоваяСумма; СтрокаТЧ.Курс = СтруктураКурса.Курс; СтрокаТЧ.Кратность = СтруктураКурса.Кратность; КонецЕсли; КонецЦикла; КонецФункции
О пересчете пользователь информируется сообщением:
Среда: УНФ 1.6.25.152. Объем: 1 час.
UPD 2021-12-11: поправил код, чтобы пересчет был и когда меняется курс.
Свежие комментарии