Заказ на сборку (разборку) / Форма документа / Модуль формы

файл
#Область ОписаниеПеременных

&НаКлиенте
Перем КэшированныеЗначения; //используется механизмом обработки изменения реквизитов ТЧ

&НаКлиенте
Перем СерияРедактируетсяВШапке; //используется для определения, что форма подбора серий вызвана для серии, указанной в шапке

&НаКлиенте
Перем ТекущиеДанныеИдентификатор; //используется для передачи текущей строки в обработчик ожидания

&НаКлиенте
Перем ФормаМодифицирована; // используется для отработки события изменения модифицированности формы

#КонецОбласти

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если ДоступныеОстаткиПараметрыВстраивания = Неопределено Тогда
		ПараметрыВстраивания = Документы.ЗаказНаСборку.ДоступныеОстаткиПараметрыВстраивания(Объект);
	Иначе // параметры уже были проинициализированы при чтении на сервере
		ПараметрыВстраивания = ДоступныеОстаткиПараметрыВстраивания;
	КонецЕсли;
	ОбеспечениеВДокументахСервер.ДоступныеОстаткиПриСозданииНаСервере(ЭтотОбъект, ПараметрыВстраивания);
	
	УстановитьУсловноеОформление();
	
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;
	
	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
	
	ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтаФорма);
	
	// Обработчик механизма "ВерсионированиеОбъектов"
	ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
	
	// СтандартныеПодсистемы.Свойства
	ДополнительныеПараметры = Новый Структура;
	ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
	ДополнительныеПараметры.Вставить("ОтложеннаяИнициализация", Истина);
	УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
	// Конец СтандартныеПодсистемы.Свойства
	
	Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
		
		ПриЧтенииСозданииНаСервере();
		
		НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект,ПараметрыУказанияСерий.ТЧ);
		НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект,ПараметрыУказанияСерий.Шапка);
		
	КонецЕсли;
	
	// Обработчик механизма "Назначения"
	Справочники.Назначения.ФормаДокументаПриСозданииНаСервере(ЭтаФорма);
	
	Элементы.ЗакрытьЗаказ.Доступность = ПравоДоступа("Изменение",Метаданные.Документы.ЗаказНаСборку);
	
	УстановитьДоступностьКомандБуфераОбмена();
	
	// Установка списка доступных статусов
	Перечисления.СтатусыВнутреннихЗаказов.ЗаполнитьСписокВыбора(Элементы.Статус.СписокВыбора, Ложь);
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
	// ИнтеграцияС1СДокументооборотом
	ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтаФорма);
	// Конец ИнтеграцияС1СДокументооборотом
	
	// СтандартныеПодсистемы.РаботаСФайлами
	ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов();
	ПараметрыГиперссылки.Размещение = "КоманднаяПанель";
	РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки);
	// Конец СтандартныеПодсистемы.РаботаСФайлами

	СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);

КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ПодключитьОбработчикОжидания("Подключаемый_ПриИзмененииМодифицированностиФормы", 1);
	
	// СтандартныеПодсистемы.Свойства
	УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.Свойства
	
	МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтаФорма, "СканерШтрихкода");
	
	НоменклатураКлиент.ОбновитьКешированныеЗначенияШапкиДляУчетаСерий(Объект,КэшированныеЗначения,ПараметрыУказанияСерий.Шапка);
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
	// СтандартныеПодсистемы.РаботаСФайлами
	РаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ);
	// Конец СтандартныеПодсистемы.РаботаСФайлами
	
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)

	МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(Неопределено, ЭтаФорма);

КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
	
	// &ЗамерПроизводительности
	ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
		"Документ.ЗаказНаСборку.Форма.ФормаДокумента.Событие.ОбработкаВыбора");
	
	Если ИсточникВыбора.ИмяФормы = "Обработка.СостояниеОбеспеченияЗаказов.Форма.Форма" Тогда
		
		АдресТаблицыДвижений = ЗаполнитьОбеспечениеИзФормыСостоянияОбеспечения(
			ВыбранноеЗначение.КодДействия,
			ВыбранноеЗначение.АдресАналитик,
			ВыбранноеЗначение.ПараметрыЗаполнения);
			
		// Возврат управления в форму обработки состояния обеспечения.
		ВыполнитьОбработкуОповещения(ВыбранноеЗначение.ВыполняемоеОповещение, АдресТаблицыДвижений);
		
	ИначеЕсли ИсточникВыбора.ИмяФормы = "Обработка.ПодборТоваровВДокументПродажи.Форма.Форма" Тогда
		
		ОбработкаВыбораПодборНаКлиенте(ВыбранноеЗначение);
		
	ИначеЕсли НоменклатураКлиент.ЭтоУказаниеСерий(ИсточникВыбора) Тогда
		
		Если СерияРедактируетсяВШапке Тогда 
			НоменклатураКлиент.ОбработатьУказаниеСерии(ЭтаФорма, ПараметрыУказанияСерий.Шапка, ВыбранноеЗначение);
			НоменклатураКлиент.ОбновитьКешированныеЗначенияШапкиДляУчетаСерий(Объект,КэшированныеЗначения,ПараметрыУказанияСерий.Шапка);	
		Иначе
			НоменклатураКлиент.ОбработатьУказаниеСерии(ЭтаФорма, ПараметрыУказанияСерий.ТЧ, ВыбранноеЗначение);
		КонецЕсли;
	ИначеЕсли ИсточникВыбора.ИмяФормы = "Обработка.ПомощникЗакрытияЗаказов.Форма.ФормаЗакрытия" Тогда
		
		РезультатОтмены = СкорректироватьСтрокиЗаказа(ВыбранноеЗначение);
		ПоказатьОповещениеПользователя(НСтр("ru = 'Отмена неотработанных строк'"), , РезультатОтмены.Оповещение);
		
		Если НоменклатураКлиент.НеобходимоОбновитьСтатусСерийВШапке(Объект, КэшированныеЗначения, ПараметрыУказанияСерий.Шапка) Тогда
			НоменклатураКлиент.ОбновитьКешированныеЗначенияШапкиДляУчетаСерий(Объект, КэшированныеЗначения, ПараметрыУказанияСерий.Шапка);
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	// ПодключаемоеОборудование
	Если Источник = "ПодключаемоеОборудование" И ВводДоступен() Тогда
		Если ИмяСобытия = "ScanData" И МенеджерОборудованияУТКлиент.ЕстьНеобработанноеСобытие() Тогда
			ОбработатьШтрихкоды(МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВМассив(Параметр));
		КонецЕсли;
	КонецЕсли;
	// Конец ПодключаемоеОборудование

	// Неизвестные штрихкоды
	Если Источник = "ПодключаемоеОборудование"
		И ИмяСобытия = "НеизвестныеШтрихкоды"
		И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
		
		КэшированныеЗначения.Штрихкоды.Очистить();
		ДанныеШтрихкодов = Новый Массив;
		Для Каждого ПолученныйШтрихкод Из Параметр.ПолученыНовыеШтрихкоды Цикл
			ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод);
		КонецЦикла;
		Для Каждого ПолученныйШтрихкод Из Параметр.ЗарегистрированныеШтрихкоды Цикл
			ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод);
		КонецЦикла;
		
		ОбработатьШтрихкоды(ДанныеШтрихкодов);
		
	КонецЕсли;
	
	Если ИмяСобытия = "КопированиеСтрокВБуферОбмена" Тогда
		
		УстановитьДоступностьКомандБуфераОбменаНаКлиенте();
		
	КонецЕсли;
	
	// СтандартныеПодсистемы.Свойства
	Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда
		ОбновитьЭлементыДополнительныхРеквизитов();
		УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
	КонецЕсли;
	// Конец СтандартныеПодсистемы.Свойства
	
	// СтандартныеПодсистемы.РаботаСФайлами
	РаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия);
	// Конец СтандартныеПодсистемы.РаботаСФайлами
	
	СобытияФормКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаНавигационнойСсылки(НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	СобытияФормКлиент.ОбработкаНавигационнойСсылки(ЭтотОбъект, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
	
КонецПроцедуры

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	// Конец СтандартныеПодсистемы.УправлениеДоступом

	ДоступныеОстаткиПараметрыВстраивания = Неопределено;
	ПараметрыВстраивания = Документы.ЗаказНаСборку.ДоступныеОстаткиПараметрыВстраивания(Объект);
	ОбеспечениеВДокументахСервер.ДоступныеОстаткиПриЧтенииНаСервере(ЭтотОбъект, ПараметрыВстраивания);
	
	ПриЧтенииСозданииНаСервере();
	
	СобытияФорм.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
	
	// СтандартныеПодсистемы.Свойства	
	УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	// Конец СтандартныеПодсистемы.Свойства
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
	
	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	// Конец СтандартныеПодсистемы.УправлениеДоступом
	
	ОбеспечениеВДокументахСервер.ПослеЗаписиНаСервере(ЭтотОбъект);
	УстановитьСвойстваЭлементовФормыХозяйственнаяОперация();
	ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
	
	СобытияФорм.ПослеЗаписиНаСервере(ЭтаФорма, ТекущийОбъект, ПараметрыЗаписи);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
	
	ФормаМодифицирована = Неопределено;
	Подключаемый_ПриИзмененииМодифицированностиФормы();
	
	ОповеститьОПроведенииДокумента(ПараметрыЗаписи);
	ОбеспечениеВДокументахКлиент.ПослеЗаписи(ЭтотОбъект, "Подключаемый_ПроверитьВыполнениеЗаданияРаспределенияЗапасов");
	
	МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтаФорма, ПараметрыЗаписи);
	
	Если ПараметрыЗаписи.Свойство("СозданиеКорректировки") Тогда
		
		ДополнительныеПараметры = ПараметрыЗаписи.СозданиеКорректировки;
		
		Если Объект.Проведен Тогда
			
			// Если документ записан впервые, в ОбъектыОснований находится пустая ссылка, нужно актуализировать.
			ОбъектыОснований = Новый Массив();
			ОбъектыОснований.Добавить(Объект.Ссылка);
			
			ДополнительныеПараметры.ОписаниеКоманды.Вставить("ОбъектыОснований", ОбъектыОснований);
			ДополнительныеПараметры.ОписаниеКоманды.Вставить("Форма", ЭтотОбъект);
			
			ОбеспечениеВДокументахКлиент.ОткрытьЗаполнениеКорректировкиНазначения(
				ДополнительныеПараметры.Резервирование,
				Объект.Ссылка,
				ДополнительныеПараметры.ОписаниеКоманды);
			
		КонецЕсли;
		
	КонецЕсли;
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
		МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
		МодульПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
	КонецЕсли;
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

	// СтандартныеПодсистемы.Свойства
	УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
	// Конец СтандартныеПодсистемы.Свойства
	
	МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтаФорма, Отказ, ТекущийОбъект, ПараметрыЗаписи);

	// ИнтеграцияС1СДокументооборотом
	ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект, ПараметрыЗаписи);
	// Конец ИнтеграцияС1СДокументооборотом
	
КонецПроцедуры

&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
	
	// СтандартныеПодсистемы.Свойства
	УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
	// Конец СтандартныеПодсистемы.Свойства
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
	
	АктуализироватьСборкуПодДеятельность();
	
КонецПроцедуры

&НаКлиенте
Процедура СкладПриИзменении(Элемент)
	
	СкладПриИзмененииСервер();
	НоменклатураКлиент.ОбновитьКешированныеЗначенияШапкиДляУчетаСерий(Объект,КэшированныеЗначения, ПараметрыУказанияСерий.Шапка);
	
КонецПроцедуры

&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
	
	ПодготовитьЗаполнитьУстановитьВидимостьСерий();
	АктуализироватьСборкуПодДеятельность();
	НоменклатураКлиент.ОбновитьКешированныеЗначенияШапкиДляУчетаСерий(Объект,КэшированныеЗначения, ПараметрыУказанияСерий.Шапка);
	
КонецПроцедуры

&НаКлиенте
Процедура ХозяйственнаяОперацияПриИзменении(Элемент)
	
	ХозяйственнаяОперацияПриИзмененииСервер();
	НоменклатураКлиент.ОбновитьКешированныеЗначенияШапкиДляУчетаСерий(Объект,КэшированныеЗначения, ПараметрыУказанияСерий.Шапка);
	
КонецПроцедуры

&НаКлиенте
Процедура НоменклатураПриИзменении(Элемент)
	
	НоменклатураПриИзмененииСервер(КэшированныеЗначения);
	НоменклатураКлиент.ОбновитьКешированныеЗначенияШапкиДляУчетаСерий(Объект, КэшированныеЗначения, ПараметрыУказанияСерий.Шапка);
	
	СкрытьГруппуОтмена();
	
КонецПроцедуры

