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