Сборка товаров / Форма документа / Модуль формы

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

&НаКлиенте
Перем КэшированныеЗначения;

&НаКлиенте
Перем ТекущиеДанныеИдентификатор;

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

&НаКлиенте
Перем ПараметрыДляЗаписи Экспорт;

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;

	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);

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

	// ИнтеграцияС1СДокументооборотом
	ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтаФорма);
	// Конец ИнтеграцияС1СДокументооборотом

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

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

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

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

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

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

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

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

	СобытияФорм.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)

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

		Если ВРег(ВыполняемаяОперация) = ВРег("ПодборТоваровИзЗаказа") Тогда

			ОбработкаПодбораТоваровИзЗаказа(ВыбранноеЗначение.АдресВХранилище);

		КонецЕсли;

	ИначеЕсли ИсточникВыбора.ИмяФормы = "Обработка.ПодборТоваровВДокументПродажи.Форма.Форма" Тогда

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	СтруктураДействий = Новый Структура;
	СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ОткрытьПодборСерий(Истина);

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

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

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

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

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

&НаКлиенте
Процедура УстановитьОсновнымКомпонентом(Команда)
	Компонент = Элементы.Товары.ТекущиеДанные;
	Если Компонент <> Неопределено Тогда
		ЗаполнитьОсновнойКомпонент(Компонент.Номенклатура, Компонент.Характеристика, Компонент.ВедетсяУчетПоГТД);
	КонецЕсли;
КонецПроцедуры

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

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

// ЭлектронноеВзаимодействие.ОбменСКонтрагентами

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

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

// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами

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

//++ Локализация
&НаКлиенте
Процедура Подключаемый_ПроверитьВыполнениеЗаданияИС()
	
	СоответствиеТребованиямГИСМТКлиент.ПроверитьВыполнениеЗадания(ЭтотОбъект);
	
КонецПроцедуры
//-- Локализация

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

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

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

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

	//

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

	//

	НаправленияДеятельностиСервер.УстановитьУсловноеОформлениеФлагаОбособленно(ЭтотОбъект);
	
	//

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

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

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

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

	//

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

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

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

	//

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
	
	Элемент = УсловноеОформление.Элементы.Добавить();

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

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

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

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

	//

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

	//

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

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеСтатусовУказанияСерий(ЭтаФорма, Ложь);

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

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

#Область ЗаполнениеПоЗаказуПоОрдеру

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

