ОбновитьКурсВалюты (БСП)

Автор: 1С
ОбщийМодуль.РаботаСКурсамиВалют
БСП

Обновить курс валюты.

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

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

Загрузка курсов валют с сайта РБК

ПолучитьКурсВалюты (БСП)

ЗаполнитьДанныеКурсаДляВалюты (БСП)

Получение предпоследнего курса валюты

ПересчитатьПоКурсу (БСП)

ЗапланироватьКопированиеКурсовВалюты (БСП)

КурсыАктуальны (БСП)

Средневзвешенный курс валюты за указанный период

1С Менеджер конфигураций