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

файл

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	УстановитьУсловноеОформление();
	
	// Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест".
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;
	
	КодФормы = "Справочник_Номенклатура_ФормаВыбора";
	
	ПодборТоваровСервер.ПриСозданииНаСервере(ЭтаФорма);
	
	ПереданныеДополнительныеПараметры = Неопределено;
	Если Параметры.Свойство("ДополнительныеПараметры", ПереданныеДополнительныеПараметры) И ПереданныеДополнительныеПараметры <> Неопределено Тогда
		ПараметрыСоздания = Новый ФиксированнаяСтруктура(ПереданныеДополнительныеПараметры);
	Иначе
		ПараметрыСоздания = Новый ФиксированнаяСтруктура;
	КонецЕсли;
		
	Если Не Параметры.Свойство("РегистрироватьШтрихкод",РегистрироватьШтрихкод) Тогда
		РегистрироватьШтрихкод = Ложь;
	КонецЕсли;
	
	Если Параметры.Свойство("НалогообложениеНДС") Тогда
		Ограничения = УчетНДСУП.ОграничениеТоваровПоНалогообложению(Параметры.НалогообложениеНДС);
		Для Каждого Ограничение Из Ограничения Цикл
			ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(СписокНоменклатура,
																					Ограничение.Реквизит,
																					Ограничение.Значение,
																					Ограничение.ВидСравнения,
																					"ОтборПоУмолчанию",
																					Истина);
		КонецЦикла;
	КонецЕсли;
		
	Если ЗначениеЗаполнено(Параметры.ВариантыРасчетаЦеныНабора) Тогда
		ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(СписокНоменклатура, "ВариантыРасчетаЦеныНабора", Параметры.ВариантыРасчетаЦеныНабора, Истина);
	КонецЕсли;
		
	// Запомним выбранный элемент номенклатуры в форме, вызвавшей открытие этой формы выбора.
	Параметры.Свойство("ТекущаяСтрока", НоменклатураЭлементПриОткрытии);
	Если ЗначениеЗаполнено(НоменклатураЭлементПриОткрытии)
		И ИспользоватьФильтры Тогда
		Если ВариантНавигации = ПредопределенноеЗначение("Перечисление.ВариантыНавигацииВФормахНоменклатуры.ПоИерархии") Тогда
			НоменклатураРодительПриОткрытии = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НоменклатураЭлементПриОткрытии, "Родитель");
		ИначеЕсли ВариантНавигации = ПредопределенноеЗначение("Перечисление.ВариантыНавигацииВФормахНоменклатуры.ПоСвойствам") 
			Или ВариантНавигации = ПредопределенноеЗначение("Перечисление.ВариантыНавигацииВФормахНоменклатуры.ПоВидамИСвойствам")
			Или ВариантНавигации = ПредопределенноеЗначение("Перечисление.ВариантыНавигацииВФормахНоменклатуры.ПоВидам") Тогда
			ВидНоменклатуры = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НоменклатураЭлементПриОткрытии, "ВидНоменклатуры");
			ВидНоменклатурыПриИзмененииНаСервере();
			ВидНоменклатурыПриОткрытии = ВидНоменклатуры;
		КонецЕсли;
	ИначеЕсли Параметры.Свойство("ОтборПоВидуНоменклатуры") Тогда
		ВидНоменклатурыПриОткрытии = ВидНоменклатуры;
	КонецЕсли;
	
	Параметры.Свойство("СегментНоменклатуры", СегментНоменклатуры);
	Если ЗначениеЗаполнено(СегментНоменклатуры) Тогда
		СегментНоменклатурыПриИзмененииНаСервере();
	КонецЕсли;
	
	Если Параметры.ЗапретРедактированияСегментаНоменклатуры Тогда
		Элементы.СегментНоменклатуры.ТолькоПросмотр = Истина;
	КонецЕсли;
	
	ВыборТовараДругогоКачества = Параметры.ВыборТовараДругогоКачества;
	
	// ЭлектронноеВзаимодействие.РаботаСНоменклатурой
	КП = ?(Элементы.СтраницыСписков.ТекущаяСтраница = Элементы.СтраницаРасширенныйПоискНоменклатура,
			Элементы.КоманднаяПанельСписокРасширенныйПоискНоменклатура, Элементы.СписокСтандартныйПоискНоменклатура.КоманднаяПанель);
	ДС = ?(Элементы.СтраницыСписков.ТекущаяСтраница = Элементы.СтраницаРасширенныйПоискНоменклатура,
			Элементы.СписокРасширенныйПоискНоменклатура, Элементы.СписокСтандартныйПоискНоменклатура);
			
	РаботаСНоменклатурой.ПриСозданииНаСервереФормаСпискаНоменклатуры(ЭтотОбъект, КП, ДС, Ложь);
	// Конец ЭлектронноеВзаимодействие.РаботаСНоменклатурой
	
	СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
	
	ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
	
	// ИнтеграцияС1СДокументооборотом
	ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтаФорма);
	// Конец ИнтеграцияС1СДокументооборотом
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	// Установим позиционирование на выбранный элемент номенклатуры в форме, вызвавшей открытие этой формы выбора.
	Если ЗначениеЗаполнено(НоменклатураЭлементПриОткрытии) Тогда
		Если ВариантНавигации = ПредопределенноеЗначение("Перечисление.ВариантыНавигацииВФормахНоменклатуры.ПоИерархии") Тогда
			Элементы.ИерархияНоменклатуры.ТекущаяСтрока = НоменклатураРодительПриОткрытии;
			ПодборТоваровКлиент.ОбработчикАктивизацииСтрокиИерархииНоменклатуры(ЭтаФорма);
		КонецЕсли;
		ТаблицаФормыНоменклатура = Элементы[ПодборТоваровКлиентСервер.ИмяСпискаНоменклатурыПоВариантуПоиска(ЭтаФорма)]; // ТаблицаФормы
		ТаблицаФормыНоменклатура.ТекущаяСтрока = НоменклатураЭлементПриОткрытии;
		Элементы.ВидыНоменклатуры.ТекущаяСтрока = ВидНоменклатурыПриОткрытии;
	ИначеЕсли ЗначениеЗаполнено(ВидНоменклатурыПриОткрытии) Тогда
		Элементы.ВидыНоменклатуры.ТекущаяСтрока = ВидНоменклатурыПриОткрытии;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
	
	Если Не ЗавершениеРаботы Тогда
		СохранитьНастройкиФормыНаСервере();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	Если ИмяСобытия = "Запись_Номенклатура" И ЗначениеЗаполнено(Источник) Тогда
		Если ЗначениеЗаполнено(СтрокаПоискаНоменклатура) Тогда
			ВыполнитьПоискНоменклатуры();
		КонецЕсли;
		ТаблицаФормыНоменклатура = Элементы[ПодборТоваровКлиентСервер.ИмяСпискаНоменклатурыПоВариантуПоиска(ЭтаФорма)]; // ТаблицаФормы
		ТаблицаФормыНоменклатура.ТекущаяСтрока = Источник;
	КонецЕсли;
	
	// ЭлектронноеВзаимодействие.РаботаСНоменклатурой
	Если ИмяСобытия = РаботаСНоменклатуройКлиент.ОписаниеОповещенийПодсистемы().ЗагрузкаНоменклатуры Тогда
		Если Параметр.СозданныеОбъекты.Количество() > 0 Тогда
			
			ТекущийСписок = ?(Элементы.СтраницыСписков.ТекущаяСтраница = Элементы.СтраницаРасширенныйПоискНоменклатура,
				Элементы.СписокРасширенныйПоискНоменклатура, Элементы.СписокСтандартныйПоискНоменклатура);
				
			ТекущийСписок.ТекущаяСтрока = Параметр.СозданныеОбъекты[0].Номенклатура;
			
		КонецЕсли;
	КонецЕсли;
	// Конец ЭлектронноеВзаимодействие.РаботаСНоменклатурой
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

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

