Обновить курс валюты.
Процедура ОбновитьКурсВалюты(Параметры, АдресРезультата) Экспорт
ЗависимаяВалюта = Параметры.Валюта;
СпособУстановкиКурса = ЗависимаяВалюта.СпособУстановкиКурса;
СписокВалют = Новый Массив;
Если СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.НаценкаНаКурсДругойВалюты Тогда
СписокВалют.Добавить(ЗависимаяВалюта.ОсновнаяВалюта);
ИначеЕсли СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.РасчетПоФормуле Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Валюты.Ссылка КАК Ссылка
|ИЗ
| Справочник.Валюты КАК Валюты
|ГДЕ
| &ФормулаРасчетаКурса ПОДОБНО ""%"" + Валюты.Наименование + ""%""";
Запрос.УстановитьПараметр("ФормулаРасчетаКурса", ЗависимаяВалюта.ФормулаРасчетаКурса);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
ТекстОшибки = НСтр("ru = 'В формуле должна быть использована хотя бы одна основная валюта.'");
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , "Объект.ФормулаРасчетаКурса");
ВызватьИсключение ТекстОшибки;
КонецЕсли;
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
СписокВалют.Добавить(Выборка.Ссылка);
КонецЦикла
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| КурсыВалют.Период КАК Период,
| КурсыВалют.Валюта КАК Валюта
|ИЗ
| РегистрСведений.КурсыВалют КАК КурсыВалют
|ГДЕ
| КурсыВалют.Валюта В(&Валюта)
|
|СГРУППИРОВАТЬ ПО
| КурсыВалют.Период,
| КурсыВалют.Валюта
|
|УПОРЯДОЧИТЬ ПО
| Период";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Валюта", СписокВалют);
Выборка = Запрос.Выполнить().Выбрать();
ОбновленныеПериоды = Новый Соответствие;
Пока Выборка.Следующий() Цикл
Если ОбновленныеПериоды[Выборка.Период] <> Неопределено Тогда
Продолжить;
КонецЕсли;
НачатьТранзакцию();
Попытка
Для Каждого Валюта Из СписокВалют Цикл
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КурсыВалют");
ЭлементБлокировки.УстановитьЗначение("Валюта", Валюта);
ЭлементБлокировки.УстановитьЗначение("Период", Выборка.Период);
КонецЦикла;
Блокировка.Заблокировать();
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Валюта.Установить(Выборка.Валюта);
НаборЗаписей.Отбор.Период.Установить(Выборка.Период);
НаборЗаписей.Прочитать();
НаборЗаписей.ДополнительныеСвойства.Вставить("ОбновитьКурсЗависимойВалюты", ЗависимаяВалюта);
НаборЗаписей.ДополнительныеСвойства.Вставить("ОбновленныеПериоды", ОбновленныеПериоды);
НаборЗаписей.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения");
НаборЗаписей.Записать();
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
ОбновленныеПериоды.Вставить(Выборка.Период, Истина);
КонецЦикла;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
Загрузка курсов валют с сайта РБК
ЗаполнитьДанныеКурсаДляВалюты (БСП)
Получение предпоследнего курса валюты