&НаКлиенте
Процедура ХарактеристикаПриИзменении(Элемент)

	СтруктураДействий = Новый Структура;
	СтруктураДействий.Вставить("ПроверитьЗаполнитьВариантКомплектацииПоВладельцу", Объект.ВариантКомплектации);
	СтруктураДействий.Вставить("ПроверитьЗаполнитьНазначение");
	СтруктураСтроки = Новый Структура;
	СтруктураСтроки.Вставить("Номенклатура",               Объект.Номенклатура);
	СтруктураСтроки.Вставить("Характеристика",             Объект.Характеристика);
	СтруктураСтроки.Вставить("ВариантКомплектации",        Объект.ВариантКомплектации);
	СтруктураСтроки.Вставить("ХарактеристикиИспользуются", Истина);

	СтруктураДействий.Вставить("ХарактеристикаПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
		ЭтаФорма.ИмяФормы, "Объект"));

	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(СтруктураСтроки, СтруктураДействий, КэшированныеЗначения);

	ЗаполнитьЗначенияСвойств(Объект, СтруктураСтроки, "ВариантКомплектации");
	
	ХарактеристикаПриИзмененииСервер();
	ВариантКомплектацииПриИзмененииНаСервере();
	
	Если НоменклатураКлиент.НеобходимоОбновитьСтатусСерийВШапке(Объект,КэшированныеЗначения,ПараметрыУказанияСерий.Шапка) Тогда
		
		ЗаполнитьСтатусыУказанияСерийПриИзмененииТовараВШапке(КэшированныеЗначения);
		НоменклатураКлиент.ОбновитьКешированныеЗначенияШапкиДляУчетаСерий(Объект,КэшированныеЗначения,ПараметрыУказанияСерий.Шапка);	
		
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура УпаковкаПриИзменении(Элемент)
	
	СтруктураДействий = Новый Структура;
	СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
	
	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(Объект, СтруктураДействий, КэшированныеЗначения);
	НадписьУпаковка = ?(ЗначениеЗаполнено(Объект.Упаковка), Объект.Упаковка, Элементы.Упаковка.ПодсказкаВвода);
	ВыполнитьДействияОбеспеченияКомплектаНаКлиенте("Доступно");
	
КонецПроцедуры

&НаКлиенте
Процедура КоличествоУпаковокПриИзменении(Элемент)
	
	СтруктураДействий = Новый Структура;
	ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(Объект, СтруктураДействий, КэшированныеЗначения);
	
	ВыполнитьДействияОбеспеченияКомплектаНаКлиенте("Доступно");
	СкрытьГруппуОтмена();
	
	Если НоменклатураКлиент.НеобходимоОбновитьСтатусСерийВШапке(Объект,КэшированныеЗначения,ПараметрыУказанияСерий.Шапка) Тогда
		
		ЗаполнитьСтатусыУказанияСерийПриИзмененииТовараВШапке(КэшированныеЗначения);
		НоменклатураКлиент.ОбновитьКешированныеЗначенияШапкиДляУчетаСерий(Объект,КэшированныеЗначения,ПараметрыУказанияСерий.Шапка);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура СкрытьГруппуОтмена()
	
	// Количество изменено пользователем. Значение отмененного количества больше не актуально.
	Объект.КоличествоОтменено = 0;
	Объект.КоличествоУпаковокОтменено = 0;
	// Пока по документу нет отмененных комплектов, соответствующее поле скрыто.
	Элементы.ГруппаОтмена.Видимость = Ложь;
	
КонецПроцедуры

&НаКлиенте
Процедура СтатусУказанияСерийНажатие(Элемент, СтандартнаяОбработка)
	ОткрытьПодборСерийКомплекта();
КонецПроцедуры

&НаКлиенте
Процедура СерияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	ОткрытьПодборСерийКомплекта(Элемент.ТекстРедактирования);
КонецПроцедуры

&НаКлиенте
Процедура СерияПриИзменении(Элемент)
	ВыбранноеЗначение = НоменклатураКлиентСервер.ВыбраннаяСерия();
	
	ВыбранноеЗначение.Значение            		 = Объект.Серия;
	
	НоменклатураКлиент.ОбработатьУказаниеСерии(ЭтаФорма, ПараметрыУказанияСерий.Шапка, ВыбранноеЗначение);
	НоменклатураКлиент.ОбновитьКешированныеЗначенияШапкиДляУчетаСерий(Объект,КэшированныеЗначения,ПараметрыУказанияСерий.Шапка);	
КонецПроцедуры

&НаКлиенте
Процедура ДлительностьСборкиРазборкиПриИзменении(Элемент)
	
	Если ЗначениеЗаполнено(Объект.НачалоСборкиРазборки) Тогда
		
		Объект.ОкончаниеСборкиРазборки = Объект.НачалоСборкиРазборки + Объект.ДлительностьСборкиРазборки * 86400;
		
	ИначеЕсли ЗначениеЗаполнено(Объект.ОкончаниеСборкиРазборки) Тогда
		
		Объект.НачалоСборкиРазборки = Объект.ОкончаниеСборкиРазборки - Объект.ДлительностьСборкиРазборки * 86400;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура НачалоСборкиРазборкиПриИзменении(Элемент)
	
	Если ЗначениеЗаполнено(Объект.НачалоСборкиРазборки) Тогда
		
		Объект.ОкончаниеСборкиРазборки = Объект.НачалоСборкиРазборки + Объект.ДлительностьСборкиРазборки * 86400;
		
	Иначе
		
		Объект.ОкончаниеСборкиРазборки = Неопределено;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОкончаниеСборкиРазборкиПриИзменении(Элемент)
	
	Если ЗначениеЗаполнено(Объект.ОкончаниеСборкиРазборки) Тогда
		
		Объект.НачалоСборкиРазборки = Объект.ОкончаниеСборкиРазборки - Объект.ДлительностьСборкиРазборки * 86400;
		
	Иначе
		
		Объект.НачалоСборкиРазборки = Неопределено;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура НаправлениеДеятельностиПриИзменении(Элемент)
	
	НаправлениеДеятельностиПриИзмененииСервер();
	
КонецПроцедуры

&НаКлиенте
Процедура ГруппаСтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)
	
	// СтандартныеПодсистемы.Свойства
	Если ЭтотОбъект.ПараметрыСвойств.Свойство(ТекущаяСтраница.Имя)
			И Не ЭтотОбъект.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда
		
		СвойстваВыполнитьОтложеннуюИнициализацию();
		УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
	КонецЕсли;
	// Конец СтандартныеПодсистемы.Свойства
	
КонецПроцедуры

&НаКлиенте
Процедура СборкаПодДеятельностьОчистка(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
КонецПроцедуры

&НаКлиенте
Процедура НазначениеПриИзменении(Элемент)
	
	НазначениеПриИзмененииСервер();
	
КонецПроцедуры

&НаКлиенте
Процедура ВариантОбеспеченияПриИзменении(Элемент)
	
	Перем ПараметрыФормы;
	Если ОбеспечениеВДокументахКлиент.ОткрытьФормуВыбораСкладаИСерий(ЭтотОбъект) Тогда
		ВариантПолученияПараметров = ОбеспечениеВДокументахКлиентСервер.РежимВыборДействия();
		ПараметрыФормы = ПараметрыФормыЗапросаКоличестваИСерийКомплекта(ВариантПолученияПараметров); // вызов сервера
	КонецЕсли;
	
	ОбеспечениеВДокументахКлиент.ВариантОбеспеченияПриИзменении(
		ЭтотОбъект,
		ПараметрыФормы,
		"ОбработатьВыборСкладаИСерииКомплекта",
		Ложь,
		"ВариантОбеспеченияПриИзмененииНаКлиенте");
	
КонецПроцедуры

&НаКлиенте
Процедура ВариантОбеспеченияОчистка(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

&НаКлиенте
Процедура ВариантОбеспеченияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	ОбеспечениеВДокументахКлиент.ВариантОбеспеченияОбработкаВыбора(
		ЭтотОбъект,
		Объект,
		ВыбранноеЗначение);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбособленноПриИзменении(Элемент)
	
	ОбновитьКолонкуДоступноСервер();
	
КонецПроцедуры

&НаКлиенте
Процедура ДоступноНажатие(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ПараметрыФормы = ПараметрыФормыЗапросаКоличестваИСерийКомплекта(Неопределено);
	
	Если ПараметрыФормы <> Неопределено Тогда
		ОткрытьФорму("Обработка.ЗапросКоличестваИСерий.Форма", ПараметрыФормы, ЭтотОбъект);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ГиперссылкаСостояниеОбеспеченияНажатие(Элемент)
	
	ГиперссылкаСостояниеОбеспеченияНажатиеОбщий();
	
КонецПроцедуры

&НаКлиенте
Процедура ГиперссылкаСостояниеОбеспеченияПроблемаНажатие(Элемент)
	
	ГиперссылкаСостояниеОбеспеченияНажатиеОбщий();
	
КонецПроцедуры

&НаКлиенте
Процедура ГиперссылкаСостояниеОбеспеченияОтгружаетсяНажатие(Элемент)
	
	ГиперссылкаСостояниеОбеспеченияНажатиеОбщий();
	
КонецПроцедуры

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка)
	
	РаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
	
	РаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент,
				ПараметрыПеретаскивания, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
	
	РаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент,
				ПараметрыПеретаскивания, СтандартнаяОбработка);
	
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыТовары

&НаКлиенте
Процедура ТоварыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	// &ЗамерПроизводительности
	ОценкаПроизводительностиКлиент.НачатьЗамерВремени(
		Истина, "Документ.ЗаказНаСборку.Форма.ФормаДокумента.Элементы.Товары.Выбор");
	
	Если Элемент.ТекущийЭлемент = Элементы.ТоварыДоступно И Не ТолькоПросмотр Тогда
		
		СтандартнаяОбработка = Ложь;
		
		ПараметрыФормы = ПараметрыФормыЗапросаКоличестваИСерий(Неопределено);
		
		Если ПараметрыФормы <> Неопределено Тогда
			ОткрытьФорму("Обработка.ЗапросКоличестваИСерий.Форма", ПараметрыФормы, ЭтотОбъект);
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)

	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
	
	СтруктураДействий = Новый Структура;
	СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекущаяСтрока.Характеристика);
	СтруктураДействий.Вставить("ПроверитьЗаполнитьУпаковкуПоВладельцу"      , ТекущаяСтрока.Упаковка);
	СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
	СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
	СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
	СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус", Новый Структура("Склад, ПараметрыУказанияСерий", Объект.Склад, ПараметрыУказанияСерий.ТЧ));
	ДобавитьДействияОбеспеченияНаКлиенте(СтруктураДействий, "ВариантОбеспечения,ДоступноВДругихСтроках");
	НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтаФорма, СтруктураДействий);
	СтруктураДействий.Вставить("НоменклатураПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
		ЭтаФорма.ИмяФормы, "Товары"));
	
	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
	
	Если ОбеспечениеВДокументахКлиент.ТребуетсяОбновитьКолонкуДоступно(СтруктураДействий) Тогда
		ОбновитьКолонкуДоступноСервер();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыХарактеристикаПриИзменении(Элемент)
	
	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
	
	СтруктураДействий = Новый Структура;
	ДобавитьДействияОбеспеченияНаКлиенте(СтруктураДействий, "ВариантОбеспечения,ДоступноВДругихСтроках");
	НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтаФорма, СтруктураДействий);
	СтруктураДействий.Вставить("ХарактеристикаПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
		ЭтаФорма.ИмяФормы, "Товары"));
	
	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
	
	Если ОбеспечениеВДокументахКлиент.ТребуетсяОбновитьКолонкуДоступно(СтруктураДействий) Тогда
		ОбновитьКолонкуДоступноСервер();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыУпаковкаПриИзменении(Элемент)

	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
	
	СтруктураДействий = Новый Структура;
	СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
	ДобавитьДействияОбеспеченияНаКлиенте(СтруктураДействий, "ДоступноВДругихСтроках");
	
	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
	
	Если ОбеспечениеВДокументахКлиент.ТребуетсяОбновитьКолонкуДоступно(СтруктураДействий) Тогда
		ОбновитьКолонкуДоступноСервер();
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ТоварыКоличествоУпаковокПриИзменении(Элемент)
	
	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
	
	СтруктураДействий = Новый Структура;
	ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
	ДобавитьДействияОбеспеченияНаКлиенте(СтруктураДействий, "ДоступноВДругихСтроках");
	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
	
	Если ОбеспечениеВДокументахКлиент.ТребуетсяОбновитьКолонкуДоступно(СтруктураДействий) Тогда
		ОбновитьКолонкуДоступноСервер();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
	
	РаботаСТабличнымиЧастямиКлиент.КэшироватьТекущуюСтроку(Элементы.Товары, ЭтотОбъект);
	Если НоваяСтрока Тогда
		
		Элементы.Товары.ТекущиеДанные.КодСтроки = 0;
		
	КонецЕсли;
	
	Если Копирование Тогда
		СтруктураДействий = Новый Структура;
		ДобавитьДействияОбеспеченияНаКлиенте(СтруктураДействий, "ВариантОбеспечения,Доступно");
		СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус", Новый Структура("Склад, ПараметрыУказанияСерий", Объект.Склад, ПараметрыУказанияСерий.ТЧ));
		ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(Элементы.Товары.ТекущиеДанные, СтруктураДействий, КэшированныеЗначения);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыСерияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	ОткрытьПодборСерий(Элемент.ТекстРедактирования);
КонецПроцедуры

