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