&НаКлиенте
Процедура СтрокаПоискаНоменклатураПриИзменении(Элемент)
	
	ВыполнитьПоискНоменклатуры();
	
КонецПроцедуры

&НаКлиенте
Процедура СтрокаПоискаНоменклатураОчистка(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	СтрокаПоискаНоменклатура = "";
	
	СнятьОтборПоСтрокеПоискаНоменклатурыНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура СтрокаПоискаНоменклатураАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)
	
	СпискиВыбораКлиентСервер.АвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка);
	
КонецПроцедуры

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

#Область ОбработчикиСобытийФлаговТочногоСоответствия

&НаКлиенте
Процедура НайтиНоменклатуруПоТочномуСоответствиюПриИзменении(Элемент)
	
	ВыполнитьПоискНоменклатуры();
	
КонецПроцедуры

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

#Область Прочее

&НаКлиенте
Процедура ВидНоменклатурыПриИзменении(Элемент)
	
	ВидНоменклатурыПриИзмененииНаСервере();
	
	Если ЗначениеЗаполнено(СтрокаПоискаНоменклатура) Тогда
		ВыполнитьПоискНоменклатуры();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ИспользоватьФильтрыПриИзменении(Элемент)
	
	ИспользоватьФильтрыПриИзмененииНаСервере();
	
	Если ЗначениеЗаполнено(СтрокаПоискаНоменклатура) Тогда
		ВыполнитьПоискНоменклатуры();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура СегментНоменклатурыПриИзменении(Элемент)
	
	СегментНоменклатурыПриИзмененииНаСервере();
	
	Если ЗначениеЗаполнено(СтрокаПоискаНоменклатура) Тогда
		ВыполнитьПоискНоменклатуры();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура НоменклатураИсходногоКачестваПриИзменении(Элемент)
	
	НоменклатураИсходногоКачестваПриИзмененииНаСервере();
	