&НаКлиенте
Процедура ТоварыСерияПриИзменении(Элемент)
	ВыбранноеЗначение = НоменклатураКлиентСервер.ВыбраннаяСерия();
	
	ВыбранноеЗначение.Значение					 = Элементы.Товары.ТекущиеДанные.Серия;
	ВыбранноеЗначение.ИдентификаторТекущейСтроки = Элементы.Товары.ТекущиеДанные.ПолучитьИдентификатор();
	
	НоменклатураКлиент.ОбработатьУказаниеСерии(ЭтаФорма, ПараметрыУказанияСерий.ТЧ, ВыбранноеЗначение);
КонецПроцедуры

&НаКлиенте
Процедура ТоварыВариантОбеспеченияПриИзменении(Элемент)
	
	Перем ПараметрыФормы;
	Если ОбеспечениеВДокументахКлиент.ОткрытьФормуВыбораСкладаИСерий(ЭтотОбъект) Тогда
		ВариантПолученияПараметров = ОбеспечениеВДокументахКлиентСервер.РежимВыборДействия();
		ПараметрыФормы = ПараметрыФормыЗапросаКоличестваИСерий(ВариантПолученияПараметров); // вызов сервера
	КонецЕсли;
	
	ОбеспечениеВДокументахКлиент.ВариантОбеспеченияПриИзменении(
		ЭтотОбъект,
		ПараметрыФормы,
		"ОбработатьВыборСкладаИСерии",
		Ложь,
		"ТоварыВариантОбеспеченияПриИзмененииНаКлиенте");
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыВариантОбеспеченияОчистка(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыОтмененоПриИзменении(Элемент)
	
	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
	
	СтруктураДействий = Новый Структура;
	ДобавитьДействияОбеспеченияНаКлиенте(СтруктураДействий, "ДоступноВДругихСтроках");
	СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус", Новый Структура("Склад, ПараметрыУказанияСерий", Объект.Склад, ПараметрыУказанияСерий.ТЧ));
	
	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
	
	Если ОбеспечениеВДокументахКлиент.ТребуетсяОбновитьКолонкуДоступно(СтруктураДействий) Тогда
		ОбновитьКолонкуДоступноСервер();
	КонецЕсли;
	
	РассчитатьИтоговыеПоказателиЗаказа();
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыПослеУдаления(Элемент)
	
	Если Объект.ХозяйственнаяОперация = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.СборкаТоваров") Тогда
		ОбновитьКолонкуДоступноСервер();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыВариантОбеспеченияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	ОбеспечениеВДокументахКлиент.ВариантОбеспеченияОбработкаВыбора(
		ЭтотОбъект,
		Элементы.Товары.ТекущиеДанные,
		ВыбранноеЗначение);
		
КонецПроцедуры

&НаКлиенте
Процедура ТоварыОбособленноПриИзменении(Элемент)
	
	СтрокаТаблицы = Элементы.Товары.ТекущиеДанные;
	ОбеспечениеВДокументахКлиент.ОбособленноПриИзменении(СтрокаТаблицы);
	СтруктураДействий = Новый Структура();
	ДобавитьДействияОбеспеченияНаКлиенте(СтруктураДействий, "ДоступноВДругихСтроках");
	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(СтрокаТаблицы, СтруктураДействий, Неопределено);
	
	Если ОбеспечениеВДокументахКлиент.ТребуетсяОбновитьКолонкуДоступно(СтруктураДействий) Тогда
		ОбновитьКолонкуДоступноСервер();
	КонецЕсли;
	
КонецПроцедуры


&НаКлиенте
Процедура ТоварыНазначениеПриИзменении(Элемент)
	
	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
	
	СтруктураДействий = Новый Структура();
	ДобавитьДействияОбеспеченияНаКлиенте(СтруктураДействий, "ДоступноВДругихСтроках");
	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
	
	Если ОбеспечениеВДокументахКлиент.ТребуетсяОбновитьКолонкуДоступно(СтруктураДействий) Тогда
		ОбновитьКолонкуДоступноСервер();
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
	ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

&НаКлиенте
Процедура ЗагрузитьДанныеИзТСД(Команда)
	
	ОчиститьСообщения();
	
	// &ЗамерПроизводительности
	ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
		"Документ.ЗаказНаСборку.ФормаДокумента.Команда.ЗагрузитьДанныеИзТСД");
	
	МенеджерОборудованияКлиент.НачатьЗагрузкуДанныеИзТСД(
		Новый ОписаниеОповещения("ЗагрузитьИзТСДЗавершение", ЭтотОбъект),
		УникальныйИдентификатор);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьИзТСДЗавершение(Результат, Параметры) Экспорт
	
	Если Результат.Результат Тогда
		ОбработатьШтрихкоды(Результат.ТаблицаТоваров);
	Иначе
		МенеджерОборудованияУТКлиент.СообщитьОбОшибке(Результат);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаписатьДокумент(Команда)
	
	ОбщегоНазначенияУТКлиент.Записать(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьКомплектующими(Команда)
	
	ОчиститьСообщения();
	Если Не ЗначениеЗаполнено(Объект.ВариантКомплектации) Тогда

		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не указано поле ""Комплектация""'"),,
				"ВариантКомплектации",
				"Объект");

		Возврат;
		
	КонецЕсли;

	ЗаполнитьТоварыПоВариантуКомплектации();

КонецПроцедуры

&НаКлиенте
Процедура ПодобратьТовары(Команда)
	
	// &ЗамерПроизводительности
	ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
		"Документ.ЗаказНаСборку.ФормаДокумента.Команда.ПодобратьТовары");
	
	Отказ = Ложь;
	
	Если Отказ Тогда
		
		Возврат;
		
	КонецЕсли;
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("Склад",                                     Объект.Склад);
	ПараметрыФормы.Вставить("РежимПодбораБезСуммовыхПараметров",         Истина);
	ПараметрыФормы.Вставить("ОтборПоТипуНоменклатуры",                   Новый ФиксированныйМассив(НоменклатураКлиентСервер.ОтборПоТоваруМногооборотнойТаре(Ложь)));
	ПараметрыФормы.Вставить("СкрыватьКолонкуВидЦены",                    Истина);
	ПараметрыФормы.Вставить("ИспользоватьДатыОтгрузки",                  Истина);
	ПараметрыФормы.Вставить("СкрыватьКомандуЦеныНоменклатуры",           Истина);
	ПараметрыФормы.Вставить("Заголовок",                                 НСтр("ru = 'Подбор товаров'"));
	ПараметрыФормы.Вставить("Дата",                                      Объект.Дата);
	ПараметрыФормы.Вставить("Документ",                                  Объект.Ссылка);
	ПараметрыФормы.Вставить("ПараметрыУказанияСерий",                    ПараметрыУказанияСерий.ТЧ);
	ПараметрыФормы.Вставить("Назначение",                                Объект.НазначениеТовары);
	ПараметрыФормы.Вставить("Подразделение",                             Объект.Подразделение);
	ПараметрыФормы.Вставить("ПодборВариантовОбеспечения",                Истина);
	ПараметрыФормы.Вставить("ДоступныеОстаткиПараметрыДокумента",        Неопределено);
	
	ОткрытьФорму("Обработка.ПодборТоваровВДокументПродажи.Форма", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор);
	
КонецПроцедуры

&НаКлиенте
Процедура ПоискПоШтрихкодуВыполнить(Команда)
	
	ОчиститьСообщения();
	
	Оповещение = Новый ОписаниеОповещения("ПоискПоШтрихкодуЗавершение", ЭтотОбъект);
	ШтрихкодированиеНоменклатурыКлиент.ПоказатьВводШтрихкода(Оповещение);
	
КонецПроцедуры

&НаКлиенте
Процедура ПоискПоШтрихкодуЗавершение(ДанныхШтрихкода, ДополнительныеПараметры) Экспорт
	
	ОбработатьШтрихкоды(ДанныхШтрихкода);
	
КонецПроцедуры

&НаКлиенте
Процедура ПровестиДокумент(Команда)
	
	ОбщегоНазначенияУТКлиент.Провести(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ПровестиИЗакрыть(Команда)
	
	ОбщегоНазначенияУТКлиент.ПровестиИЗакрыть(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура РазбитьСтроку(Команда)
	
	ТаблицаФормы  = Элементы.Товары;
	ДанныеТаблицы = Объект.Товары;
	
	Оповещение = Новый ОписаниеОповещения("РазбитьСтрокуЗавершение", ЭтотОбъект);
	РаботаСТабличнымиЧастямиКлиент.РазбитьСтроку(ДанныеТаблицы, ТаблицаФормы, Оповещение);
	
КонецПроцедуры

&НаКлиенте
Процедура РазбитьСтрокуЗавершение(НоваяСтрока, ДополнительныеПараметры) Экспорт 
	
	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
	
	Если НоваяСтрока <> Неопределено Тогда
		
		НоваяСтрока.КодСтроки = 0;
		
		СтруктураДействий = Новый Структура;
		ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
		ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
		Если Объект.ХозяйственнаяОперация
				= ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.СборкаТоваров") Тогда
			ДобавитьДействияОбеспеченияНаКлиенте(СтруктураДействий,"ОбновитьКэшНоменклатура");
		КонецЕсли;
		ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(НоваяСтрока, СтруктураДействий, КэшированныеЗначения);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура УказатьСерииВШапке(Команда)
	
	ОткрытьПодборСерийКомплекта();
	
КонецПроцедуры

&НаКлиенте
Процедура ВставитьСтроки(Команда)
	
	КоличествоТоваровДоВставки = Объект.Товары.Количество();
	
	ПолучитьСтрокиИзБуфераОбмена();
	
	КоличествоВставленных = Объект.Товары.Количество()-КоличествоТоваровДоВставки;
	РаботаСТабличнымиЧастямиКлиент.ОповеститьПользователяОВставкеСтрок(КоличествоВставленных);
	
КонецПроцедуры

&НаКлиенте
Процедура СкопироватьСтроки(Команда)
	
	Если РаботаСТабличнымиЧастямиКлиент.ВыбранаСтрокаДляВыполненияКоманды(Элементы.Товары) Тогда
		СкопироватьСтрокиНаСервере();
		РаботаСТабличнымиЧастямиКлиент.ОповеститьПользователяОКопированииСтрок(Элементы.Товары.ВыделенныеСтроки.Количество());
	КонецЕсли;

КонецПроцедуры

#Область Обеспечение

&НаКлиенте
Процедура СоздатьКорректировкуНазначенияРезервирование(Команда)
	
	// &ЗамерПроизводительности
	ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
		"Документ.ЗаказНаСборку.ФормаДокумента.Команда.СоздатьКорректировкуНазначенияРезервирование");
	
	ОбъектыОснований = Новый Массив();
	ОбъектыОснований.Добавить(Объект.Ссылка);
	
	ОписаниеКоманды = Новый Структура();
	ОписаниеКоманды.Вставить("ОбъектыОснований", ОбъектыОснований);
	
	Если Не Объект.Проведен Или Модифицированность Тогда
		ДополнительныеПараметры = Новый Структура();
		ДополнительныеПараметры.Вставить("Резервирование", Истина);
		ДополнительныеПараметры.Вставить("ОписаниеКоманды", ОписаниеКоманды);
		
		ТекстВопроса = НСтр("ru = 'Для резервирования под назначение необходимо предварительно провести документ. Выполнить проведение документа и продолжить?'");
		ПоказатьВопрос(
			Новый ОписаниеОповещения("СоздатьКорректировкуНазначенияЗавершение", ЭтотОбъект, ДополнительныеПараметры), 
				ТекстВопроса, РежимДиалогаВопрос.ДаНет);
	Иначе
		
		ОписаниеКоманды.Вставить("Форма", ЭтотОбъект);
		ОбеспечениеВДокументахКлиент.ОткрытьЗаполнениеКорректировкиНазначения(
			Истина,
			Объект.Ссылка,
			ОписаниеКоманды);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьКорректировкуНазначенияСнятиеРезерва(Команда)
	
	// &ЗамерПроизводительности
	ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
		"Документ.ЗаказНаСборку.ФормаДокумента.Команда.СоздатьКорректировкуНазначенияСнятиеРезерва");
	
	ОбъектыОснований = Новый Массив();
	ОбъектыОснований.Добавить(Объект.Ссылка);
	
	ОписаниеКоманды = Новый Структура();
	ОписаниеКоманды.Вставить("ОбъектыОснований", ОбъектыОснований);
	
	Если Не Объект.Проведен Или Модифицированность Тогда
		ДополнительныеПараметры = Новый Структура();
		ДополнительныеПараметры.Вставить("Резервирование", Ложь);
		ДополнительныеПараметры.Вставить("ОписаниеКоманды", ОписаниеКоманды);
		
		ТекстВопроса = НСтр("ru = 'Для снятия резерва под назначение необходимо предварительно провести документ. Выполнить проведение документа и продолжить?'");
		ПоказатьВопрос(
			Новый ОписаниеОповещения("СоздатьКорректировкуНазначенияЗавершение", ЭтотОбъект, ДополнительныеПараметры), 
				ТекстВопроса, РежимДиалогаВопрос.ДаНет);
	Иначе
		
		ОписаниеКоманды.Вставить("Форма", ЭтотОбъект);
		ОбеспечениеВДокументахКлиент.ОткрытьЗаполнениеКорректировкиНазначения(
			Ложь,
			Объект.Ссылка,
			ОписаниеКоманды);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ЗакрытьЗаказ(Команда)
	
	Если Модифицированность Или Не Объект.Проведен Тогда
		Ответ = Неопределено;
		ПоказатьВопрос(Новый ОписаниеОповещения("ЗакрытьЗаказЗавершение", ЭтотОбъект),
			НСтр("ru = 'Необходимо провести документ для выполнения операции. Провести документ?'"), РежимДиалогаВопрос.ДаНет);
		Возврат;
	КонецЕсли;
	
	ЗакрытьЗаказФрагмент();
	
