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