КонецПроцедуры

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокРасширенныйПоискНоменклатура

&НаКлиенте
Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
	
	Если Не Копирование И Не Группа Тогда
		
		Отказ = Истина;
		
		ПараметрыСозданияВФорму = Новый Структура(ПараметрыСоздания);
		
		ПараметрыСозданияВФорму.Вставить("Родитель");
		ПараметрыСозданияВФорму.Вставить("ВидНоменклатуры");
		ПараметрыСозданияВФорму.Вставить("АдресТаблицыПараметров");
		ПараметрыСозданияВФорму.Вставить("АдресТаблицыСопоставления");
		ПараметрыСозданияВФорму.Вставить("РегистрироватьШтрихкод");
		
		ПараметрыСозданияВФорму.РегистрироватьШтрихкод             = РегистрироватьШтрихкод;
		
		Если ИспользоватьФильтры Тогда
			
			Если ВариантНавигации = ПредопределенноеЗначение("Перечисление.ВариантыНавигацииВФормахНоменклатуры.ПоВидамИСвойствам")
				Или ВариантНавигации = ПредопределенноеЗначение("Перечисление.ВариантыНавигацииВФормахНоменклатуры.ПоСвойствам") Тогда
				
				Если ЗначениеЗаполнено(ВидНоменклатуры) Тогда
					
					СтруктураАдресовТаблиц = АдресТаблицПараметровДереваОтборовНаСервере();
					
					ПараметрыСозданияВФорму.АдресТаблицыПараметров = СтруктураАдресовТаблиц.АдресТаблицыПараметров;
					ПараметрыСозданияВФорму.АдресТаблицыСопоставления = СтруктураАдресовТаблиц.АдресТаблицыСопоставления;
					
					ПараметрыСозданияВФорму.ВидНоменклатуры = ВидНоменклатуры;
					
				КонецЕсли;
			ИначеЕсли ВариантНавигации = ПредопределенноеЗначение("Перечисление.ВариантыНавигацииВФормахНоменклатуры.ПоВидам") Тогда
				Если ЗначениеЗаполнено(ВидНоменклатуры) Тогда
					ПараметрыСозданияВФорму.ВидНоменклатуры = ВидНоменклатуры;
				КонецЕсли;
			Иначе
				
				ПараметрыСозданияВФорму.Родитель = ?(Элементы.ИерархияНоменклатуры.ТекущиеДанные = Неопределено, ПредопределенноеЗначение("Справочник.Номенклатура.ПустаяСсылка"),
				Элементы.ИерархияНоменклатуры.ТекущиеДанные.Ссылка);
				
			КонецЕсли;
			
		КонецЕсли;
		
		ОткрытьФорму("Справочник.Номенклатура.ФормаОбъекта", Новый Структура("ДополнительныеПараметры", ПараметрыСозданияВФорму), ЭтаФорма);
		
	ИначеЕсли Группа Тогда
		
		ТекущиеДанные = Элементы.ИерархияНоменклатуры.ТекущиеДанные;
		
		Если ТекущиеДанные <> Неопределено Тогда
			
			Отказ = Истина;
			ПараметрыСозданияВФорму = Новый Структура("Родитель", ТекущиеДанные.Ссылка);
			ОткрытьФорму("Справочник.Номенклатура.ФормаГруппы", Новый Структура("ДополнительныеПараметры", ПараметрыСозданияВФорму), ЭтаФорма);
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
	
	ПодборТоваровКлиент.ПриАктивизацииСтрокиСпискаНоменклатуры(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура СписокРасширенныйПоискНоменклатураВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ПроверитьПометкуУдаленияИВыбрать(Элемент.ТекущиеДанные, ВыбраннаяСтрока);
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокСтандартныйПоискНоменклатура

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоОтборов

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

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

&НаКлиенте
Процедура ДеревоОтборовОтборПриИзменении(Элемент)
	
	ПодборТоваровКлиент.ДеревоОтборовОтборПриИзменении(ЭтаФорма, Новый ОписаниеОповещения("ДеревоОтборовПриИзмененииЗавершение", ЭтотОбъект));
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыВидыНоменклатуры

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

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

&НаСервере
Процедура ВидыНоменклатурыПеретаскиваниеНаСервере(МассивНоменклатур, СтандартнаяОбработка, ВидНоменклатуры)
	
	ОбновитьСписок = Ложь;
	
	Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидНоменклатуры, "ЭтоГруппа") Тогда
		СтандартнаяОбработка = Ложь;
	Иначе
		Для Каждого Номенклатура Из МассивНоменклатур Цикл
			НоменклатураОбъект = Номенклатура.ПолучитьОбъект();	// СправочникОбъект.Номенклатура
			Если НоменклатураОбъект.ВидНоменклатуры <> ВидНоменклатуры Тогда
				НоменклатураОбъект.ВидНоменклатуры = ВидНоменклатуры;
				НоменклатураОбъект.Записать();
				ОбновитьСписок = Истина;
			КонецЕсли;
		КонецЦикла;	
	КонецЕсли;
	
	Если ОбновитьСписок Тогда
		ТаблицаФормыНоменклатура = Элементы[ПодборТоваровКлиентСервер.ИмяСпискаНоменклатурыПоВариантуПоиска(ЭтаФорма)]; // ТаблицаФормы
		ТаблицаФормыНоменклатура.Обновить();
	КонецЕсли;
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыИерархияНоменклатуры

