Отбор (размещение) товаров / Форма документа / Модуль формы

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

&НаКлиенте
Перем ПропуститьВопросПередЗаписью; // Для отработки записи после вопроса

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

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

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

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

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

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

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

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

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

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

	ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

	МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтаФорма, ПараметрыЗаписи);

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

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

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

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

	КонецЕсли;	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ТекущаяСтрока = Элементы.ТоварыОтбор.ТекущиеДанные;

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

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

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

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

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

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

&НаКлиенте
Процедура ТоварыОтборПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	//

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НезаполненноеПолеТаблицы);

	//

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НезаполненноеПолеТаблицы);

	//

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

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма, 
																			 "ТоварыРазмещениеХарактеристика",
																		     "Объект.ТоварыРазмещение.ХарактеристикиИспользуются");

	//

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

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

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

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

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

	//
	
	ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыРазмещениеСерия.Имя);
	
	ГруппаОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;

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

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

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

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

	ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;

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

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

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

	//

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

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

	ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;

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

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

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

	//

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не используется>'"));
	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);

	//

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не используется>'"));
	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
	
	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();

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

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не используется>'"));
	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);

	//

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не используется>'"));
	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);

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

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

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

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

	//

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОбработатьШтрихкоды(ДанныеШтрихкодов)

	Если Элементы.Страницы.ТекущаяСтраница = Элементы.ГруппаТоварыОтбор Тогда
		ИмяТЧ             = "Отбор";
		ИмяТабличнойЧасти = "ТоварыОтбор";
	ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.ГруппаТоварыРазмещение Тогда
		ИмяТЧ             = "Размещение";
		ИмяТабличнойЧасти = "ТоварыРазмещение";
	Иначе
		Возврат;
	КонецЕсли;

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

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

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

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

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

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

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

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

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

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

	ИначеЕсли Объект.ВидОперации = Перечисления.ВидыОперацийОтбораРазмещенияТоваров.Перемещение Тогда
		Элементы.ЗонаОтгрузки.Видимость = Ложь;
		Элементы.ЗонаПриемки.Видимость 	= Ложь;
		Элементы.Распоряжение.Видимость = Ложь;
		
		Элементы.ГруппаТоварыОтбор.Видимость      = Истина;
		Элементы.ГруппаТоварыРазмещение.Видимость = Истина;
		
		Элементы.ТоварыОтборГруппаТовары.Видимость      = Истина;
		Элементы.ТоварыРазмещениеГруппаТовары.Видимость = Истина;
		
	КонецЕсли;
КонецПроцедуры

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

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

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

	КонецЕсли;	
	
КонецПроцедуры

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

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

	ПересчитатьВесОбъемВСтрокахТЧ();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ПересчитатьВесОбъемВСтрокахТЧ()

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

&НаКлиенте
Процедура ТоварыОтборПриОкончанииРедактированияДляСерверногоВызова()

	ТоварыОтборПриОкончанииРедактированияНаСервере();

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

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

	СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "ТоварыОтбор");
	
КонецПроцедуры

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


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

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

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