КонецПроцедуры

&НаКлиенте
Процедура ЗакрытьЗаказФрагмент()
	
	СписокЗаказовКЗакрытию = Новый СписокЗначений;
	СписокЗаказовКЗакрытию.Добавить(Объект.Ссылка);
	
	СтруктураЗакрытия = Новый Структура;
	СтруктураЗакрытия.Вставить("Заказы",                       СписокЗаказовКЗакрытию);
	СтруктураЗакрытия.Вставить("ДокументИнициатор",            Объект.Ссылка);
	СтруктураЗакрытия.Вставить("ОтменитьНеотработанныеСтроки", Истина);
	СтруктураЗакрытия.Вставить("ЗакрыватьЗаказы",              Истина);
	
	ОткрытьФорму("Обработка.ПомощникЗакрытияЗаказов.Форма.ФормаЗакрытия", 
					СтруктураЗакрытия, ЭтаФорма,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗакрытьЗаказЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
	
	Ответ = РезультатВопроса;
	
	Если Ответ = КодВозвратаДиалога.Нет Тогда
		Возврат;
	ИначеЕсли Не Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение)) Тогда
		Возврат;
	КонецЕсли;
	
	ЗакрытьЗаказФрагмент();
	
КонецПроцедуры

&НаКлиенте
Процедура ВключитьОбособленноеОбеспечение(Команда)
	
	ОбеспечениеУстановитьДействие("ФЛАГ_ОБОСОБЛЕННО");
	
КонецПроцедуры

&НаКлиенте
Процедура ВыключитьОбособленноеОбеспечение(Команда)
	
	ОбеспечениеУстановитьДействие("ФЛАГ_НЕОБОСОБЛЕННО");
	
КонецПроцедуры

&НаКлиенте
Процедура КОбеспечению(Команда)
	
	ОбеспечениеУстановитьДействиеСВопросом("ДЕЙСТВИЕ_КОБЕСПЕЧЕНИЮ");
	
КонецПроцедуры

&НаКлиенте
Процедура РезервироватьПоМереПоступления(Команда)
	
	ОбеспечениеУстановитьДействие("ДЕЙСТВИЕ_РЕЗЕРВИРОВАТЬПОМЕРЕПОСТУПЛЕНИЯ");
	
КонецПроцедуры

&НаКлиенте
Процедура НеОбеспечивать(Команда)
	
	ОбеспечениеУстановитьДействиеСВопросом("ДЕЙСТВИЕ_НЕОБЕСПЕЧИВАТЬ");
	
КонецПроцедуры

&НаКлиенте
Процедура Отгрузить(Команда)
	
	ОбеспечениеУстановитьДействиеСВопросом("ДЕЙСТВИЕ_ОТГРУЗИТЬ");
	
КонецПроцедуры

&НаКлиенте
Процедура Резервировать(Команда)
	
	ОбеспечениеУстановитьДействиеСВопросом("ДЕЙСТВИЕ_РЕЗЕРВИРОВАТЬ");
	
КонецПроцедуры

#КонецОбласти

// ИнтеграцияС1СДокументооборотом
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
	
	ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(Команда, ЭтаФорма, Объект);
	
КонецПроцедуры
// Конец ИнтеграцияС1СДокументооборотом

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
	
КонецПроцедуры

// СтандартныеПодсистемы.Свойства
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
	УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.Свойства

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда)

	РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда);

КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

// СтандартныеПодсистемы.Свойства

&НаСервере
Процедура СвойстваВыполнитьОтложеннуюИнициализацию()
	УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект);
КонецПроцедуры

&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
	
	УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
	УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
	УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры

// Конец СтандартныеПодсистемы.Свойства

&НаСервере
Процедура УстановитьУсловноеОформление()

	УсловноеОформление.Элементы.Очистить();

	НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтаФорма);
	
	//

	ОбщегоНазначенияУТ.УстановитьУсловноеОформлениеПриоритета(ЭтотОбъект);
	
	//

	НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма);

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеСерийНоменклатуры(ЭтаФорма, "СерииВсегдаВТЧТовары");
	НоменклатураСервер.УстановитьУсловноеОформлениеСерийНоменклатуры(ЭтаФорма, Неопределено,
		"Серия", "Объект.СтатусУказанияСерий", "ТипНоменклатуры");
	НоменклатураСервер.УстановитьУсловноеОформлениеСерийНоменклатуры(ЭтаФорма, "СерииВсегдаВТЧТовары",
		"Серия", "Объект.СтатусУказанияСерий", "ТипНоменклатуры");

	//

	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.КоличествоУпаковок.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.КоличествоОтменено");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
	ОтборЭлемента.ПравоеЗначение = 0;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеНазначенияНоменклатуры(ЭтаФорма);
	
	#Область Обеспечение
	
	// Выделение цветом отмененной строки табличной части
	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Товары.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Отменено");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
	//
	
	ОбеспечениеВДокументахСервер.УстановитьУсловноеОформлениеОбособленно(
		УсловноеОформление,
		Элементы.ТоварыОбособленно,
		"Объект.Товары.ВариантОбеспечения",
		"Объект.Товары.ТипНоменклатуры");
	
	ДоступныеОстаткиПараметрыВстраиванияСтарые = ДоступныеОстаткиПараметрыВстраивания;
	Операция = Новый Структура("ХозяйственнаяОперация", Перечисления.ХозяйственныеОперации.СборкаТоваров);
	ДоступныеОстаткиПараметрыВстраивания = Документы.ЗаказНаСборку.ДоступныеОстаткиПараметрыВстраивания(Операция);
	ОбеспечениеВДокументахСервер.ДоступныеОстаткиДобавитьОформлениеКолонкиДоступно(ЭтотОбъект);
	Операция = Новый Структура("ХозяйственнаяОперация", Перечисления.ХозяйственныеОперации.РазборкаТоваров);
	ДоступныеОстаткиПараметрыВстраивания = Документы.ЗаказНаСборку.ДоступныеОстаткиПараметрыВстраивания(Операция);
	ОбеспечениеВДокументахСервер.ДоступныеОстаткиДобавитьОформлениеКолонкиДоступно(ЭтотОбъект);
	ДоступныеОстаткиПараметрыВстраивания = ДоступныеОстаткиПараметрыВстраиванияСтарые;
	
	// Текст запрещенной ячейки, если на складе запасы перераспределяются.
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.НадписьУпаковка.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(
		ДоступныеОстаткиПараметрыВстраивания.УсловноеОформление.ПутиКДанным.ПерераспределятьЗапасы);
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
	
	#КонецОбласти
	НаправленияДеятельностиСервер.УстановитьУсловноеОформлениеНаправленияДеятельности(ЭтаФорма);
	
КонецПроцедуры

#Область Обеспечение

&НаКлиенте
Процедура ТоварыВариантОбеспеченияПриИзмененииНаКлиенте(Результат, ДополнительныеПараметры) Экспорт
	
	ТоварыВариантОбеспеченияПриИзмененииНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ВариантОбеспеченияПриИзмененииНаКлиенте(Результат, ДополнительныеПараметры) Экспорт
	
	ВариантОбеспеченияПриИзмененииНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПроверитьВыполнениеЗаданияРаспределенияЗапасов()
	
	Ошибка = Ложь;
	Если ОбеспечениеВДокументахКлиент.НужноОбновитьДоступностьПослеЗаписи(ЭтотОбъект,
		"Подключаемый_ПроверитьВыполнениеЗаданияРаспределенияЗапасов", Ошибка) Тогда
		ОбеспечениеВДокументахКлиент.НастроитьГиперссылкиСостояниеОбеспеченияПослеЗаписи(ЭтотОбъект, Ошибка);
		ОбновлятьКолонку = ОбеспечениеВДокументахКлиент.ОбновлятьКолонкуДоступноПослеРаспределенияЗапасов(ЭтотОбъект);
		Если ОбновлятьКолонку Тогда
			ОбновитьКолонкуДоступноПослеРаспределенияЗапасов();
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьКолонкуДоступноПослеРаспределенияЗапасов()
	ОбеспечениеВДокументахСервер.ОбновитьДоступностьПослеЗаписи(ЭтотОбъект);
КонецПроцедуры

&НаСервере
Функция ПараметрыВыбораОбеспечения(Режим)
	
	ПараметрыФормы = ОбеспечениеВДокументахСервер.ПараметрыВыбораОбеспечения(
		ЭтотОбъект,
		Элементы.Товары.ТекущаяСтрока,
		Режим);
	
	Возврат ПараметрыФормы;
	
КонецФункции

&НаКлиенте
Функция ПараметрыФормыЗапросаКоличестваИСерий(Режим)
	
	ПараметрыПроверки = ОбеспечениеКлиентСервер.ИнициализироватьПараметрыПроверкиЗаполнения("Товары",
		НСтр("ru = 'Комплектующие'"));
	
	Если Не ОбеспечениеКлиент.ПроверитьЗаполнение(
				Объект,
				Объект.Товары,
				Элементы.Товары.ТекущаяСтрока,
				ПараметрыПроверки,
				Объект.Склад,
				Режим) Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	ПараметрыФормы = ПараметрыВыбораОбеспечения(Режим);
	ПараметрыФормы.ПараметрыУказанияСерий = ПараметрыУказанияСерий.ТЧ;
	
	Возврат ПараметрыФормы;
	
КонецФункции

&НаСервере
Функция ПараметрыВыбораОбеспеченияКомплекта(Режим)
	
	ПараметрыФормы = ОбеспечениеВДокументахСервер.ПараметрыВыбораОбеспечения(
		ЭтотОбъект,
		Неопределено,
		Режим);
		
	Возврат ПараметрыФормы;
	
КонецФункции

&НаСервере
Процедура ТоварыВариантОбеспеченияПриИзмененииНаСервере()
	
	Изменения = ОбеспечениеВДокументахСервер.ВариантОбеспеченияПриИзменении(
		ЭтотОбъект,
		Элементы.Товары.ТекущаяСтрока);
		
	Режим = ОбеспечениеВДокументахКлиентСервер.РежимВыборДействияНепосредственно();
	ПослеЗаполненияОбеспечения(Изменения, Режим, Неопределено);
	
КонецПроцедуры

&НаСервере
Процедура ВариантОбеспеченияПриИзмененииНаСервере()
	
	СлужебныеПараметры = ДоступныеОстаткиПараметрыВстраивания.СлужебныеПараметры;
	ВариантОбеспеченияВыбранноеЗначение = СлужебныеПараметры.ВариантОбеспеченияВыбранноеЗначение;
	Объект.ВариантОбеспечения = ВариантОбеспеченияВыбранноеЗначение.ВариантОбеспечения;
	
	Если ВариантОбеспеченияВыбранноеЗначение.РазбитьСтроку Тогда
		
		Коэффициент = Доступно / Объект.КоличествоУпаковок;
		Количество = Объект.Количество;
		Объект.Количество = Количество * Коэффициент;
		
	КонецЕсли;
	
	ПослеЗаполненияОбеспеченияКомплекта();
	
КонецПроцедуры

&НаСервере
Функция ЗаполнитьОбеспечениеИзФормыСостоянияОбеспечения(КодДействия, АдресАналитик, ПараметрыЗаполнения)
	
	Модифицированность = Истина;
	Изменения = ОбеспечениеВДокументахСервер.ЗаполнитьОбеспечениеИзФормыСостоянияОбеспечения(
		КодДействия,
		АдресАналитик,
		ЭтотОбъект);
	
	Режим = ОбеспечениеВДокументахКлиентСервер.РежимСостоянияОбеспечения();
	ПослеЗаполненияОбеспечения(Изменения, Режим, ПараметрыЗаполнения);
	АдресТаблицыДвижений = АдресТаблицыДвиженийВХранилище();
	Возврат АдресТаблицыДвижений;
	
КонецФункции

&НаСервере
Функция АдресТаблицыДвиженийВХранилище()
	
	Возврат ОбеспечениеВДокументахСервер.АдресТаблицыДвиженийВХранилище(ЭтотОбъект);
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ПараметрыДокументаДляДействийОбеспечения(Форма, ДатаОтгрузки)
	
	ПараметрыДокумента = Новый Структура();
	ПараметрыДокумента.Вставить("Форма",                              Форма);
	ПараметрыДокумента.Вставить("Коллекция",                          Форма.Объект.Товары);
	ПараметрыДокумента.Вставить("ВариантОбеспеченияИФлагОбособленно", Неопределено);
	
	Возврат ПараметрыДокумента;
	
КонецФункции