&НаКлиенте
Процедура ИерархияНоменклатурыПриАктивизацииСтроки(Элемент)
	
	ПодборТоваровКлиент.ПриАктивизацииСтрокиИерархииНоменклатуры(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ИерархияНоменклатурыПриАктивизацииСтрокиОбработчикОжидания()
	
	ПодборТоваровКлиент.ОбработчикАктивизацииСтрокиИерархииНоменклатуры(ЭтаФорма);
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокКачества

&НаКлиенте
Процедура СписокКачестваПометкаПриИзменении(Элемент)
	
	СписокКачестваПометкаПриИзмененииНаСервере();
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура Поиск(Команда)
	
	ТекущееСообщениеПользователю = "";
	
КонецПроцедуры

&НаКлиенте
Процедура НоменклатураСАналогичнымиСвойствами(Команда)
	
	НоменклатураСАналогичнымиСвойствамиНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыДругогоКачества(Команда)
	
	ТоварыДругогоКачестваНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура СброситьОтборыПоСвойствам(Команда)
	
	СброситьОтборыПоСвойствамНаСервере();
	
КонецПроцедуры

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

// ЭлектронноеВзаимодействие.РаботаСНоменклатурой

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

// Конец ЭлектронноеВзаимодействие.РаботаСНоменклатурой

// ИнтеграцияС1СДокументооборотом
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
	
	ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(Команда, ЭтаФорма, Элементы.Список);
	
КонецПроцедуры
// Конец ИнтеграцияС1СДокументооборотом

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

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура УстановитьУсловноеОформление()

	УсловноеОформление.Элементы.Очистить();

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоОтборовПредставлениеОтбора.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоОтборов.ФиксированноеЗначение");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
	Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.DefaultGUIFont, , , Ложь, Ложь, Истина, Ложь, ));

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоОтборовПредставление.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоОтборов.Отбор");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;

	Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.DefaultGUIFont, , , Истина, Ложь, Ложь, Ложь, ));

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоОтборов.Имя);

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИерархияНоменклатуры.Имя);
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВидыНоменклатуры.Имя);

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокКачества.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьФильтры");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Ложь;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.FormBackColor);
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);	
	
	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВидНоменклатуры.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьФильтры");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;

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

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтрокаПоискаНоменклатура.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПодборПоискНеУдачный");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ПолеСОшибкойФон);

	//

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

