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

файл

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ОчиститьСообщения();
	ТекущиеДанные = Элементы.РаспоряженияНаПоступление.ТекущиеДанные;
	
	Если ТекущиеДанные <> Неопределено Тогда

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

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

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

&НаКлиенте
Процедура ОбновитьСпискиРазмещение(Команда)
	ОбновитьСписки("Размещение");
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

	//

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ПолеСОшибкойФон);

	//

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ПолеСОшибкойФон);

	//

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ПолеСОшибкойФон);
	

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

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

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

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

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

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

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

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

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

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

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

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

			Если (ОбъемДокумента + СтрТабл.ОбъемУпаковки * СтрТабл.КоличествоУпаковок) > МаксимальныйОбъем
				Или (ВесДокумента + СтрТабл.ВесУпаковки * СтрТабл.КоличествоУпаковок) > МаксимальныйВес Тогда

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

				ЗаписатьДокумент(ТекущийДокумент, ОбъемДокумента, ВесДокумента);

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

			КонецЕсли;

			НоваяСтрока = ТаблицаЗаполнения.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрТабл);

			ОбъемДокумента    = ОбъемДокумента + СтрТабл.ОбъемУпаковки * СтрТабл.КоличествоУпаковок;
			ВесДокумента	  = ВесДокумента + СтрТабл.ВесУпаковки * СтрТабл.КоличествоУпаковок;
			КоличествоОбработано = КоличествоОбработано + 1;

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

&НаСервере
Функция РазбитьСтрокиПоОграничениям(РазмещениеТоваровВЯчейках, МаксимальныйОбъем, МаксимальныйВес)

	ТаблицаРезультата = РазмещениеТоваровВЯчейках.СкопироватьКолонки();
	СтрокиСПересчетомКоличества = Новый Массив;

	Для Каждого ОписаниеРазмещения Из РазмещениеТоваровВЯчейках Цикл

		ОсталосьРазместить = ОписаниеРазмещения.КоличествоУпаковок;

		МаксимальноеКоличествоПоОбъему = МаксимальноеКоличествоПоОграничению(
			ОписаниеРазмещения.ОбъемУпаковки,
			МаксимальныйОбъем,
			ОсталосьРазместить);

		МаксимальноеКоличествоПоВесу = МаксимальноеКоличествоПоОграничению(
			ОписаниеРазмещения.ВесУпаковки,
			МаксимальныйВес,
			ОсталосьРазместить);

		МаксимальноеКоличествоРазмещения = Мин(МаксимальноеКоличествоПоОбъему, МаксимальноеКоличествоПоВесу);
		ПересчитыватьКоличество = МаксимальноеКоличествоРазмещения < ОсталосьРазместить;
		
		Пока ОсталосьРазместить <> 0 Цикл

			СтрокаРазмещения = ТаблицаРезультата.Добавить();
			ЗаполнитьЗначенияСвойств(СтрокаРазмещения, ОписаниеРазмещения);

			Если ОсталосьРазместить > МаксимальноеКоличествоРазмещения Тогда
				РазмещаемоеКоличествоУпаковок = МаксимальноеКоличествоРазмещения;
			Иначе
				РазмещаемоеКоличествоУпаковок = ОсталосьРазместить;
			КонецЕсли;

			СтрокаРазмещения.КоличествоУпаковок = РазмещаемоеКоличествоУпаковок;

			ОсталосьРазместить = ОсталосьРазместить - РазмещаемоеКоличествоУпаковок;
			
			Если ПересчитыватьКоличество Тогда
				СтрокиСПересчетомКоличества.Добавить(СтрокаРазмещения);
			КонецЕсли;
			
		КонецЦикла;

	КонецЦикла;

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

	Возврат ТаблицаРезультата;

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

&НаСервереБезКонтекста
Функция МаксимальноеКоличествоПоОграничению(Значение, Ограничение, ЗначениеПоУмолчанию)
	
	Если Значение = 0 Тогда
		Возврат ЗначениеПоУмолчанию;
	КонецЕсли;
	
	Возврат Цел(Ограничение / Значение);
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Возврат ПоместитьВоВременноеХранилище(СтруктураРезультат);
	
КонецФункции 

&НаСервереБезКонтекста
Функция ПриходныеОрдераПоРаспоряжению(Распоряжение)

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

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

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

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

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

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

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

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

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

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