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

файл

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

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

&НаКлиенте
Перем ТекущийСтатус; //клиентский кеш статуса документа (нужен для возможности отката изменения пользователем статуса)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

	Если Объект.ОтгружаемыеТовары.Количество() > 0 Тогда

		Ответ = Неопределено;


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

	КонецЕсли;

	ЗаполнитьПоРаспоряжению();
КонецПроцедуры

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

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

&НаСервере
Процедура ЗаполнитьПоРаспоряжению()
	
	Документы.РасходныйОрдерНаТовары.ЗаполнитьОтгружаемыеТоварыПоТоварамПоРаспоряжениям(Объект);

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

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

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

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

&НаКлиенте
Процедура РазбитьСправочноПоУпаковкам(Команда)
	Если Объект.ОтгружаемыеТовары.Количество() = 0 Тогда

		Ответ = Неопределено;


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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗаполнитьПоОтобраннымТоварамПроведениеФрагмент()
    
    Если Объект.ОтгружаемыеТовары.Количество() > 0 Тогда

		ТекстВопроса = НСтр("ru = 'Перед заполнением табличная часть будет очищена. Заполнить?'");
		
		Ответ = Неопределено;

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

	КонецЕсли;

	ЗаполнитьПоОтобраннымТоварамСервер(Ложь, Неопределено);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

		ТекстВопроса = НСтр("ru = 'Перед заполнением табличная часть будет очищена. Заполнить?'");
		
		Ответ = Неопределено;

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

	КонецЕсли;

    ПерезаполнитьОтгружаемымиТоварамиСервер();

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

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

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

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

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

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

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

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

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

	//

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

	СкладыСервер.УстановитьУсловноеОформлениеПоДействиюВСтроке(ЭтотОбъект);
	
	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();

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

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

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

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

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

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

	//

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

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

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

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

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

	//

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

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

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

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

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

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

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

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

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

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

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

	УпаковочныеЛистыСервер.УстановитьУсловноеОформлениеСУчетомУпаковочныхЛистов(ЭтотОбъект, "ОтгружаемыеТовары");
	
	//

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Если ПроверкаПройдена Тогда
		АдресХранилища = ПоместитьВоВременноеХранилище(ТабличнаяЧастьТовары);
	КонецЕсли;
	
	Возврат ПроверкаПройдена;
	
КонецФункции

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

&НаКлиенте
Процедура ОбработатьШтрихкоды(ДанныеШтрихкодов)
	
	Если Не ШтрихкодированиеНоменклатурыКлиент.ШтрихкодыВалидны(ДанныеШтрихкодов) Тогда
		Возврат;
	КонецЕсли;

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

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

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

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

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

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

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

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

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

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

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

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

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


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

#Область УпаковочныеЛисты

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

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

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

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

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

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

&НаСервере
Функция УпаковатьСервер()
	
	Возврат УпаковочныеЛистыСервер.УпаковатьСервер(ЭтотОбъект);
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОтобразитьИнформациюПоНеотгружаемымТоварамКлиент()
	
	ОтобразитьИнформациюПоНеотгружаемымТоварам();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция ПорядокДоставкиВЗаданииНаПеревозку(ЗаданиеНаПеревозку, Получатель)
	Возврат ДоставкаТоваров.ПорядокДоставкиВЗаданииНаПеревозку(ЗаданиеНаПеревозку, Получатель);	
КонецФункции

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

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

	НоменклатураСервер.ПроверитьКомплектностьТоварныхМест(Объект.ОтгружаемыеТовары, Отказ, ПараметрыПроверки);
	
	Возврат Отказ;
	
КонецФункции

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

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

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

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

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

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

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

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

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

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