Приходный ордер на товары / Форма документа / Модуль формы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ПриходныйОрдерНаТоварыЛокализация.УстановитьПризнакИспользованияМаркируемойПродукции(ЭтаФорма);
	УстановитьВидимостьЭлементовУпаковкиПриМаркировке();

	ПриЧтенииСозданииНаСервере();

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

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

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

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

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

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

		Элементы.Товары.ТекущиеДанные.Назначение = ВыбранноеЗначение;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ПриходныйОрдерНаТоварыЛокализация.УстановитьПризнакИспользованияМаркируемойПродукции(ЭтаФорма);
	УстановитьВидимостьЭлементовУпаковкиПриМаркировке();
	Если ЭтоОтменаНовойСтроки Тогда
		ПересчитатьКоличествоМест();
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ТоварыПриИзменении(Элемент)
	
	Если Не СкрытьДополнительнуюИнформацию Тогда
		ПодключитьОбработчикОжидания("ТоварыПриАктивизацииСтрокиНаКлиенте", 0.2, Истина);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗаполнитьТолькоНоменклатуру(Команда)
	
	Автотест_ЗаполнитьПоРаспоряжению("Номенклатура");
	
КонецПроцедуры

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

&НаКлиенте
Процедура ЗаполнитьНоменклатуруИКоличество(Команда)
	
	Автотест_ЗаполнитьПоРаспоряжению("НоменклатураКоличество");
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьТолькоКоличество(Команда)
	
	Автотест_ЗаполнитьПоРаспоряжению("Количество");
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьВозвращаемоеКоличество(Команда)
	
	ЗаполнитьВозвращаемоеКоличествоНаСервере(КэшированныеЗначения);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ДополнитьМногооборотнойТарой(Команда)

	МногооборотнаяТараКлиент.ПодобратьМногооборотнуюТару(
		ЭтаФорма,
		"Товары",
		"Номенклатура,Характеристика,Количество");
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура НаУровеньВверх(Команда)
	НаУровеньВверхСервер();
КонецПроцедуры

&НаКлиенте
Процедура Распаковать(Команда)
	УпаковочныеЛистыКлиент.РаспаковатьУпаковочныйЛист(ЭтаФорма);
КонецПроцедуры

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

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

&НаКлиенте
Процедура СортироватьПоУбыванию(Команда)
	ТекущаяКолонка = Элементы.Товары.ТекущийЭлемент;
	
	Если ТекущаяКолонка <> Неопределено Тогда
		СортироватьСтроки(ТекущаяКолонка.Имя, "УБЫВ");
	КонецЕсли;
КонецПроцедуры

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

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

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

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

	//

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

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

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

	//

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

	//

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

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

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

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

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

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

	//

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

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

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

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

	//

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

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

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.DefaultGUIFont, , , Истина, Ложь, Ложь, Ложь, ));

	//

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

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

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

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

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.DefaultGUIFont, , , Истина, Ложь, Ложь, Ложь, ));

	//

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.DefaultGUIFont, , , Истина, Ложь, Ложь, Ложь, ));

	//

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.DefaultGUIFont, , , Истина, Ложь, Ложь, Ложь, ));

	//

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.DefaultGUIFont, , , Истина, Ложь, Ложь, Ложь, ));

	//

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.DefaultGUIFont, , , Истина, Ложь, Ложь, Ложь, ));

	//

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(WindowsШрифты.DefaultGUIFont, , , Истина, Ложь, Ложь, Ложь, ));
	
	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();

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

	ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Штрихкод");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
	
	ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ШтрихкодНеОпределен");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = 1;
	
		ГруппаОтбора2 = ГруппаОтбора1.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
		ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
		
			ГруппаОтбора3 = ГруппаОтбора2.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
			ГруппаОтбора3.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
			
				ОтборЭлемента = ГруппаОтбора3.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
				ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ЭтоУпаковочныйЛист");
				ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
				ОтборЭлемента.ПравоеЗначение = Истина;
				
				ОтборЭлемента = ГруппаОтбора3.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
				ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.УпаковочныйЛист");
				ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
	
			ГруппаОтбора4 = ГруппаОтбора2.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
			ГруппаОтбора4.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
		
				ОтборЭлемента = ГруппаОтбора4.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
				ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ЭтоУпаковочныйЛист");
				ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
				ОтборЭлемента.ПравоеЗначение = Ложь;
				
				ОтборЭлемента = ГруппаОтбора4.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
				ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Номенклатура");
				ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<неизвестный штрихкод>'"));
	
	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыУпаковочныйЛист.Имя);
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыНоменклатура.Имя);
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыДопИнфоУпаковочныйЛист.Имя);
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыДопИнфоНоменклатура.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ТребуетсяОбработка");
	ОтборЭлемента.ПравоеЗначение = 1;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОсобогоТекста);
	
	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



#Область ДополнительнаяПанельИнформации

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура Автотест_ЗаполнитьПоРаспоряжениюЗавершение2(РезультатВопроса, ДополнительныеПараметры) Экспорт
	
	ВидЗаполнения = ДополнительныеПараметры.ВидЗаполнения;
	
	Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда
		Возврат;
	КонецЕсли;
	
	Автотест_ЗаполнитьПоРаспоряжениюФрагмент1(ВидЗаполнения);
	
КонецПроцедуры

&НаКлиенте
Процедура Автотест_ЗаполнитьПоРаспоряжениюФрагмент1(Знач ВидЗаполнения)
	
	Автотест_ЗаполнитьПоРаспоряжениюФрагмент(ВидЗаполнения);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ДополнительнаяПанель(Команда)
	
	СкрытьДополнительнуюИнформацию = Не СкрытьДополнительнуюИнформацию;
	НастроитьОтображениеПанелиДополнительнойИнформации();
	
КонецПроцедуры

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

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

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

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

&НаСервере
Процедура РежимПросмотраПриИзмененииСервер()
	
	УпаковочныеЛистыСервер.РежимПросмотраПриИзменении(ЭтаФорма, Объект.Товары, Объект.Ссылка.Метаданные().ПредставлениеОбъекта);
	
КонецПроцедуры

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

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

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

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

&НаСервере
Процедура РаспаковатьСервер()
	
	УпаковочныеЛистыСервер.РаспаковатьУпаковочныйЛист(ЭтаФорма);
	
КонецПроцедуры

&НаСервере
Процедура НаУровеньВверхСервер()
	
	НайденныеСтроки = УпаковочныеЛисты.НайтиСтроки(Новый Структура("УпаковочныйЛист",УпаковочныйЛистРодитель));
	ПриПереходеНаДругойУровеньСервер(НайденныеСтроки[0].УпаковочныйЛистРодитель);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура УстановитьВидимостьЭлементовУпаковкиПриМаркировке()

	ВидимостьЭлементов = ПолучитьФункциональнуюОпцию("ИспользоватьУпаковочныеЛисты") 
									И Не ЕстьМаркируемаяПродукция;

	Элементы.ТоварыУпаковочныйЛистКод.Видимость = ВидимостьЭлементов;
	
	Элементы.ВсегоМест.Видимость           = ВидимостьЭлементов;
	Элементы.ДекорацияМест.Видимость       = ВидимостьЭлементов;
	
	Элементы.ГруппаРежимПросмотраНавигация.Видимость = ВидимостьЭлементов;
	Элементы.ТоварыГруппаКнопокУпаковочныйЛист.Видимость = ВидимостьЭлементов;

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

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

	Элементы.ТоварыПроверитьКоличество.Доступность = Не ТолькоПросмотр;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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