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