&НаКлиенте
Процедура ГиперссылкаСостояниеОбеспеченияНажатиеОбщий()
	
	ПараметрыФормы = ОбеспечениеВДокументахКлиент.ГиперссылкаСостояниеОбеспеченияНажатие(ЭтотОбъект);
	
	Если ПараметрыФормы.КонтекстИспользования = "ТАБЛИЦА" Тогда
		
		ПараметрыФормы.АдресТаблицыДвижений = АдресТаблицыДвиженийВХранилище();
		
	КонецЕсли;
	
	ОткрытьФорму("Обработка.СостояниеОбеспеченияЗаказов.Форма", ПараметрыФормы, ЭтотОбъект, УникальныйИдентификатор,,,,
		РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьДействияОбеспеченияНаКлиенте(СтруктураДействий, ПоляСтрокой)
	
	Если ЭтоСборкаТоваров Тогда
		ПараметрыДокумента = ПараметрыДокументаДляДействийОбеспечения(ЭтотОбъект, Неопределено);
		ОбеспечениеВДокументахКлиентСервер.ДобавитьДействияОбеспечения(СтруктураДействий, ПоляСтрокой, ПараметрыДокумента);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ДобавитьДействияОбеспеченияНаСервере(СтруктураДействий, Знач ПоляСтрокой, ДатаОтгрузки = Неопределено)
	
	Если ЭтоСборкаТоваров Тогда
		ПараметрыДокумента = ПараметрыДокументаДляДействийОбеспечения(ЭтотОбъект, ДатаОтгрузки);
		ОбеспечениеВДокументахКлиентСервер.ДобавитьДействияОбеспечения(СтруктураДействий, ПоляСтрокой, ПараметрыДокумента);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьДействияОбеспеченияКомплектаНаКлиенте(СтруктураДействий, ПоляСтрокой)
	
	ПараметрыДокумента = ПараметрыДокументаДляДействийОбеспечения(ЭтотОбъект, Неопределено);
	ОбеспечениеВДокументахКлиентСервер.ДобавитьДействияОбеспечения(СтруктураДействий, ПоляСтрокой, ПараметрыДокумента);
	
КонецПроцедуры

&НаСервере
Процедура ДобавитьДействияОбеспеченияКомплектаНаСервере(СтруктураДействий, Знач ПоляСтрокой, ДатаОтгрузки = Неопределено)
	
	ПараметрыДокумента = ПараметрыДокументаДляДействийОбеспечения(ЭтотОбъект, ДатаОтгрузки);
	ОбеспечениеВДокументахКлиентСервер.ДобавитьДействияОбеспечения(СтруктураДействий, ПоляСтрокой, ПараметрыДокумента);
	Если СтруктураДействий.Свойство("ЗаполнитьКолонкуДоступно") Тогда
		СтруктураДействий.ЗаполнитьКолонкуДоступно.Вставить("ИдентификаторСтрокиПолученный", Неопределено);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция ОбеспечениеУстановитьДействие(КодДействия)
	
	Результат = ОбеспечениеВДокументахСервер.ОбеспечениеУстановитьДействиеСтруктураРезультата();
	
	Если КодДействия = "ФЛАГ_ОБОСОБЛЕННО" Или КодДействия = "ФЛАГ_НЕОБОСОБЛЕННО" Тогда
		
		Изменения = ОбеспечениеВДокументахСервер.УстановитьДействиеОбособленно(
			КодДействия,
			ЭтотОбъект,
			Элементы.Товары.ВыделенныеСтроки);
			
		ОбновитьКолонкуДоступноСервер();
		
	Иначе
		
		Изменения = ОбеспечениеВДокументахСервер.УстановитьДействие(
			КодДействия,
			ЭтотОбъект,
			Элементы.Товары.ВыделенныеСтроки);
		
		ЗаполнитьЗначенияСвойств(Результат, Изменения);
		
		Если Изменения.ТаблицаИзменений <> Неопределено Тогда
			ПослеЗаполненияОбеспечения(
				Изменения.ТаблицаИзменений,
				ОбеспечениеВДокументахКлиентСервер.РежимВыборДействия(),
				Результат);
		КонецЕсли;
		
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

&НаКлиенте
Процедура ОбеспечениеУстановитьДействиеСВопросом(КодДействия)
	
	Результат = ОбеспечениеУстановитьДействие(КодДействия);
	
	ОбеспечениеВДокументахКлиент.ПоказатьВопросЗаполнятьОбеспечениеЦелымиУпаковками(
		ЭтотОбъект,
		Объект.Товары,
		Результат,
		"ПослеВопросаЗаполнятьОбеспечениеЦелымиУпаковками");
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеВопросаЗаполнятьОбеспечениеЦелымиУпаковками(Ответ, Результат) Экспорт
	
	ОбеспечениеУстановитьДействиеПослеВопроса(Ответ, Результат);
	
КонецПроцедуры

&НаСервере
Процедура ОбеспечениеУстановитьДействиеПослеВопроса(Ответ, Результат)
	
	СтруктураРезультата = ОбеспечениеВДокументахСервер.УстановитьДействиеПослеВопроса(Ответ, Результат, ЭтотОбъект);
	ПослеЗаполненияОбеспечения(
		СтруктураРезультата.ТаблицаИзменений,
		ОбеспечениеВДокументахКлиентСервер.РежимВыборДействия(),
		СтруктураРезультата);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПриИзмененииМодифицированностиФормы()
	
	Если Объект.ХозяйственнаяОперация = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.СборкаТоваров") Тогда
		
		Если ФормаМодифицирована <> Модифицированность Тогда
			
			ФормаМодифицирована = Модифицированность;
			ОбеспечениеВДокументахКлиент.НастроитьГиперссылкиСостояниеОбеспечения(ЭтотОбъект);
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПослеЗаполненияОбеспечения(Изменения, Режим = Неопределено, ПараметрыЗаполнения = Неопределено)
	
	Документы.ЗаказНаСборку.ПослеЗаполненияОбеспечения(Объект, Изменения, Режим, ПараметрыЗаполнения);
	
	СтруктураДействий = Новый Структура();
	КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
	
	КоллекцияНаФорме = ОбеспечениеВДокументахКлиентСервер.КоллекцияНаФорме(
		ЭтотОбъект, ДоступныеОстаткиПараметрыВстраивания);
	
	ОбрабатываемыеСтроки = Новый Массив();
	
	Для Каждого Изменение Из Изменения Цикл
		ОбрабатываемыеСтроки.Добавить(Изменение.Строка);
	КонецЦикла;
	
	ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
		ОбрабатываемыеСтроки,
		СтруктураДействий,
		КоллекцияНаФорме,
		КэшированныеЗначения);
	
	ОбновитьКолонкуДоступноСервер();
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьКолонкуДоступноСервер()
	
	ОбеспечениеВДокументахСервер.ОбновитьКолонкуДоступно(ЭтотОбъект);
	
КонецПроцедуры

&НаСервере
Процедура ПослеЗаполненияОбеспеченияКомплекта(Режим = Неопределено)
	
	Документы.ЗаказНаСборку.ПослеЗаполненияОбеспечения(Объект, Неопределено, Режим, Неопределено);
	ОбновитьКолонкуДоступноСервер();
	УстановитьОформлениеЭлементаОбособленно();
	УстановитьОформлениеЭлементаДоступно();
	УстановитьДоступностьСерииВШапке();
	
КонецПроцедуры

&НаКлиенте
Функция ПараметрыФормыЗапросаКоличестваИСерийКомплекта(Режим)
	
	ОшибкиПользователю = Неопределено;
	ЕстьОшибки = Ложь;
	Если Объект.Количество = 0 Тогда
		Поле  = "Объект.КоличествоУпаковок";
		Текст = НСтр("ru = 'Поле ""Количество"" не заполнено'");
		ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ОшибкиПользователю, Поле, Текст, "");
		ЕстьОшибки = Истина;
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(Объект.Номенклатура) Тогда
		Поле  = "Объект.Номенклатура";
		Текст = НСтр("ru = 'Поле ""Номенклатура"" не заполнено'");
		ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ОшибкиПользователю, Поле, Текст, "");
		ЕстьОшибки = Истина;
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(Объект.Характеристика) И ХарактеристикиИспользуются Тогда
		Поле  = "Объект.Характеристика";
		Текст = НСтр("ru = 'Поле ""Характеристика"" не заполнено'");
		ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ОшибкиПользователю, Поле, Текст, "");
		ЕстьОшибки = Истина;
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(Объект.Склад) Тогда
		Поле  = "Объект.Склад";
		Текст = НСтр("ru = 'Поле ""Склад"" не заполнено'");
		ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ОшибкиПользователю, Поле, Текст, "");
		ЕстьОшибки = Истина;
	КонецЕсли;
	
	Если ЕстьОшибки Тогда
		ОчиститьСообщения();
		ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(ОшибкиПользователю);
		Возврат Неопределено;
	Иначе
		ПараметрыФормы = ПараметрыВыбораОбеспеченияКомплекта(Режим);
	КонецЕсли;
	
	Если Объект.СтатусУказанияСерий = 10
		Или Объект.СтатусУказанияСерий = 9
		Или Объект.СтатусУказанияСерий = 11 Тогда
		
		Серии = Новый Массив;
		Для Каждого СтрокаСерии Из Объект.Серии Цикл
			Если СтрокаСерии.Номенклатура = ПараметрыФормы.Номенклатура
				И СтрокаСерии.Характеристика = ПараметрыФормы.Характеристика Тогда
					Серия = Новый Структура("Серия, Количество", СтрокаСерии.Серия, СтрокаСерии.Количество);
					Серии.Добавить(Серия);
			КонецЕсли;
		КонецЦикла;
		ПараметрыФормы.Серия = Серии;
		
	КонецЕсли;
	
	ПараметрыФормы.ПараметрыУказанияСерий = ПараметрыУказанияСерий.Шапка;
	ПараметрыФормы.РазбиватьСтрокиЗапрещено = Истина;
	
	Возврат ПараметрыФормы;
	
КонецФункции

&НаКлиенте
Процедура ОбработатьВыборСкладаИСерии(ВыбранноеЗначение, ПараметрыФормы) Экспорт
	
	Если Не ОбеспечениеВДокументахКлиент.ЕстьПодобранныеТовары(ВыбранноеЗначение) Тогда
		Возврат;
	КонецЕсли;
	
	Оповещение = ОбработатьВыборСкладаИСерииНаСервере(ВыбранноеЗначение, ПараметрыФормы);
	ТекстОповещения = ОбеспечениеВДокументахКлиент.ТекстОповещенияОбработкиВыборСкладаИСерии(ПараметрыФормы.Режим);
	ПоказатьОповещениеПользователя(ТекстОповещения, , Оповещение);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьВыборСкладаИСерииКомплекта(ВыбранноеЗначение, ПараметрыФормы) Экспорт 
	
	Если Не ОбеспечениеВДокументахКлиент.ЕстьПодобранныеТовары(ВыбранноеЗначение) Тогда
		Возврат;
	КонецЕсли;
	
	Оповещение = ОбработатьВыборСкладаИСерииНаСервереКомплекта(ВыбранноеЗначение, ПараметрыФормы);
	ТекстОповещения = ОбеспечениеВДокументахКлиент.ТекстОповещенияОбработкиВыборСкладаИСерии(ПараметрыФормы.Режим);
	ПоказатьОповещениеПользователя(ТекстОповещения, , Оповещение);
	
КонецПроцедуры

&НаСервере
Функция ОбработатьВыборСкладаИСерииНаСервере(ВыбранноеЗначение, ПараметрыФормы)
	
	Модифицированность = Истина;
	Изменения = ОбеспечениеВДокументахСервер.ПриВыбореСклада(
		ВыбранноеЗначение,
		ЭтотОбъект,
		Элементы.Товары.ТекущаяСтрока,
		ПараметрыФормы.ЗаполняемыеПоля);
		
	ПослеЗаполненияОбеспечения(Изменения, ПараметрыФормы.Режим);
	ТекстОбработаноСтрок = ОбеспечениеВДокументахСервер.ТекстОбработаноСтрок(Изменения.Количество());
	Возврат ТекстОбработаноСтрок;
	
КонецФункции

&НаСервере
Функция ОбработатьВыборСкладаИСерииНаСервереКомплекта(ВыбранноеЗначение, ПараметрыФормы)
	
	Модифицированность = Истина;
	Если Документы.ЗаказНаСборку.СерииУказываютсяВОтдельнойТабличнойЧасти(Объект) Тогда
		
		ПараметрыОтбора = Новый Структура("Номенклатура, Характеристика", Объект.Номенклатура, Объект.Характеристика);
		НайденныеСтроки = Объект.Серии.НайтиСтроки(ПараметрыОтбора);
		Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
			Объект.Серии.Удалить(НайденнаяСтрока);
		КонецЦикла;
		
		Объект.Количество = 0;
		Для Каждого Строка Из ВыбранноеЗначение.ПодобранныеТовары Цикл
			
			Объект.Количество = Объект.Количество + Строка.Количество;
			
			Если (Строка.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.Отгрузить
						Или Строка.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.СоСклада)
					И ЗначениеЗаполнено(Строка.Серия) Тогда
					
						СтрокаСерии = Объект.Серии.Добавить();
						СтрокаСерии.Номенклатура   = Объект.Номенклатура;
						СтрокаСерии.Характеристика = Объект.Характеристика;
						СтрокаСерии.Серия          = Строка.Серия;
						СтрокаСерии.Количество     = Строка.Количество;
						
						Если Строка.Обособленно Тогда
							СтрокаСерии.Назначение = Объект.Назначение;
						Иначе
							СтрокаСерии.Назначение = Справочники.Назначения.ПустаяСсылка();
						КонецЕсли;
					
			КонецЕсли;
		
		КонецЦикла;
		
	Иначе
		
		Объект.Количество = ВыбранноеЗначение.ПодобранныеТовары[0].Количество;
		Объект.Серия = ВыбранноеЗначение.ПодобранныеТовары[0].Серия;
		
	КонецЕсли;
	
	Объект.ВариантОбеспечения = ВыбранноеЗначение.ПодобранныеТовары[0].ВариантОбеспечения;
	
	ПослеЗаполненияОбеспеченияКомплекта(ПараметрыФормы.Режим);
	
