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