Установить поставляемое расширение область данных. Выполняет установку поставляемого расширения в текущую область данных.
// Выполняет установку поставляемого расширения в текущую область данных.
//
// Параметры:
// ОписаниеИнсталляции - Структура, ключи:
// Идентификатор - УникальныйИдентификатор, уникальный идентификатор ссылки
// элемента справочника ПоставляемыеРасширения,
// Представление - строка, представление инсталляции поставляемого расширения
// Инсталляция - УникальныйИдентификатор, уникальный идентификатор инсталляции
// поставляемого расширения
// Ответственный - СправочникСсылка.Пользователи.
//
Процедура УстановитьПоставляемоеРасширениеВОбластьДанных(Знач ОписаниеИнсталляции, Знач Ответственный) Экспорт
УстановитьПривилегированныйРежим(Истина);
НачатьТранзакцию();
Попытка
ЗаписьЖурналаРегистрации(
НСтр("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
///////////////////////////////////////////////////////////////////////////////////////////////////////
УстановитьПоставляемоеРасширениеПриПолучении (БСП)
ОтозватьПоставляемоеРасширение (БСП)
УдалитьПоставляемоеРасширениеИзОбластиДанных (БСП)
УстановитьПоставляемуюОбработкуПриПолучении (БСП)
УстановитьПоставляемуюОбработкуВОбластьДанных (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)