КонецФункции

&НаСервере
Процедура ВыполнитьДействияОбеспеченияКомплектаНаСервере(Поля)
	
	Если Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РазборкаТоваров Тогда
		
		Действия = Новый Структура();
		ДобавитьДействияОбеспеченияКомплектаНаСервере(Действия, Поля);
		
		ПоляОбъекта = "Количество,Номенклатура,Характеристика,ВариантОбеспечения,Обособленно,Подразделение,
			|Склад,Назначение,Статус,НачалоСборкиРазборки,ХозяйственнаяОперация,КоличествоУпаковок,Упаковка,Серия,Дата,Приоритет";
		ПоляОбъектаИСсылка = ПоляОбъекта + ",Ссылка";
		ПоляФормы   = "Доступно,ПерераспределятьЗапасы,ОтгружатьЕслиДоступно,ПерераспределятьЗапасы";
		ПоляФикции  = "НомерСтроки";
		Шапка = Новый Структура(ПоляОбъектаИСсылка + "," + ПоляФормы + "," + ПоляФикции);
		Шапка.Вставить("ТипНоменклатуры", ТипНоменклатуры);
		ЗаполнитьЗначенияСвойств(Шапка, Объект, ПоляОбъектаИСсылка);
		ЗаполнитьЗначенияСвойств(Шапка, ЭтотОбъект, ПоляФормы);
		ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(Шапка, Действия, Неопределено);
		ЗаполнитьЗначенияСвойств(Объект, Шапка, ПоляОбъекта);
		ЗаполнитьЗначенияСвойств(ЭтотОбъект, Шапка, ПоляФормы);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьДействияОбеспеченияКомплектаНаКлиенте(Поля)
	
	Если Объект.ХозяйственнаяОперация = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.РазборкаТоваров") Тогда
		
		Действия = Новый Структура();
		ДобавитьДействияОбеспеченияКомплектаНаКлиенте(Действия, Поля);
		
		ПоляОбъекта = "Количество,Номенклатура,Характеристика,ВариантОбеспечения,Обособленно,Подразделение,
			|Склад,Назначение,Статус,НачалоСборкиРазборки,ХозяйственнаяОперация,КоличествоУпаковок,Упаковка,Серия,Дата,Приоритет";
		ПоляОбъектаИСсылка = ПоляОбъекта + ",Ссылка";
		ПоляФормы   = "Доступно,ПерераспределятьЗапасы,ОтгружатьЕслиДоступно,ПерераспределятьЗапасы";
		ПоляФикции  = "НомерСтроки";
		Шапка = Новый Структура(ПоляОбъектаИСсылка + "," + ПоляФормы + "," + ПоляФикции);
		Шапка.Вставить("ТипНоменклатуры", ТипНоменклатуры);
		ЗаполнитьЗначенияСвойств(Шапка, Объект, ПоляОбъектаИСсылка);
		ЗаполнитьЗначенияСвойств(Шапка, ЭтотОбъект, ПоляФормы);
		ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(Шапка, Действия, Неопределено);
		ЗаполнитьЗначенияСвойств(Объект, Шапка, ПоляОбъекта);
		ЗаполнитьЗначенияСвойств(ЭтотОбъект, Шапка, ПоляФормы);
		
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ПриИзмененииРеквизитов

&НаСервере
Процедура СкладПриИзмененииСервер()
	
	ОбеспечениеВДокументахСервер.ПриИзмененииРеквизитаДокумента(ЭтотОбъект);
	ПодготовитьЗаполнитьУстановитьВидимостьСерий();
	АктуализироватьСборкуПодДеятельность();
	
КонецПроцедуры

&НаСервере
Процедура ХозяйственнаяОперацияПриИзмененииСервер()
	
	ЭтоСборкаТоваров = Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.СборкаТоваров;
	ДоступныеОстаткиПараметрыВстраивания = Неопределено;
	ПараметрыВстраивания = Документы.ЗаказНаСборку.ДоступныеОстаткиПараметрыВстраивания(Объект);
	ОбеспечениеВДокументахСервер.ДоступныеОстаткиПриСозданииНаСервере(ЭтотОбъект, ПараметрыВстраивания);
	
	УстановитьСвойстваЭлементовФормыХозяйственнаяОперация();
	Объект.Назначение = Неопределено;
	Объект.НаправлениеДеятельности = Справочники.НаправленияДеятельности.ПустаяСсылка();
	НаправлениеДеятельностиПриИзмененииСервер();
	
	ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(НоменклатураСервер.ПараметрыУказанияСерий(Объект, Документы.ЗаказНаСборку));
	НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект,ПараметрыУказанияСерий.ТЧ);
	НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект,ПараметрыУказанияСерий.Шапка);
	НастроитьЭлементыСерий();
	
	Если ЭтоСборкаТоваров Тогда
		
		СтруктураДействий = Новый Структура();
		ДобавитьДействияОбеспеченияНаСервере(СтруктураДействий, "ВариантОбеспечения");
		КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
		СтрокиТаблицы = Объект.Товары.НайтиСтроки(
			Новый Структура("ВариантОбеспечения", Перечисления.ВариантыОбеспечения.ПустаяСсылка()));
		ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
			СтрокиТаблицы,
			СтруктураДействий,
			Объект.Товары,
			КэшированныеЗначения);
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура НоменклатураПриИзмененииСервер(КэшЗначений)
	
	ТипНоменклатуры = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Номенклатура, "ТипНоменклатуры");

	Действия = Новый Структура("
		|ПроверитьХарактеристикуПоВладельцу, ПересчитатьКоличествоЕдиниц, ПроверитьЗаполнитьВариантКомплектацииПоВладельцу,
		|ПроверитьЗаполнитьУпаковкуПоВладельцу");
	
	НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтаФорма, Действия);
	
	Действия.ПроверитьХарактеристикуПоВладельцу = Объект.Характеристика;
	Действия.ПроверитьЗаполнитьВариантКомплектацииПоВладельцу = Объект.ВариантКомплектации;
	Действия.ПроверитьЗаполнитьУпаковкуПоВладельцу = Объект.Упаковка;
	Шапка = Новый Структура("
		|Номенклатура, Характеристика, Назначение, ВариантКомплектации, ВариантОбеспечения, Упаковка, ТипНоменклатуры,
		|Количество, КоличествоУпаковок, ХарактеристикиИспользуются");
	ЗаполнитьЗначенияСвойств(Шапка, Объект);
	Шапка.ХарактеристикиИспользуются = ХарактеристикиИспользуются;
	
	ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(Шапка, Действия, КэшЗначений);
	
	ЗаполнитьЗначенияСвойств(Объект, Шапка);
	Если Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РазборкаТоваров Тогда
		ВыполнитьДействияОбеспеченияКомплектаНаСервере("ВариантОбеспечения,Доступно");
	КонецЕсли;
	
	ВариантКомплектацииПриИзмененииНаСервере();
	
	ХарактеристикиИспользуются = Шапка.ХарактеристикиИспользуются;
	Элементы.Характеристика.Доступность = ХарактеристикиИспользуются;
	
	Справочники.УпаковкиЕдиницыИзмерения.ОтобразитьИнформациюОЕдиницеХранения(Объект.Номенклатура, Элементы.Упаковка);
	НадписьУпаковка = ?(ЗначениеЗаполнено(Объект.Упаковка), Объект.Упаковка, Элементы.Упаковка.ПодсказкаВвода);
	
	УстановитьДоступностьНазначенияВШапке();
	
	Если ПараметрыУказанияСерий.Шапка.ИспользоватьСерииНоменклатуры Тогда
		ЗаполнитьСтатусыУказанияСерийПриИзмененииТовараВШапке(КэшЗначений);
	КонецЕсли;
	УстановитьОформлениеЭлементаОбособленно();
	УстановитьОформлениеЭлементаДоступно();
	
КонецПроцедуры

&НаСервере
Процедура ХарактеристикаПриИзмененииСервер()
	
	ВариантКомплектацииПриИзмененииНаСервере();
	
КонецПроцедуры

&НаСервере
Процедура НазначениеПриИзмененииСервер()
	
	ОбеспечениеВДокументахСервер.ПриИзмененииРеквизитаДокумента(ЭтотОбъект);
	
КонецПроцедуры

#КонецОбласти

#Область ПодборыИОбработкаПроверкиКоличества

&НаКлиенте
Процедура ОбработкаВыбораПодборНаКлиенте(ВыбранноеЗначение)
	
	Если Не ЗначениеЗаполнено(ВыбранноеЗначение) Тогда
		Возврат;
	КонецЕсли;
	
	ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение);
	
КонецПроцедуры

&НаСервере
Процедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение)

	ТаблицаТоваров = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресТоваровВХранилище);

	Изменения = Новый Массив(ТаблицаТоваров.Количество());
	Для Индекс = 0 По ТаблицаТоваров.Количество() - 1 Цикл
		
		СтрокаТовара = ТаблицаТоваров[Индекс];
		
		ТекущаяСтрока = Объект.Товары.Добавить();
		Изменения[Индекс] = ТекущаяСтрока;
		
		ЗаполнитьЗначенияСвойств(ТекущаяСтрока, СтрокаТовара,
			"Номенклатура,Характеристика,ХарактеристикиИспользуются,Упаковка,КоличествоУпаковок,ВариантОбеспечения,
			|Обособленно,Серия");
		
		
	КонецЦикла;
	СтруктураДействий = Новый Структура();
	ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
	СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
	СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
	НазначенияКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтотОбъект, СтруктураДействий, Истина);
	ДобавитьДействияОбеспеченияНаСервере(СтруктураДействий, "ВариантОбеспечения");
	
	КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
	ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
		Изменения,
		СтруктураДействий,
		Объект.Товары,
		КэшированныеЗначения);
	
	Документы.ЗаказНаСборку.ЗаполнитьНачалоОкончаниеСборкиПриУстановкеОтгрузитьИлиРезервировать(Объект, Изменения);
	
	НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект,ПараметрыУказанияСерий.ТЧ);
	ОбновитьКолонкуДоступноСервер();
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий)
	
	СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
	
КонецПроцедуры

#КонецОбласти

#Область ШтрихкодыИТорговоеОборудование

&НаКлиенте
Процедура ОбработатьШтрихкоды(ДанныеШтрихкодов)
	
	СтруктураДействийСДобавленнымиСтроками = Новый Структура;
	СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
	СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
	НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтаФорма, СтруктураДействийСДобавленнымиСтроками);
	ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействийСДобавленнымиСтроками);

	СтруктураДействийСИзмененнымиСтроками = Новый Структура;
	ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействийСИзмененнымиСтроками);	

	СтруктураДействий = ШтрихкодированиеНоменклатурыКлиент.ПараметрыОбработкиШтрихкодов();

	СтруктураДействий.Штрихкоды                              = ДанныеШтрихкодов;
	СтруктураДействий.СтруктураДействийСДобавленнымиСтроками = СтруктураДействийСДобавленнымиСтроками;
	СтруктураДействий.СтруктураДействийСИзмененнымиСтроками  = СтруктураДействийСИзмененнымиСтроками;
	СтруктураДействий.ПараметрыУказанияСерий                 = ПараметрыУказанияСерий.ТЧ;
	СтруктураДействий.ТолькоТовары                           = Истина;
	СтруктураДействий.ДополнятьТарой                         = Ложь;
	
	
	ОбработатьШтрихкодыСервер(СтруктураДействий, КэшированныеЗначения);
	
	ШтрихкодированиеНоменклатурыКлиент.ОбработатьНеизвестныеШтрихкоды(СтруктураДействий,КэшированныеЗначения,ЭтаФорма);
	
	Если ШтрихкодированиеНоменклатурыКлиент.НужноОткрытьФормуУказанияСерийПослеОбработкиШтрихкодов(СтруктураДействий) Тогда
		
		ТекущиеДанныеИдентификатор = СтруктураДействий.МассивСтрокССериями[0];
		
		ПодключитьОбработчикОжидания("ОткрытьПодборСерийПриСканированииШтрихкодаНоменклатуры",0.1,Истина);
			
	КонецЕсли;
	
	Если СтруктураДействий.ТекущаяСтрока <> Неопределено Тогда
		
		Элементы.Товары.ТекущаяСтрока = СтруктураДействий.ТекущаяСтрока;
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ОбработатьШтрихкодыСервер(СтруктураПараметровДействия, КэшированныеЗначения)
	
	ДобавитьДействияОбеспеченияНаСервере(
		СтруктураПараметровДействия.СтруктураДействийСДобавленнымиСтроками,
		"ВариантОбеспечения");
	
	ШтрихкодированиеНоменклатурыСервер.ОбработатьШтрихкоды(ЭтаФорма,Объект,СтруктураПараметровДействия,КэшированныеЗначения);
	
	ОбеспечениеВДокументахКлиентСервер.УдалитьДействияОбеспечения(СтруктураПараметровДействия.СтруктураДействийСДобавленнымиСтроками);
	ОбновитьКолонкуДоступноСервер();
	
