#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Не Параметры.ЗакрыватьПриВыборе Тогда
РежимПодбора = Истина;
Если Параметры.МножественныйВыбор Тогда
МножественныйВыбор = Истина;
КонецЕсли;
КонецЕсли;
Если ТипЗнч(Параметры.ПланыОбменаДляВыбора) = Тип("Массив") Тогда
ИспользуемыеПланыОбмена = Новый Массив;
Для каждого Элемент Из Параметры.ПланыОбменаДляВыбора Цикл
Если ТипЗнч(Элемент) = Тип("Строка") Тогда
ПланОбменаМетаданные = ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(Элемент);
Если ПланОбменаМетаданные = Неопределено Тогда
ПланОбменаМетаданные = ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени("ПланОбмена." + Элемент);
КонецЕсли;
ИначеЕсли ТипЗнч(Элемент) = Тип("Тип") Тогда
ПланОбменаМетаданные = Метаданные.НайтиПоТипу(Элемент);
Иначе
ПланОбменаМетаданные = Метаданные.НайтиПоТипу(ТипЗнч(Элемент));
КонецЕсли;
Если ПланОбменаМетаданные <> Неопределено Тогда
ИспользуемыеПланыОбмена.Добавить(ПланОбменаМетаданные);
КонецЕсли;
КонецЦикла;
ЗаполнитьПланыОбмена(ИспользуемыеПланыОбмена);
Иначе
ЗаполнитьПланыОбмена(Метаданные.ПланыОбмена);
КонецЕсли;
Если РежимПодбора Тогда
Заголовок = НСтр("ru = 'Подбор узлов планов обмена'");
КонецЕсли;
Если МножественныйВыбор Тогда
Элементы.УзлыПлановОбмена.РежимВыделения = РежимВыделенияТаблицы.Множественный;
КонецЕсли;
НайденныеСтроки = УзлыПлановОбмена.НайтиСтроки(Новый Структура("Узел", Параметры.ТекущаяСтрока));
Если НайденныеСтроки.Количество() > 0 Тогда
Элементы.УзлыПлановОбмена.ТекущаяСтрока = НайденныеСтроки[0].ПолучитьИдентификатор();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыУзлыПлановОбмена
&НаКлиенте
Процедура УзлыПлановОбменаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если МножественныйВыбор Тогда
ЗначениеВыбора = Новый Массив;
ЗначениеВыбора.Добавить(УзлыПлановОбмена.НайтиПоИдентификатору(ВыбраннаяСтрока).Узел);
ОповеститьОВыборе(ЗначениеВыбора);
Иначе
ОповеститьОВыборе(УзлыПлановОбмена.НайтиПоИдентификатору(ВыбраннаяСтрока).Узел);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Выбрать(Команда)
Если МножественныйВыбор Тогда
ЗначениеВыбора = Новый Массив;
Для Каждого ВыделеннаяСтрока Из Элементы.УзлыПлановОбмена.ВыделенныеСтроки Цикл
ЗначениеВыбора.Добавить(УзлыПлановОбмена.НайтиПоИдентификатору(ВыделеннаяСтрока).Узел)
КонецЦикла;
ОповеститьОВыборе(ЗначениеВыбора);
Иначе
ТекущиеДанные = Элементы.УзлыПлановОбмена.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Узел не выбран.'"));
Иначе
ОповеститьОВыборе(ТекущиеДанные.Узел);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ЗаполнитьПланыОбмена(ПланыОбмена)
ТекстыЗапросов = Новый Массив;
Для каждого ОбъектМетаданных Из ПланыОбмена Цикл
Если ОбъектМетаданных = Неопределено Или Не Метаданные.ПланыОбмена.Содержит(ОбъектМетаданных) Тогда
Продолжить;
КонецЕсли;
Если Не ПравоДоступа("Просмотр", ОбъектМетаданных) Тогда
Продолжить;
КонецЕсли;
ПланОбменаСсылка = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()).ПустаяСсылка();
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| &ПланОбменаПустаяСсылка КАК ПустаяСсылка,
| &ПланОбменаПредставление КАК ПланОбменаПредставление,
| ТаблицаПланаОбмена.Ссылка КАК Ссылка,
| ТаблицаПланаОбмена.Представление КАК Представление
|ИЗ
| &ТаблицаПланаОбмена КАК ТаблицаПланаОбмена
|ГДЕ
| НЕ ТаблицаПланаОбмена.ЭтотУзел";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПланОбменаПустаяСсылка",
"ЗНАЧЕНИЕ(" + ОбъектМетаданных.ПолноеИмя() + ".ПустаяСсылка)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПланОбменаПредставление", """" + ОбъектМетаданных.Представление() + """");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТаблицаПланаОбмена", ОбъектМетаданных.ПолноеИмя());
Если ТекстыЗапросов.Количество() > 0 Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ РАЗРЕШЕННЫЕ", "ВЫБРАТЬ");
КонецЕсли;
ТекстыЗапросов.Добавить(ТекстЗапроса);
Если Параметры.ВыбиратьВсеУзлы Тогда
НоваяСтрока = УзлыПлановОбмена.Добавить();
НоваяСтрока.ПланОбмена = ПланОбменаСсылка;
НоваяСтрока.ПланОбменаПредставление = ОбъектМетаданных.Синоним;
НоваяСтрока.Узел = ПланОбменаСсылка;
НоваяСтрока.УзелПредставление = НСтр("ru = '<Все информационные базы>'");
КонецЕсли;
КонецЦикла;
Если ТекстыЗапросов.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ТекстЗапроса = СтрСоединить(ТекстыЗапросов, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС);
Запрос = Новый Запрос(ТекстЗапроса);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = УзлыПлановОбмена.Добавить();
НоваяСтрока.ПланОбмена = Выборка.ПустаяСсылка;
НоваяСтрока.ПланОбменаПредставление = Выборка.ПланОбменаПредставление;
НоваяСтрока.Узел = Выборка.Ссылка;
НоваяСтрока.УзелПредставление = Выборка.Представление;
КонецЦикла;
УзлыПлановОбмена.Сортировать("ПланОбменаПредставление Возр");
КонецПроцедуры
#КонецОбласти