ПриФормированииМанифестаКонфигурации (БСП)

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

При формировании манифеста конфигурации. Вызывается при формировании манифеста конфигурации.

// Вызывается при формировании манифеста конфигурации.
//
// Параметры:
//  РасширенныеСведения - Массив, внутри процедуры обработчика в данный массив требуется
//    добавить объекты типа ОбъектXDTO с ТипомXDTO, унаследованным от
//    {http://www.1c.ru/1cFresh/Application/Manifest/a.b.c.d}ExtendedInfoItem.
//
Процедура ПриФормированииМанифестаКонфигурации(РасширенныеСведения) Экспорт
	
	Если ТранзакцияАктивна() Тогда
		ВызватьИсключение НСтр("ru = 'Операция не может быть выполнена при активной внешней транзакции!'");
	КонецЕсли;
	
	ВызовВНеразделеннойИБ = Не ОбщегоНазначения.РазделениеВключено();
	
	НачатьТранзакцию();
	
	Попытка
		
		ОписаниеРазрешений = ФабрикаXDTO.Создать(
			ФабрикаXDTO.Тип("http://www.1c.ru/1cFresh/Application/Permissions/Manifes/1.0.0.1", "RequiredPermissions")
		);
		
		ОписаниеВнешнихКомпонент = ФабрикаXDTO.Создать(
			ФабрикаXDTO.Тип("http://www.1c.ru/1cFresh/Application/Permissions/Manifes/1.0.0.1", "Addins")
		);
		
		МакетыВнешнихКомпонент = Новый Соответствие();
		ИспользоватьРазделениеПоОбластямДанных = Константы.ИспользоватьРазделениеПоОбластямДанных.Получить();
		ОтключитьРазделениеПоОбластямДанных = Ложь;
		
		Если ВызовВНеразделеннойИБ Тогда
			
			Если НЕ ИспользоватьРазделениеПоОбластямДанных Тогда
				Константы.ИспользоватьРазделениеПоОбластямДанных.Установить(Истина);
				ОтключитьРазделениеПоОбластямДанных = Истина;
			КонецЕсли; 
			
			ОбновитьПовторноИспользуемыеЗначения();
			
		КонецЕсли;
		
		Константы.ИспользуютсяПрофилиБезопасности.Установить(Истина);
		Константы.АвтоматическиНастраиватьРазрешенияВПрофиляхБезопасности.Установить(Истина);
		
		ИдентификаторыЗапросов = РаботаВБезопасномРежиме.ЗапросыОбновленияРазрешенийКонфигурации();
		
		МенеджерПрименения = РаботаВБезопасномРежимеСлужебныйВМоделиСервиса.МенеджерПримененияРазрешений(ИдентификаторыЗапросов);
		Дельта = МенеджерПрименения.ДельтаБезУчетаВладельцев();
		
		МакетыВнешнихКомпонент = Новый Массив();
		
		Для Каждого ЭлементДельты Из Дельта.Добавляемые Цикл
			
			Для Каждого КлючИЗначение Из ЭлементДельты.Разрешения Цикл
				
				Разрешение = ОбщегоНазначения.ОбъектXDTOИзСтрокиXML(КлючИЗначение.Значение);
				ОписаниеРазрешений.Permission.Добавить(Разрешение);
				
				Если Разрешение.Тип() = ФабрикаXDTO.Тип("http://www.1c.ru/1cFresh/Application/Permissions/1.0.0.1", "AttachAddin") Тогда
					МакетыВнешнихКомпонент.Добавить(Разрешение.TemplateName);
				КонецЕсли;
				
			КонецЦикла;
			
		КонецЦикла;
		
		Для Каждого ИмяМакета Из МакетыВнешнихКомпонент Цикл
			
			ОписаниеВнешнейКомпоненты = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.1c.ru/1cFresh/Application/Permissions/Manifes/1.0.0.1", "AddinBundle"));
			ОписаниеВнешнейКомпоненты.TemplateName = ИмяМакета;
			
			ОписанияФайлов = РаботаВБезопасномРежиме.КонтрольныеСуммыФайловКомплектаВнешнейКомпоненты(ИмяМакета);
			
			Для Каждого КлючИЗначение Из ОписанияФайлов Цикл
				
				ОписаниеФайла = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.1c.ru/1cFresh/Application/Permissions/Manifes/1.0.0.1", "AddinFile"));
				ОписаниеФайла.FileName = КлючИЗначение.Ключ;
				ОписаниеФайла.Hash = КлючИЗначение.Значение;
				
				ОписаниеВнешнейКомпоненты.Files.Добавить(ОписаниеФайла);
				
			КонецЦикла;
			
			ОписаниеВнешнихКомпонент.Bundles.Добавить(ОписаниеВнешнейКомпоненты);
			
		КонецЦикла;
		
		РасширенныеСведения.Добавить(ОписаниеРазрешений);
		РасширенныеСведения.Добавить(ОписаниеВнешнихКомпонент);
		
		Если ОтключитьРазделениеПоОбластямДанных Тогда
			Константы.ИспользоватьРазделениеПоОбластямДанных.Установить(Ложь);
		КонецЕсли; 
		
	Исключение
		
		ОтменитьТранзакцию();
		Если ВызовВНеразделеннойИБ Тогда
			ОбновитьПовторноИспользуемыеЗначения();
		КонецЕсли;
		
		ВызватьИсключение;
		
	КонецПопытки;
	
	ОтменитьТранзакцию();
	Если ВызовВНеразделеннойИБ Тогда
		ОбновитьПовторноИспользуемыеЗначения();
	КонецЕсли;
	
КонецПроцедуры

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

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

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

СформироватьМанифестКонфигурации (БСП)

ПоместитьМанифестКонфигурацииВоВременноеХранилище (БСП)

ПриФормированииСпискаУслуг (БСП)

МанифестНеЗадан (БСП)

ПриОпределенииКомандПодключенныхКОбъекту (БСП)

МанифестНеВерногоФормата (БСП)

ОтсутствуетСвойствоМанифеста (БСП)

ИмяФайлаМанифеста (БСП)

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