КонецПроцедуры

#КонецОбласти

#Область Серии

&НаСервере
Процедура НастроитьЭлементыСерий()
	
	Элементы.ТоварыСерия.Видимость = ПараметрыУказанияСерий.ТЧ.ИспользоватьСерииНоменклатуры;
	
	Элементы.УказатьСерииВШапке.Видимость  = ПараметрыУказанияСерий.Шапка.ИспользоватьСерииНоменклатуры;
	Элементы.СтатусУказанияСерий.Видимость = ПараметрыУказанияСерий.Шапка.ИспользоватьСерииНоменклатуры;
	Элементы.Серия.Видимость               = ПараметрыУказанияСерий.Шапка.ИспользоватьСерииНоменклатуры;
	
	УстановитьДоступностьСерииВШапке();
	
КонецПроцедуры

&НаСервере
Процедура УстановитьДоступностьСерииВШапке()
	Если Объект.СтатусУказанияСерий > 12 Тогда
		Элементы.Серия.Доступность = Истина;
	Иначе
		Элементы.Серия.Доступность = Ложь;
	КонецЕсли;
	Элементы.УказатьСерииВШапке.Доступность =
		  Объект.СтатусУказанияСерий > 0
		И Объект.СтатусУказанияСерий < 13;
КонецПроцедуры

&НаСервере
Процедура ОбработатьУказаниеСерийСервер(ПараметрыФормыУказанияСерий, ТоварВШапке)
	
	Если ТоварВШапке Тогда
		
		НоменклатураСервер.ОбработатьУказаниеСерий(Объект,ПараметрыУказанияСерий.Шапка,ПараметрыФормыУказанияСерий);
		
	Иначе
		
		НоменклатураСервер.ОбработатьУказаниеСерий(Объект,ПараметрыУказанияСерий.ТЧ,ПараметрыФормыУказанияСерий);
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьСтатусыУказанияСерийПриИзмененииТовараВШапке(КэшированныеЗначения)
	
	НоменклатураСервер.ЗаполнитьСтатусыУказанияСерийПриИзмененииТовараВШапке(Объект, 
				ПараметрыУказанияСерий.Шапка, КэшированныеЗначения);
	УстановитьДоступностьСерииВШапке();
				
КонецПроцедуры

&НаСервере
Процедура ПодготовитьЗаполнитьУстановитьВидимостьСерий()
	
	ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(НоменклатураСервер.ПараметрыУказанияСерий(Объект, Документы.ЗаказНаСборку));
	НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект,ПараметрыУказанияСерий.ТЧ);
	НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект,ПараметрыУказанияСерий.Шапка);
	НастроитьЭлементыСерий();
	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьПодборСерийПриСканированииШтрихкодаНоменклатуры()
	Если ТекущиеДанныеИдентификатор = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ТекущиеДанные = Объект.Товары.НайтиПоИдентификатору(ТекущиеДанныеИдентификатор);
	ОткрытьПодборСерий(, ТекущиеДанные);
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьПодборСерий(Текст = "", ТекущиеДанные = Неопределено)
	
	ПараметрыФормы = ПараметрыФормыЗапросаКоличестваИСерий(ОбеспечениеВДокументахКлиентСервер.РежимПодборСерий());
	
	Если ПараметрыФормы <> Неопределено Тогда
		
		ОткрытьФорму(
			"Обработка.ЗапросКоличестваИСерий.Форма",
			ПараметрыФормы,
			ЭтотОбъект,
			,
			,
			,
			Новый ОписаниеОповещения("ОбработатьВыборСкладаИСерии", ЭтотОбъект, ПараметрыФормы));
			
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьПодборСерийЗавершение(Результат, ДополнительныеПараметры) Экспорт
    
    ПараметрыФормыУказанияСерий = ДополнительныеПараметры.ПараметрыФормыУказанияСерий;
    ТоварВШапке = ДополнительныеПараметры.ТоварВШапке;
    
    
    ЗначениеВозврата = Результат;
    
    Если ЗначениеВозврата <> Неопределено Тогда
        ОбработатьУказаниеСерийСервер(ПараметрыФормыУказанияСерий, ТоварВШапке);
    КонецЕсли;
    Если ТоварВШапке Тогда
        НоменклатураКлиент.ОбновитьКешированныеЗначенияШапкиДляУчетаСерий(Объект,КэшированныеЗначения,ПараметрыУказанияСерий.Шапка);	
    КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ОткрытьПодборСерийКомплекта(Текст = "")
	
	ПараметрыФормы = ПараметрыФормыЗапросаКоличестваИСерийКомплекта(ОбеспечениеВДокументахКлиентСервер.РежимПодборСерий());
	
	Если ПараметрыФормы <> Неопределено Тогда
		
		ОткрытьФорму(
			"Обработка.ЗапросКоличестваИСерий.Форма",
			ПараметрыФормы,
			ЭтотОбъект,
			,
			,
			,
			Новый ОписаниеОповещения("ОбработатьВыборСкладаИСерииКомплекта", ЭтотОбъект, ПараметрыФормы));
			
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область РаботаСБуферомОбмена

&НаСервере
Процедура СкопироватьСтрокиНаСервере()
	
	РаботаСТабличнымиЧастями.СкопироватьСтрокиВБуферОбмена(Объект.Товары, Элементы.Товары.ВыделенныеСтроки);
	
КонецПроцедуры

&НаСервере
Процедура ПолучитьСтрокиИзБуфераОбмена()
	
	ПараметрыОтбора = Новый Соответствие;
	ПараметрыОтбора.Вставить("Номенклатура.ТипНоменклатуры", НоменклатураКлиентСервер.ОтборПоТоваруМногооборотнойТаре(Ложь));
	
	Колонки = "Номенклатура,Характеристика,Упаковка,КоличествоУпаковок";
	
	ТаблицаТоваров = РаботаСТабличнымиЧастями.СтрокиИзБуфераОбмена(ПараметрыОтбора, Колонки);
	
	Если Не ЗначениеЗаполнено(ТаблицаТоваров) Тогда
		Возврат;
	КонецЕсли;
	
	СтруктураДействий = Новый Структура;
	ДобавитьДействияОбеспеченияНаСервере(СтруктураДействий, "ВариантОбеспечения");
	ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
	НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтаФорма, СтруктураДействий);
	КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
	ОбрабатываемыеСтроки = Новый Массив();
	
	Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл

		ТекущаяСтрока = Объект.Товары.Добавить();
		ЗаполнитьЗначенияСвойств(ТекущаяСтрока, СтрокаТовара);
		ОбрабатываемыеСтроки.Добавить(ТекущаяСтрока);
		
	КонецЦикла;
	
	ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
		ОбрабатываемыеСтроки,
		СтруктураДействий,
		Объект.Товары,
		КэшированныеЗначения);
	
	ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
	НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект,ПараметрыУказанияСерий.ТЧ);
	ОбновитьКолонкуДоступноСервер();

КонецПроцедуры

&НаСервере
Процедура УстановитьДоступностьКомандБуфераОбмена()
	
	МассивЭлементов = Новый Массив();
	МассивЭлементов.Добавить("ТоварыВставитьСтроки");
	МассивЭлементов.Добавить("ТоварыКонтекстноеМенюВставитьСтроки");
	
	ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Доступность",
		РаботаСТабличнымиЧастями.ЕстьСтрокиВБуфереОбмена());
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьДоступностьКомандБуфераОбменаНаКлиенте()
	
	МассивЭлементов = Новый Массив();
	МассивЭлементов.Добавить("ТоварыВставитьСтроки");
	МассивЭлементов.Добавить("ТоварыКонтекстноеМенюВставитьСтроки");
	
	ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Доступность", Истина);
	
КонецПроцедуры

#КонецОбласти

#Область Прочее

&НаСервере
Процедура НаправлениеДеятельностиПриИзмененииСервер()
	
	Если Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.СборкаТоваров Тогда
		
		Если ЗначениеЗаполнено(Объект.НаправлениеДеятельности) Тогда
			Объект.Назначение = Справочники.Назначения.ПустаяСсылка();
		КонецЕсли;
		
		ШаблонНазначения = Документы.ЗаказНаСборку.ШаблонНазначения(Объект);
		Если ЗначениеЗаполнено(Объект.Ссылка) Или ШаблонНазначения.Заказ = Неопределено Тогда
			Объект.НазначениеТовары = Справочники.Назначения.НайтиПоШаблону(ШаблонНазначения);
		Иначе
			Объект.НазначениеТовары = Неопределено;
		КонецЕсли;
		
	Иначе
		
		НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельности(ЭтотОбъект);
		
	КонецЕсли;
	
	Объект.ОбосабливатьПоНазначениюЗаказа = Константы.ВариантОбособленияТоваровВСборке.Получить()
		<> Перечисления.ВариантыОбособленияТоваровВСборке.НазначениеСобираемогоКомплекта;
	
	НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий.ТЧ);
	НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий.Шапка);
	
	АктуализироватьСборкуПодДеятельность();
	ОбеспечениеВДокументахСервер.ПриИзмененииРеквизитаДокумента(ЭтотОбъект);
	
КонецПроцедуры

&НаСервере
Процедура УстановитьВидимостьГруппыДополнительно()
	
	Элементы.ГруппаДополнительно.Видимость =
		ПолучитьФункциональнуюОпцию("ОтветственныйВДокументах")
		Или ПолучитьФункциональнуюОпцию("ИспользоватьПодразделения")
		Или ПолучитьФункциональнуюОпцию("ИспользоватьСделкиСКлиентами");

КонецПроцедуры

&НаСервере
Процедура УстановитьДоступностьНазначенияВШапке()
	
	ТипНомеклатуры = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Номенклатура,"ТипНоменклатуры");
	Если ТипНомеклатуры = Перечисления.ТипыНоменклатуры.Товар Тогда
		Элементы.Назначение.Доступность = Истина;
		Элементы.Назначение.ПодсказкаВвода =  НСтр("ru = '<без назначения>'");
	Иначе
		Элементы.Назначение.Доступность = Ложь;
		Элементы.Назначение.ПодсказкаВвода =  НСтр("ru = '<для товаров>'");
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПриЧтенииСозданииНаСервере()
	
	Если Не ПравоДоступа("Добавление", Метаданные.Документы.КорректировкаНазначенияТоваров)
		Или Не ПолучитьФункциональнуюОпцию("ИспользоватьОбособленноеОбеспечениеЗаказов") Тогда
		Элементы.ТоварыСоздатьКорректировкуНазначенияСнятиеРезерва.Видимость = Ложь;
		Элементы.ТоварыСоздатьКорректировкуНазначенияРезервирование.Видимость = Ложь;
	КонецЕсли;
	
	ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(НоменклатураСервер.ПараметрыУказанияСерий(Объект, Документы.ЗаказНаСборку));
	
	ТипНоменклатуры = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Номенклатура, "ТипНоменклатуры");
	ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();

	ХарактеристикиИспользуются = Справочники.Номенклатура.ХарактеристикиИспользуются(Объект.Номенклатура);
	Элементы.Характеристика.Доступность = ХарактеристикиИспользуются;
	
	Справочники.УпаковкиЕдиницыИзмерения.ОтобразитьИнформациюОЕдиницеХранения(Объект.Номенклатура, Элементы.Упаковка);
	
	АктуализироватьСборкуПодДеятельность(Ложь);
	
	УстановитьВидимостьГруппыДополнительно();
	УстановитьДоступностьНазначенияВШапке();
	
	НастроитьЭлементыСерий();
	Элементы.ДокументОснование.Видимость = ЗначениеЗаполнено(Объект.ДокументОснование);

	Элементы.ВариантОбеспечения.Доступность = Не ЕстьРазборкаПоЗаказу();

	// Пока по документу нет отмененных комплектов, не отображаем соответствующее поле.
	Элементы.ГруппаОтмена.Видимость = Объект.КоличествоОтменено > 0;
	
	НаправленияДеятельностиСервер.ПриЧтенииСозданииНаСервере(ЭтотОбъект);
	
	УстановитьСвойстваЭлементовФормыХозяйственнаяОперация();
	НадписьУпаковка = ?(ЗначениеЗаполнено(Объект.Упаковка), Объект.Упаковка, Элементы.Упаковка.ПодсказкаВвода);
	РаботаСТабличнымиЧастями.ИнициализироватьКэшСтрок(Элементы.Товары);
	ЭтоСборкаТоваров = Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.СборкаТоваров;
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьСлужебныеРеквизитыПоНоменклатуре()
	
	ПараметрыЗаполненияРеквизитов = Новый Структура;
	ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакХарактеристикиИспользуются",
											Новый Структура("Номенклатура", "ХарактеристикиИспользуются"));
	ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакТипНоменклатуры",
											Новый Структура("Номенклатура", "ТипНоменклатуры"));
	ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакАртикул",
											Новый Структура("Номенклатура", "Артикул"));
	
	НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(Объект.Товары,ПараметрыЗаполненияРеквизитов);
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьТоварыПоВариантуКомплектации()

	Если Объект.Ссылка.Пустая() Или Не Документы.ЗаказНаСборку.ЕстьСборкаПоЗаказу(Объект.Ссылка) Тогда

		ОбновитьПризнакИспользованияХарактеристик = Истина;
		Объект.Товары.Загрузить(Справочники.ВариантыКомплектацииНоменклатуры.ПолучитьКомплектующиеНоменклатуры(
								Объект.ВариантКомплектации, , Объект.Количество));
								
	Иначе
		
		// Строки добавляться не будут. Только обновление количества.
		ОбновитьПризнакИспользованияХарактеристик = Ложь;

		Справочники.ВариантыКомплектацииНоменклатуры.ОбновитьКоличествоКомплектующихПоКоличествуКомплектов(
			Объект.Товары, Объект.Количество, Объект.ВариантКомплектации);
	
	КонецЕсли;

	СтруктураДействий = Новый Структура();
	ДобавитьДействияОбеспеченияНаСервере(СтруктураДействий, "ВариантОбеспечения");
	НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтаФорма, СтруктураДействий);
	ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Товары, СтруктураДействий, Неопределено);
		ОбновитьКолонкуДоступноСервер();
	
	Если ОбновитьПризнакИспользованияХарактеристик Тогда
		
		ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
		
	КонецЕсли;
	
	НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий.ТЧ);
	
