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

файл

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

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

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

	СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
	// СтандартныеПодсистемы.БазоваяФункциональность
	МультиязычностьСервер.ПриСозданииНаСервере(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.БазоваяФункциональность
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	//

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

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

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

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

	//

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

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

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

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

	//

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

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

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

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

	//

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

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

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

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

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

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

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

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

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

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

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

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

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