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