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

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

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

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

&НаКлиенте
Перем ПредыдущиеРеквизитыСтроки; //используется для отвязки строки перемещения от строки заказа

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

		КонецЕсли;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ОбновитьНазначениеОтправителя();

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

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

	ОбновитьНазначениеОтправителя();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

		Возврат;
		
	КонецЕсли;
	
	ОбновитьИнформациюПоЗаказам();
	
КонецПроцедуры

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ЗагрузкаДанныхИзФайла

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	//

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

	//

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

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

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

	//

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

	//

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

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

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

	//

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

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

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

	//

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);

	// только просмотр Назначения, если КодСтроки заполнен

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
	
	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	//

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

	//

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

	//

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

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

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

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

&НаСервере
Процедура СтатусПриИзмененииСервер(ЗаполнитьСерииПоОтгрузке)

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

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

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

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

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

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

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

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

#Область Товары

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

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

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

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

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

&НаСервере
Процедура ОбработкаПодбораТоваровИзЗаказа(АдресВХранилище)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область УправлениеЭлементамиФормы

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОповеститьОЗаполненииПоОстаткамЗаказов(ЗаказСсылка = Неопределено)
	
	Если Объект.Товары.Количество() > 0 Тогда
	
		Если ЗаказСсылка <> Неопределено Тогда
		
			ШаблонТекста = НСтр("ru='Список ""Товары"" заполнен остатками неоформленных товаров по документу %Заказ%.'");
			ТекстОповещения = СтрЗаменить(ШаблонТекста, "%Заказ%", ЗаказСсылка);
			
		Иначе
			
			ТекстОповещения = НСтр("ru='Список ""Товары"" заполнен остатками неоформленных товаров по заказам.'");
			
		КонецЕсли;
		ПоказатьОповещениеПользователя(НСтр("ru = 'Обработка списка ""Товары""'"),, ТекстОповещения);
		
	Иначе
		
		Если ЗаказСсылка <> Неопределено Тогда
		
			ШаблонТекста = НСтр("ru='Нет неоформленных товаров по документу %Заказ%.'");
			ТекстОповещения = СтрЗаменить(ШаблонТекста, "%Заказ%", ЗаказСсылка);
			
		Иначе
			
			Если Не ЗначениеЗаполнено(Объект.СкладОтправитель) Тогда
				ТекстОповещения = НСтр("ru='Не заполнен склад-отправитель.'");
			ИначеЕсли Не ЗначениеЗаполнено(Объект.СкладПолучатель) Тогда
				ТекстОповещения = НСтр("ru='Не заполнен склад-получатель.'");
			ИначеЕсли Не ЗначениеЗаполнено(Объект.Организация) Тогда
				ТекстОповещения = НСтр("ru='Не заполнена организация.'");
			ИначеЕсли ИспользоватьНесколькоОрганизаций И ИспользоватьПодразделения Тогда
				Если ЗначениеЗаполнено(Объект.Подразделение) Тогда
					ШаблонТекста = НСтр("ru='Нет неоформленных товаров по заказам на перемещение
					                        |со склада ""%1"" на склад ""%2"" в подразделении ""%3"" в организации ""%4""'");
				Иначе
					ШаблонТекста = НСтр("ru='Нет неоформленных товаров по заказам на перемещение
					                        |со склада ""%1"" на склад ""%2"" без указания подразделения в организации ""%4""'");
				КонецЕсли;
				ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста,
					Объект.СкладОтправитель, Объект.СкладПолучатель, Объект.Подразделение, Объект.Организация);
			ИначеЕсли ИспользоватьНесколькоОрганизаций Тогда
				ШаблонТекста = НСтр("ru='Нет неоформленных товаров по заказам на перемещение
				                        |со склада ""%1"" на склад ""%2"" в организации ""%3""'");
				ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста,
					Объект.СкладОтправитель, Объект.СкладПолучатель, Объект.Организация);
			ИначеЕсли ИспользоватьПодразделения Тогда
				Если ЗначениеЗаполнено(Объект.Подразделение) Тогда
					ШаблонТекста = НСтр("ru='Нет неоформленных товаров по заказам на перемещение
					                        |со склада ""%1"" на склад ""%2"" в подразделении ""%3""'");
				Иначе
					ШаблонТекста = НСтр("ru='Нет неоформленных товаров по заказам на перемещение
					                        |со склада ""%1"" на склад ""%2"" без указания подразделения'");
				КонецЕсли;
				ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста,
					Объект.СкладОтправитель, Объект.СкладПолучатель, Объект.Подразделение);
			Иначе
				ШаблонТекста = НСтр("ru='Нет неоформленных товаров по заказам на перемещение
				                        |со склада ""%1"" на склад ""%2""'");
				ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста,
					Объект.СкладОтправитель, Объект.СкладПолучатель);
			КонецЕсли;
			
		КонецЕсли;
		ПоказатьПредупреждение(, ТекстОповещения);
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура УдалитьСтрокиСверхЗаказа(Таблица)
	
	НомерТекущейСтроки = Таблица.Количество() - 1;
	Пока НомерТекущейСтроки >= 0 Цикл
		Если ЗначениеЗаполнено(Таблица[НомерТекущейСтроки].ЗаказНаПеремещение) 
			И Не ЗначениеЗаполнено(Таблица[НомерТекущейСтроки].КодСтроки) Тогда
			Таблица.Удалить(НомерТекущейСтроки);
		КонецЕсли;
		НомерТекущейСтроки = НомерТекущейСтроки - 1;
	КонецЦикла;
	
КонецПроцедуры

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

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

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

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

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

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

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

&НаСервере
Процедура ОбновитьНазначениеОтправителяВТаблицеТовары()

	Для Каждого СтрокаТовары Из Объект.Товары Цикл
		Если Не Объект.ПеремещениеПоЗаказам Или СтрокаТовары.КодСтроки = 0 Тогда
			СтрокаТовары.НазначениеОтправителя = СтрокаТовары.Назначение;
		КонецЕсли;
	КонецЦикла;

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

&НаКлиенте
Процедура ОбновитьНазначениеОтправителя()

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

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

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

#Область Доставка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ЗаказВСтрокеСверхЗаказа(ПеремещениеПоЗаказам, ЗаказНаПеремещение)
	
	Возврат ?(ПеремещениеПоЗаказам И ЗначениеЗаполнено(ЗаказНаПеремещение), ЗаказНаПеремещение, Неопределено);
	
КонецФункции

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

&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьЗависимыеРеквизитыФормыПоЗаказу(Товары, НадписьРасхождениеЗаказ, ЭлементыФормы)
	КоличествоРасхождений = Товары.Итог("РасхождениеЗаказ");
	
	Если КоличествоРасхождений > 0 Тогда
		ЭлементыФормы.КартинкаРасхождениеЗаказ.Картинка = БиблиотекаКартинок.ПревышениеЗаказа;
		ЭлементыФормы.КартинкаРасхождениеЗаказы.Картинка = БиблиотекаКартинок.ПревышениеЗаказа;
		НадписьРасхождениеЗаказ = СтрЗаменить(НСтр("ru='Строк сверх заказа'") + НСтр("ru=': %КоличествоРасхождений%'"), "%КоличествоРасхождений%", КоличествоРасхождений);
	Иначе
		ЭлементыФормы.КартинкаРасхождениеЗаказ.Картинка = Новый Картинка();
		ЭлементыФормы.КартинкаРасхождениеЗаказы.Картинка = Новый Картинка();
		НадписьРасхождениеЗаказ = "";
		КоличествоРасхождений = 0;
	КонецЕсли;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ОповеститьОбОкончанииОтвязкиСтрок(КоличествоОтработанныхСтрок, СтрокиОтвязаны = Истина)

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

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

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

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

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

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

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

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

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

#Область Наборы

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

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

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

&НаСервере
Функция АдресНабораВоВременномХранилище(Параметры)
	
	Возврат НаборыСервер.АдресНабораВоВременномХранилище(ЭтаФорма, Параметры, "Товары");
	
КонецФункции

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

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

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

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

#Область ЗагрузкаДанныхИзФайла

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

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

&НаКлиенте
Функция ОписаниеКолонокМакетаДляЗагрузкиТоваров();
	
	 КолонкиМакета = Новый Массив;
	
	Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Артикул", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(50)), НСтр("ru = 'Артикул'"), 10);
	Колонка.Родитель = "Номенклатура";
	КолонкиМакета.Добавить(Колонка);
	
	Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("КодНоменклатуры", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(11)), НСтр("ru = 'Код номенклатуры'"), 15);
	Колонка.Родитель = "Номенклатура";
	КолонкиМакета.Добавить(Колонка);
	
	Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Номенклатура", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)), НСтр("ru = 'Номенклатура'"), 15);
	КолонкиМакета.Добавить(Колонка);
	
	Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Характеристика", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)), НСтр("ru = 'Характеристика'"), 15);
	КолонкиМакета.Добавить(Колонка);
	
	Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Назначение", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)), НСтр("ru = 'Назначение'"), 15);
	КолонкиМакета.Добавить(Колонка);
	
	Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Серия", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)), НСтр("ru = 'Серия'"), 15);
	КолонкиМакета.Добавить(Колонка);
	
	Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("КодУпаковки", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(4)), НСтр("ru = 'Код упаковки'"), 12);
	Колонка.Родитель = "Упаковка";
	КолонкиМакета.Добавить(Колонка);
	
	Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Упаковка", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(50)), НСтр("ru = 'Упаковка'"), 10);
	КолонкиМакета.Добавить(Колонка);
	
	Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("КоличествоУпаковок", Новый ОписаниеТипов("Число",, Новый КвалификаторыЧисла(15, 3)), НСтр("ru = 'Количество'"), 10);
	КолонкиМакета.Добавить(Колонка);
	
	Для Позиция = 1 По КолонкиМакета.Количество() Цикл
		КолонкиМакета[Позиция-1].Позиция = Позиция;
	КонецЦикла;

	Возврат КолонкиМакета;
	
КонецФункции

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

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

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

#Область Локализация

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

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

&НаСервере
Процедура ОбновитьТекстДокументыНаОснованииЛокализация()
	
	//++ Локализация
	ТекстТТН = Документы.ТранспортнаяНакладная.ТекстТТН(ЭтотОбъект);
	ТекстыПоляДокументыНаОсновании.Добавить(ТекстТТН);
	//-- Локализация
	
	Возврат;
	
КонецПроцедуры

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

	Возврат;
	
КонецПроцедуры

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

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