ОбновитьНастройкиРаботыСКлассификаторамиОбластейДанных (БСП)

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

Обновить настройки работы классификаторами областей данных. Выполняет обновление данных регистра сведений ВерсииКлассификаторовОбластейДанных.

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

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

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

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

ОбновитьНастройкиРаботыСКлассификаторами (БСП)

ОбновитьКлассификаторы (БСП)

ОбновитьКэшКлассификатора (БСП)

ВыполнитьОбновлениеКлассификаторовВОбластяхДанных (БСП)

ОбновитьПараметрыТекущейОбластиДанных (БСП)

ЗапланироватьОбновлениеДанныхОбластей (БСП)

Обновить (БСП)

ОбновитьСписокЗапрещенныхРасширенийВОбластиДанных (БСП)

ВнешнееСоединениеОбновитьНастройкиОбменаДанными (БСП)

Синтакс-помощник БСП с нейросетевым ассистентом