ДеревоПодсистемСформировать (БСП)

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

Дерево подсистем сформировать. Формирует дерево подсистем по данным варианта-основания.

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

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

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

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

УстановитьУсловноеОформлениеДереваПодсистем (БСП)

СформироватьНумерациюДерева (БСП)

ИнтерактивноеИзменениеВыгрузки_СформироватьДеревоЗначений (БСП)

ДеревоПодсистемИспользованиеПриИзменении (БСП)

ДеревоПодсистемВажностьПриИзменении (БСП)

ПодсистемыТекущегоПользователя (БСП)

ДеревоПодсистемЗаписать (БСП)

ВключитьПодсистему (БСП)

ОтключитьПодсистему (БСП)

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