КонецПроцедуры

&НаКлиенте
Процедура ОповеститьОПроведенииДокумента(ПараметрыЗаписи)

	ПараметрыОповещения = Новый Структура;
	ПараметрыОповещения.Вставить("РежимЗаписи",      ПараметрыЗаписи.РежимЗаписи);
	ПараметрыОповещения.Вставить("ЕстьРаспоряжение", Истина);

	Оповестить("Запись_ЗаказНаСборку", ПараметрыОповещения, Объект.Ссылка);

КонецПроцедуры

&НаСервере
Функция ЕстьРазборкаПоЗаказу()

	Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда

		Результат = Ложь;

	Иначе

		Запрос = Новый Запрос();
		Запрос.Текст =
			"ВЫБРАТЬ ПЕРВЫЕ 1
			|	ИСТИНА КАК ЕстьОтгрузка
			|ИЗ
			|	РегистрНакопления.ЗаказыНаСборку КАК Т
			|ГДЕ
			|	Т.ЗаказНаСборку = &Ссылка
			|	И Т.ТипСборки = ЗНАЧЕНИЕ(Перечисление.ТипыДвиженияЗапасов.Отгрузка)
			|	И Т.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
			|	И Т.КОформлению > 0";

		Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);

		УстановитьПривилегированныйРежим(Истина);
		Результат = Не Запрос.Выполнить().Пустой();

	КонецЕсли;

	Возврат Результат;

КонецФункции

&НаКлиенте
Процедура ВариантКомплектацииПриИзменении(Элемент)
	ВариантКомплектацииПриИзмененииНаСервере();
КонецПроцедуры

&НаСервере
Процедура ВариантКомплектацииПриИзмененииНаСервере()
	
	Объект.ДлительностьСборкиРазборки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ВариантКомплектации, "ДлительностьСборкиРазборки");
	
	Если ЗначениеЗаполнено(Объект.НачалоСборкиРазборки) Тогда
		
		Объект.ОкончаниеСборкиРазборки = Объект.НачалоСборкиРазборки + Объект.ДлительностьСборкиРазборки * 86400;
		
	ИначеЕсли ЗначениеЗаполнено(Объект.ОкончаниеСборкиРазборки) Тогда
		
		Объект.НачалоСборкиРазборки = Объект.ОкончаниеСборкиРазборки - Объект.ДлительностьСборкиРазборки * 86400;
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьСвойстваЭлементовФормыХозяйственнаяОперация()
	
	ЭтоСборка = Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.СборкаТоваров;
	
	Если ЭтоСборка Тогда
		
		// Поле "Количество" переименовываем в соответствии с типом операции.
		Элементы.КоличествоУпаковок.Заголовок = НСтр("ru = 'Собрать'");
		ЭтаФорма.Команды.ОтменитьНеотработанные.Подсказка = НСтр("ru = 'Отмене подлежит несобранное количество комплектов и неиспользованные комплектующие'");
		ОбеспечениеВДокументахСервер.НастроитьГиперссылкиСостояниеОбеспечения(ЭтотОбъект);
		
	Иначе
		
		// Поле "Количество" переименовываем в соответствии с типом операции.
		Элементы.КоличествоУпаковок.Заголовок = НСтр("ru = 'Разобрать'");
		ЭтаФорма.Команды.ОтменитьНеотработанные.Подсказка = НСтр("ru = 'Отмене подлежит неиспользованное количество комплектов и неполученные комплектующие'");
		
	КонецЕсли;
	
	Элементы.ВариантОбеспечения.Видимость      = Не ЭтоСборка;
	Элементы.Обособленно.Видимость             = Не ЭтоСборка;
	Элементы.ТоварыНазначение.Видимость        = Не ЭтоСборка;
	
	Элементы.Назначение.Видимость                 = ЭтоСборка;
	Элементы.ТоварыВариантОбеспечения.Видимость   = ЭтоСборка;
	ЕстьПраво = ОбеспечениеВДокументахСервер.ЕстьПравоПросмотраГиперссылкиСостоянияОбеспечения();
	Элементы.СтраницыГиперссылкаСостояниеОбеспечения.Видимость = ЕстьПраво И ЭтоСборка;
	
	Элементы.ТоварыОбособленно.Видимость                      = ЭтоСборка;
	Элементы.ТоварыГруппаДействия.Видимость                   = ЭтоСборка;
	Элементы.ТоварыГруппаФлагОбособленно.Видимость            = ЭтоСборка;
	Элементы.ТоварыКонтекстноеМенюГруппаОбеспечение.Видимость = ЭтоСборка;
	Элементы.ТоварыДоступно.Видимость                         = ЭтоСборка;
	УстановитьОформлениеЭлементаОбособленно();
	УстановитьОформлениеЭлементаДоступно();
	
КонецПроцедуры

&НаСервере
Процедура УстановитьОформлениеЭлементаОбособленно()
	
	Элементы.Обособленно.Доступность = ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар
		И Объект.ВариантОбеспечения <> Перечисления.ВариантыОбеспечения.Отгрузить;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьОформлениеЭлементаДоступно()
	
	ЭтоСборка = Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.СборкаТоваров;
	НужнаКолонкаДоступно =
		Объект.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.РезервироватьПоМереПоступления
			ИЛИ Объект.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.КОбеспечению
			ИЛИ Объект.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.НеТребуется;
	
	Элементы.Доступно.Видимость = Не ЭтоСборка И НужнаКолонкаДоступно;
	Элементы.НадписьУпаковка.Видимость = Не ЭтоСборка И НужнаКолонкаДоступно;
	
КонецПроцедуры

&НаСервере
Процедура РассчитатьИтоговыеПоказателиЗаказа()

	ВсеСтрокиОтменены = Истина;
	ТолькоНеТребуется = Истина;
	ВариантНеТребуется = Перечисления.ВариантыОбеспечения.НеТребуется;
	Для Каждого СтрокаТовары Из Объект.Товары Цикл
		ВсеСтрокиОтменены = ВсеСтрокиОтменены И СтрокаТовары.Отменено;
		ТолькоНеТребуется = ТолькоНеТребуется И (СтрокаТовары.Отменено Или СтрокаТовары.ВариантОбеспечения = ВариантНеТребуется);
	КонецЦикла;

КонецПроцедуры

#Область ОтменаСтрок

&НаКлиенте
Процедура ОтменитьНеотработанные(Команда)
	
	// &ЗамерПроизводительности
	ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
		"Документ.ЗаказНаСборку.ФормаДокумента.Команда.ОтменитьНеотработанные");
	
	РезультатОтмены = ОтменитьНеотработанныеСервер();
	
	ПоказатьОповещениеПользователя(НСтр("ru = 'Отмена неотработанных строк'"), , РезультатОтмены.Оповещение);

	Если НоменклатураКлиент.НеобходимоОбновитьСтатусСерийВШапке(Объект, КэшированныеЗначения, ПараметрыУказанияСерий.Шапка) Тогда
		НоменклатураКлиент.ОбновитьКешированныеЗначенияШапкиДляУчетаСерий(Объект, КэшированныеЗначения, ПараметрыУказанияСерий.Шапка);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция ОтменитьНеотработанныеСервер()
	
	СтруктураКорректировкиСтрокЗаказа = ЗаказыСервер.СтруктураКорректировкиСтрокЗаказа();
	СтруктураКорректировкиСтрокЗаказа.ОтменитьНеотработанныеСтроки = Истина;
	
	Возврат СкорректироватьСтрокиЗаказа(СтруктураКорректировкиСтрокЗаказа);
	
КонецФункции

&НаКлиенте
Процедура ОтменитьВыделенныеСтроки(Команда)
	
	// &ЗамерПроизводительности
	ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
		"Документ.ЗаказНаСборку.ФормаДокумента.Команда.ОтменитьВыделенныеСтроки");
	
	ОтменитьВыделенныеСтрокиСервер();
	
	ПоказатьОповещениеПользователя(НСтр("ru = 'Отмена выделенных строк'"), , НСтр("ru = 'Выделенные строки отменены'"));
	
КонецПроцедуры

&НаСервере
Процедура ОтменитьВыделенныеСтрокиСервер()
	
	ВыделенныеСтроки = Элементы.Товары.ВыделенныеСтроки;
	
	СтруктураДействий = Новый Структура();
	КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
	ОбрабатываемыеСтроки = Новый Массив();
	
	Для Каждого Идентификатор Из ВыделенныеСтроки Цикл
		
		Строка = Объект.Товары.НайтиПоИдентификатору(Идентификатор);
		Строка.Отменено = Истина;
		ОбрабатываемыеСтроки.Добавить(Строка);
		
	КонецЦикла;
	
	ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
		ОбрабатываемыеСтроки,
		СтруктураДействий,
		Объект.Товары,
		КэшированныеЗначения);
	
	НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект,ПараметрыУказанияСерий.ТЧ);
	НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект,ПараметрыУказанияСерий.Шапка);
		ОбновитьКолонкуДоступноСервер();
	
КонецПроцедуры

&НаСервере
Функция СкорректироватьСтрокиЗаказа(СтруктураДополнительныхПараметров)
	
	ЗаказОбъект = РеквизитФормыВЗначение("Объект");
	
	СтруктураДополнительныхПараметров.ПроверятьОстатки = Истина;
	
	СтруктураРезультата = ЗаказОбъект.СкорректироватьСтрокиЗаказа(СтруктураДополнительныхПараметров);
	
	Если СтруктураДополнительныхПараметров.ЗакрыватьЗаказы Тогда
		ЗаказОбъект.Статус = Перечисления.СтатусыВнутреннихЗаказов.Закрыт;
	КонецЕсли;
	
	ЗначениеВРеквизитФормы(ЗаказОбъект, "Объект");
	
	// Пока по документу нет отмененных комплектов, не отображаем соответствующее поле.
	Элементы.ГруппаОтмена.Видимость = Объект.КоличествоОтменено > 0;
	
	ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
	ОбновитьКолонкуДоступноСервер();
	
	Модифицированность = Истина;
	
	Возврат СтруктураРезультата;
	
КонецФункции

&НаСервере
Процедура АктуализироватьСборкуПодДеятельность(Заполнить = Истина)
	
	ПараметрыЗаполнения = Документы.ЗаказНаСборку.ПараметрыЗаполненияВидаДеятельностиНДС(Объект);
	
	Если Заполнить Тогда
		
		УчетНДСУП.ЗаполнитьВидДеятельностиНДС(
			Объект.СборкаПодДеятельность,
			ПараметрыЗаполнения,
			УчетНДСКэшированныеЗначенияПараметров);
		
	КонецЕсли;
	
	УчетНДСУП.ЗаполнитьСписокВыбораВидаДеятельностиНДС(
		Элементы.СборкаПодДеятельность,
		Объект.СборкаПодДеятельность,
		ПараметрыЗаполнения,
		УчетНДСКэшированныеЗначенияПараметров);
	
КонецПроцедуры

#КонецОбласти

#КонецОбласти

&НаКлиенте
Процедура СоздатьКорректировкуНазначенияЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
	
	Ответ = РезультатВопроса;
	Если Ответ = КодВозвратаДиалога.Нет Тогда
		Возврат;
	Иначе
		ОчиститьСообщения();	
		Записать(Новый Структура("РежимЗаписи,СозданиеКорректировки", РежимЗаписиДокумента.Проведение, ДополнительныеПараметры));
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

Связанные материалы