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