&НаКлиенте
Процедура СообщитьОРезультатахЗаполнения()
	
	Если РезультатыЗаполнения <> Неопределено Тогда
		
		Если Объект.ХозяйственнаяОперация = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.СборкаТоваров") Тогда
			
			Если РезультатыЗаполнения.ЕстьНесобранные Тогда
				
				ПоказатьОповещениеПользователя(
					НСтр("ru = 'Количество перезаполнено'"),,
					НСтр("ru='Количество комплектов и комплектующих с учетом комплектующих собираемых на складе перезаполнено.'"),
					БиблиотекаКартинок.Информация32);
				
			Иначе
				
				ПоказатьОповещениеПользователя(
					НСтр("ru = 'Количество перезаполнено'"),,
					НСтр("ru='Количество комплектов и комплектующих перезаполнено.'"),
				БиблиотекаКартинок.Информация32);
				
			КонецЕсли;
			
		Иначе
			
			Если РезультатыЗаполнения.ЕстьНесобранные Тогда
				
				ПоказатьОповещениеПользователя(
					НСтр("ru = 'Количество перезаполнено'"),,
					НСтр("ru='Количество комплектов и комплектующих с учетом комплектов собираемых на складе перезаполнено.'"),
					БиблиотекаКартинок.Информация32);
				
			Иначе
				
				ПоказатьОповещениеПользователя(
					НСтр("ru = 'Количество перезаполнено'"),,
					НСтр("ru='Количество комплектов и комплектующих перезаполнено.'"),
				БиблиотекаКартинок.Информация32);
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

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

	ОткрытьФорму("ОбщаяФорма.ПодборТоваровИзЗаказа",
		ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

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

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

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

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

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

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

	СтруктураДействий = Новый Структура;
	СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");

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

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

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

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

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

&НаСервере
Процедура ОбособленноПриИзмененииНаСервере()
	
	Объект.Назначение = ?(Обособленно,
		НаправленияДеятельностиСервер.ТолкающееНазначение(Объект.НаправлениеДеятельности), Неопределено);

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

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

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

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

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


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

&НаСервере
Процедура ПересчитатьПроцентДолиСтоимости()
	
	Если Объект.Товары.Количество() = 1 Тогда
		Объект.Товары[0].ДоляСтоимостиПроцент = 100;
		Объект.Товары[0].ЕстьОшибкиЗаполненияДолиСтоимости = Ложь;
	Иначе
		ИтогоДоляСтоимости = Объект.Товары.Итог("ДоляСтоимости");
		Для каждого Строка Из Объект.Товары Цикл
			Строка.ДоляСтоимостиПроцент = ?(ИтогоДоляСтоимости = 0, 0, Строка.ДоляСтоимости / ИтогоДоляСтоимости * 100);
			Строка.ЕстьОшибкиЗаполненияДолиСтоимости = Не ЗначениеЗаполнено(Строка.ДоляСтоимости);
		КонецЦикла;
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ОбработатьШтрихкодыСервер(СтруктураПараметровДействия,КэшированныеЗначения)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция ЗаполнитьСерииПоFEFOСервер()

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

		НоменклатураСервер.ЗаполнитьСерииПоFEFO(Объект,ПараметрыУказанияСерий.ТЧ);
		Возврат Истина;

	Иначе

		Возврат Ложь;

	КонецЕсли;

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

&НаСервере
Функция ЕстьЗаполненныеСерииПоFEFO()

	Возврат НоменклатураСервер.ЕстьСтрокиСЗаполненнымиПоFEFOСериями(Объект.Товары);

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

&НаСервере
Процедура ЗаполнитьСтатусыУказанияСерийПриОкончанииРедактированияСтрокиТЧ(ТекущаяСтрокаИдентификатор, КэшированныеЗначения)

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура Подключаемый_ЗакрытьФорму()
	
	Закрыть();
	
КонецПроцедуры

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

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

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

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

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

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

	Элементы.ЗаказНаСборку.Видимость = ЗначениеЗаполнено(Объект.ЗаказНаСборку);
	
	Элементы.ГруппаОсновнойКомпонент.Видимость = ИспользоватьИмпортныйТовар;

	Элементы.ТоварыУстановитьОсновнымКомпонентом.Видимость = ЭтоСборка;
	Элементы.ТоварыКонтекстноеМенюУстановитьОсновнымКомпонентом.Видимость = ЭтоСборка;
	Элементы.ТребованиеКомпонента.Видимость = ЭтоСборка;
	Элементы.ПредставлениеКомпонента.Видимость = ЭтоСборка;
	Элементы.ПустойКомментарийКомпонента.Видимость = ЭтоСборка;
	Элементы.КомментарийПредупреждение.Видимость = ЭтоСборка;
	Элементы.ПустойКомпонент.Видимость = ЭтоСборка;

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

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

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

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

&НаСервере
Процедура УстановитьДоступностьЭлементовФормыПоЗаказу()

	ЕстьЗаказ = ЗначениеЗаполнено(Объект.ЗаказНаСборку);

	ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
				"ПодобратьТовары", "Видимость", Не ЕстьЗаказ);

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

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

	Если ЕстьЗаказ Тогда

		МассивЭлементов = Новый Массив;

		МассивЭлементов.Добавить("ТоварыДобавить");
		МассивЭлементов.Добавить("ТоварыСкопировать");
		МассивЭлементов.Добавить("ТоварыКонтекстноеМенюДобавить");
		МассивЭлементов.Добавить("ТоварыКонтекстноеМенюСкопировать");
		
		ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы,
				МассивЭлементов, "Доступность", Ложь);

	КонецЕсли;

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

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

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

&НаСервере
Процедура ПолучитьВидыЗапасовИзХранилища(ВыбранноеЗначение)
	
	ЗапасыСервер.ОбработатьВводВидовЗапасовВручную(ВыбранноеЗначение, ЭтаФорма);
	
КонецПроцедуры

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

	СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	КонецЦикла;

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

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

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

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

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

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

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

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

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

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

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

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

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





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

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