Отгрузка товаров со склада / Форма / Модуль формы

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

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

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

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

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

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

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

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

	УстановитьОтборыВЗависимыхСписках(ТекущиеРаспоряжения());

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура РаспоряженияНаОтгрузкуПередУдалением(Элемент, Отказ)
	
	Отказ = Истина;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОбновитьСписки(Команда)
	УстановитьОтборыВОсновныхСписках();
	УстановитьОтборыВЗависимыхСписках(ТекущиеРаспоряжения());
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ЗаполнениеИИнициализация

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

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

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

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

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

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

#Область Интерфейс

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ОбработкиОрдеров

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

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

&НаСервере
Функция УстановитьЗоныОтгрузкиСервер(Знач МассивДокументов)

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

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

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

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

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

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

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

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

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

#Область ОбработкиЗаданий

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

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

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

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

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

&НаКлиенте
Процедура КонтрольРаботыФоновыхЗаданийФормированияОчереди()
	КонтрольРаботыФоновыхЗаданийФормированияОчередиСервер();
КонецПроцедуры

&НаСервере
Процедура КонтрольРаботыФоновыхЗаданийФормированияОчередиСервер()
	
	Получатели = ПолучателиПоКоторымНетФоновогоЗаданияПереоформленияОрдеров(Склад);
	
	Если Получатели.Количество() > 0 Тогда
		
		Элементы.АвтоматическоеФормированиеРасходныхОрдеров.ТекущаяСтраница = 
			Элементы.СтраницаПроблема;
			
	Иначе
		Элементы.АвтоматическоеФормированиеРасходныхОрдеров.ТекущаяСтраница = 
			Элементы.СтраницаНетПроблем;	
	КонецЕсли;
			
КонецПроцедуры

&НаСервереБезКонтекста
Функция  ПолучателиПоКоторымНетФоновогоЗаданияПереоформленияОрдеров(Склад)
	Возврат СкладыСервер.ПолучателиПоКоторымНетФоновогоЗаданияПереоформленияОрдеров(Склад);	
КонецФункции

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

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

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

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

&НаСервере
Функция ЕстьМаркированнаяПродукцияСервер(ДокументСсылка)
	
	Возврат (СкладыЛокализация.ИспользуетсяМаркируемаяПродукция() И (СкладыЛокализация.ВидыПродукцииДокумента(ДокументСсылка).Количество() > 0));
	
КонецФункции

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

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

#Область Производительность

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

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

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