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