УстановитьПоставляемоеРасширениеВОбластьДанных (БСП)

Автор: 1С
ОбщийМодуль.РасширенияВМоделиСервиса
БСП

Установить поставляемое расширение область данных. Выполняет установку поставляемого расширения в текущую область данных.

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

КонецПроцедуры

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

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

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

УстановитьПоставляемоеРасширениеПриПолучении (БСП)

ОтозватьПоставляемоеРасширение (БСП)

УдалитьПоставляемоеРасширениеИзОбластиДанных (БСП)

УстановитьПоставляемуюОбработкуПриПолучении (БСП)

УстановитьПоставляемуюОбработкуВОбластьДанных (БСП)

ПереченьИнсталляций (БСП)

ОчередьИнсталляций (БСП)

ОтозватьПоставляемуюДополнительнуюОбработку (БСП)

УдалитьПоставляемуюОбработкуИзОбластиДанных (БСП)

TurboConf 6 - расширение Конфигуратора 1С