Номенклатура / Форма установки значений отбора / Модуль формы

файл

#Область ОбработчикиСобытийФормы

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

КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
	
	Если ЗначениеЗаполнено(ВыбранноеЗначение) Тогда
		Для Каждого Значение Из ВыбранноеЗначение Цикл
			НоваяСтрока = СписокЗначенийОтбора.Добавить();
			НоваяСтрока.ЗначениеОтбора = Значение;
			НоваяСтрока.Пометка = Истина;
		КонецЦикла;
	КонецЕсли;

КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Отмена(Команда)
	
	Закрыть();
	
КонецПроцедуры

&НаКлиенте
Процедура ОК(Команда)
	
	НеверныйИнтервал = Ложь;
	
	ЗначениеОтбора = Новый СписокЗначений;
	Для Каждого ЭлементСпискаЗначений Из СписокЗначенийОтбора Цикл
		Если ЭлементСпискаЗначений.Пометка 
			И ЗначениеЗаполнено(ЭлементСпискаЗначений.ЗначениеОтбора)
			И ЗначениеОтбора.НайтиПоЗначению(ЭлементСпискаЗначений.ЗначениеОтбора) = Неопределено Тогда
			ЗначениеОтбора.Добавить(ЭлементСпискаЗначений.ЗначениеОтбора);
		КонецЕсли;	
	КонецЦикла;
	
	СтруктураВозврата = Новый Структура("ЗначениеОтбора", ЗначениеОтбора);
	
	Закрыть(СтруктураВозврата);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
	
КонецПроцедуры

&НаКлиенте
Процедура СписокЗначенийОтбораПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)

	Если Копирование Тогда
		Возврат;
	КонецЕсли;
	
	НоваяСтрока = СписокЗначенийОтбора.Добавить();
	НоваяСтрока.Пометка = Истина;
	НоваяСтрока.ЗначениеОтбора = Новый (ТипЗначенияОтбора);
	                                
	КоличествоСтрок = СписокЗначенийОтбора.Количество();
	Элементы.СписокЗначенийОтбора.ТекущаяСтрока =  СписокЗначенийОтбора[КоличествоСтрок - 1].ПолучитьИдентификатор();
	
	Отказ = Истина;
	       
КонецПроцедуры

&НаКлиенте
Процедура Подобрать(Команда)
	
	Если ЗначениеЗаполнено(ВладелецОтбор) Тогда
		Отбор = Новый Структура("Владелец", ВладелецОтбор);
		ПараметрыФормы = Новый Структура;
		ПараметрыФормы.Вставить("ЗакрыватьПриВыборе",Ложь);
		ПараметрыФормы.Вставить("МножественныйВыбор",Истина);
		ПараметрыФормы.Вставить("РежимВыбора",Истина);
		ПараметрыФормы.Вставить("Отбор",Отбор);
	Иначе
		ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе, МножественныйВыбор, РежимВыбора", Ложь, Истина, Истина);
	КонецЕсли;
	
	ОткрытьФорму(ПолноеИмяОбъекта + ".ФормаВыбора",ПараметрыФормы,ЭтаФорма,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

#КонецОбласти

Связанные материалы