#Область Поиск

&НаКлиенте
Процедура ВыполнитьПоискНоменклатуры()
	
	ПодборТоваровКлиент.ВыполнениеРасширенногоПоискаВозможно(ЭтаФорма, 
		Новый ОписаниеОповещения("ВыполнитьПоискНоменклатурыЗавершение", ЭтотОбъект));
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьПоискНоменклатурыЗавершение(Результат, ДополнительныеПараметры) Экспорт 
	
	ВыполнитьПоискНоменклатурыНаСервере();
	
	ПодборТоваровКлиент.ПослеВыполненияПоискаНоменклатуры(ЭтаФорма);

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

&НаСервере
Процедура ВыполнитьПоискНоменклатурыНаСервере()
	
	ПодборТоваровСервер.ВыполнитьПоискНоменклатуры(ЭтаФорма);
	
КонецПроцедуры

&НаСервере
Процедура СнятьОтборПоСтрокеПоискаНоменклатурыНаСервере()
	
	ПодборТоваровКлиентСервер.СнятьОтборПоСтрокеПоискаНоменклатуры(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура НастроитьПоиск(Команда)
	
	ПодборТоваровКлиент.НастроитьПоиск(ЭтаФорма);
	
КонецПроцедуры

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

#Область ОбработчикиСобытийНаСервере

&НаСервере
Процедура ИспользоватьФильтрыПриИзмененииНаСервере()
	
	ПодборТоваровСервер.ПриИзмененииИспользованияФильтров(ЭтаФорма);
	
КонецПроцедуры

&НаСервере
Процедура ВидНоменклатурыПриИзмененииНаСервере()
	
	ПодборТоваровСервер.ПриИзмененииВидаНоменклатуры(ЭтаФорма);
	
КонецПроцедуры

&НаСервере
Процедура СегментНоменклатурыПриИзмененииНаСервере()
	
	ПодборТоваровСервер.ПриИзмененииСегментаНоменклатуры(ЭтаФорма);
	
КонецПроцедуры

&НаСервере
Процедура НоменклатураСАналогичнымиСвойствамиНаСервере()
	
	ПодборТоваровСервер.ПриИзмененииОтображенияНоменклатураСАналогичнымиСвойствами(ЭтаФорма);
	
КонецПроцедуры

&НаСервере
Процедура ДеревоОтборовОтборПриИзмененииНаСервере()
	
	ПодборТоваровСервер.ДеревоОтборовОтборПриИзменении(ЭтаФорма);
	
КонецПроцедуры

&НаСервере
Процедура НоменклатураИсходногоКачестваПриИзмененииНаСервере()
	
	ПодборТоваровСервер.НоменклатураИсходногоКачестваПриИзменении(ЭтаФорма);
	
КонецПроцедуры

&НаСервере
Процедура СписокКачестваПометкаПриИзмененииНаСервере()
	
	ПодборТоваровСервер.СписокКачестваПометкаПриИзменении(ЭтаФорма);
	
КонецПроцедуры

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

#Область ГорячиеКлавиши

&НаКлиенте
Процедура УстановитьТекущийЭлементСтрокаПоиска(Команда)
	
	ПодборТоваровКлиент.УстановитьТекущийЭлементСтрокаПоиска(ЭтаФорма);
	
КонецПроцедуры

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

#Область ОбработчикиОжидания

&НаКлиенте
Процедура СписокПриАктивизацииСтрокиОбработчикОжидания()
	
	ПодборТоваровКлиент.УстановитьТекущуюСтрокуИерархииНоменклатуры(ЭтаФорма);
	
КонецПроцедуры

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

#Область УправлениеВариантомНавигации

&НаКлиенте
Процедура ВидыНоменклатурыПриАктивизацииСтроки(Элемент)
 	ПодборТоваровКлиент.ПриАктивизацииСтрокиСпискаВидыНоменклатуры(ЭтаФорма);
КонецПроцедуры

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

&НаКлиенте
Процедура НадписьВариантНавигацииНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
	НадписьВариантНавигацииНавигационнойСсылкиНаСервере(НавигационнаяСсылка, СтандартнаяОбработка);
КонецПроцедуры

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

&НаКлиенте
Процедура ИзменитьВариантНавигации(Команда)
	ПодборТоваровКлиент.ИзменитьВариантНавигации(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьВариантНавигацииЗавершение(Результат, ДополнительныеПараметры) Экспорт

	Если Результат = Неопределено 
		Или ВариантНавигации = Результат.Значение Тогда
		Возврат;
	КонецЕсли;
	
	ВариантНавигации = Результат.Значение;
	ВариантНавигацииПриИзмененииНаСервере();	
	
КонецПроцедуры

&НаСервере
Процедура ВариантНавигацииПриИзмененииНаСервере()
	
	ПодборТоваровСервер.ПриИзмененииВариантаНавигации(ЭтаФорма);
	
КонецПроцедуры

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

#Область Прочее

&НаСервере
Процедура СохранитьНастройкиФормыНаСервере()
	
	ПодборТоваровСервер.СохранитьНастройкиФормы(ЭтаФорма);
	
КонецПроцедуры

&НаСервере
Функция АдресТаблицПараметровДереваОтборовНаСервере()
	
	Структура = Новый Структура("АдресТаблицыПараметров, АдресТаблицыСопоставления");
	
	Структура.АдресТаблицыПараметров = ПодборТоваровСервер.АдресТаблицыПараметровДереваОтборов(ЭтаФорма);
	Структура.АдресТаблицыСопоставления = ПодборТоваровСервер.АдресТаблицыСопоставленияДереваОтборов(ЭтаФорма);

	Возврат Структура;
	
КонецФункции

&НаСервере
Процедура ТоварыДругогоКачестваНаСервере()
	
	ПодборТоваровСервер.УстановитьОтборПоНоменклатуреДругогоКачества(ЭтаФорма);
	
КонецПроцедуры

&НаСервере
Процедура СброситьОтборыПоСвойствамНаСервере()
	
	ПодборТоваровСервер.СброситьОтборыПоСвойствам(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ВыбратьЗначениеНоменклатуры(Команда)
	
	СтрокаНоменклатуры = Элементы[ПодборТоваровКлиентСервер.ИмяСпискаНоменклатурыПоВариантуПоиска(ЭтаФорма)].ТекущиеДанные;
	
	Если СтрокаНоменклатуры <> Неопределено Тогда
		ПроверитьПометкуУдаленияИВыбрать(СтрокаНоменклатуры, СтрокаНоменклатуры.Ссылка);
	КонецЕсли;
	
КонецПроцедуры

// Выполняет проверку пометки удаления у элемента номенклатуры.
//
// Параметры:
//	СтрокаНоменклатуры - ДанныеФормыСтруктура - данные текущей строки списка номенклатуры
//
&НаКлиенте
Процедура ПроверитьПометкуУдаленияИВыбрать(СтрокаНоменклатуры, НоменклатураСсылка)
	
	Если СтрокаНоменклатуры = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если СтрокаНоменклатуры.ПометкаУдаления Тогда
		ПоказатьВопрос(
		Новый ОписаниеОповещения("ПроверитьПометкуУдаленияИВыбратьЗавершение", ЭтотОбъект, 
				Новый Структура("НоменклатураСсылка", НоменклатураСсылка)), 
			НСтр("ru = 'Выбранные данные помечены на удаление.
				|Выполнить выбор этих данных?'") , 
			РежимДиалогаВопрос.ДаНет);
		Возврат;
	КонецЕсли;
	
	ОповеститьОВыборе(НоменклатураСсылка);
	
КонецПроцедуры

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

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

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

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

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