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