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