Заказ на перемещение / Модуль менеджера

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

// Формирует представление объекта метаданных на основном языке.
// Возвращаемое значение:
// Строка - Представление объекта метаданных на основном языке.
//
Функция ПредставлениеОбъектаНаОсновномЯзыке() Экспорт
	
	КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка();
	
	ПредставлениеОбъекта = НСтр(
		"ru = 'Заказ на перемещение'",
		КодОсновногоЯзыка);
		
	Возврат ПредставлениеОбъекта;
	
КонецФункции

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

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

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

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

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

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

// СтандартныеПодсистемы.ВерсионированиеОбъектов

// Определяет настройки объекта для подсистемы ВерсионированиеОбъектов.
//
// Параметры:
//  Настройки - Структура - настройки подсистемы.
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт

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

// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

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

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

#Область РасчетСостояний

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

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

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

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

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

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

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

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

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

// Проверяет наличие права доступа "Добавление" к объекту метаданных для текущего пользователя.
//
// Возвращаемое значение:
//	Булево - Истина - право доступа к объекту установлено; Ложь - в противном случае.
//
Функция ПравоДоступаДобавление() Экспорт
	
	Возврат ПравоДоступа("Добавление", Метаданные.Документы.ЗаказНаПеремещение);
	
КонецФункции

// Осуществляет инициализацию структуры состояния выполнения документа
//
// Возвращаемое значение:
//  Структура - содержит следующие ключи:
//     * ВыводитьТаблицыОбеспечение      - Число -
//     * ВыводитьТаблицыОтгрузка         - Число -
//     * ВыводитьТаблицыПоступление      - Число -
//     * ВыводитьТаблицыОтмененоОтгрузка - Число -
//     * ЭтоЗаказ                        - Булево -
//     * СкладВШапке                     - Булево -
//     * ИмяПоляДатаОтгрузки             - Строка -
//     * ИмяПоляСклад                    - Строка -
//     * ИмяПоляСкладПолучатель          - Строка -
//     * ТекстТоварУслугаОтгрузка        - Строка -
//     * ТекстТоварУслугаПоступление     - Строка -
//     * ИмяРегистраПоступлениеУслуг     - Строка -
//
Функция СтруктураСостояниеВыполненияДокумента() Экспорт
	
	СтруктураСостояние = Отчеты.СостояниеВыполненияДокументов.ИнициализироватьСтруктуруСостояниеВыполненияДокумента();
	СтруктураСостояние.Вставить("ВыводитьТаблицыОбеспечение", 1);
	СтруктураСостояние.Вставить("ВыводитьТаблицыОтгрузка", 2);
	СтруктураСостояние.Вставить("ВыводитьТаблицыПоступление", 3);
	СтруктураСостояние.Вставить("ВыводитьТаблицыОтмененоОтгрузка", 4);
	СтруктураСостояние.Вставить("ЭтоЗаказ", Истина);
	СтруктураСостояние.Вставить("СкладВШапке", Истина);
	СтруктураСостояние.Вставить("ИмяПоляДатаОтгрузки",    "НачалоОтгрузки");
	СтруктураСостояние.Вставить("ИмяПоляСклад",           "СкладОтправитель");
	СтруктураСостояние.Вставить("ИмяПоляСкладПолучатель", "СкладПолучатель");
	СтруктураСостояние.Вставить("ТекстТоварУслугаОтгрузка", НСтр("ru = 'Товар'"));
	СтруктураСостояние.Вставить("ТекстТоварУслугаПоступление", НСтр("ru = 'Товар'"));
	СтруктураСостояние.Вставить("ИмяРегистраПоступлениеУслуг", "ЗаказыНаПеремещение");
	
	СтруктураДопЗапросов = Новый Структура();
	СтруктураДопЗапросов.Вставить("ТекстЗапросаВТТоварыПоступление",
		ВременнаяТаблицаТоварыПоступлениеДляОтчетаСостояниеВыполнения());
	СтруктураДопЗапросов.Вставить("ТекстЗапросаВТТоварыРаспоряженияПоступлениеЗаказ",
		ВременнаяТаблицаТоварыРаспоряженияПоступлениеДляОтчетаСостояниеВыполнения());
	СтруктураСостояние.Вставить("СтруктураДопЗапросов", СтруктураДопЗапросов);
	
	Возврат СтруктураСостояние;
	
КонецФункции

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

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

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

#Область ДляВызоваИзДругихПодсистем

// СтандартныеПодсистемы.УправлениеДоступом

// Параметры:
//   Ограничение - см. УправлениеДоступомПереопределяемый.ПриЗаполненииОграниченияДоступа.Ограничение.
//
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт

	Ограничение.Текст =
	"РазрешитьЧтениеИзменение
	|ГДЕ
	|	ЗначениеРазрешено(Организация)
	|	И( ЗначениеРазрешено(СкладОтправитель)
	|	ИЛИ ЗначениеРазрешено(СкладПолучатель)
	|	) ";

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

// Конец СтандартныеПодсистемы.УправлениеДоступом

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

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

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

#Область СлужебныйПрограммныйИнтерфейс

#Область Обеспечение

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

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

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

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

#Область НаправленияДеятельности

// Параметры:
//  Форма - ФормаКлиентскогоПриложения - форма документа.
//	Возвращаемое значение:
//   см. НаправленияДеятельностиСервер.ПорядокОбработкиДокументаПриИзмененииНаправленияДеятельности.
Функция ПорядокОбработкиДокументаПриИзмененииНаправленияДеятельности(Форма) Экспорт
	
	ПорядокОбработкиДокумента = НаправленияДеятельностиСервер.ПорядокОбработкиДокументаПриИзмененииНаправленияДеятельности();
	ПорядокОбработкиДокумента.ЗаполнятьНазначениеВШапке = Истина;
	
	Возврат ПорядокОбработкиДокумента;
	
КонецФункции

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

#Область Назначения

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

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

#Область Организации

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

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

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

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

Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт

	ИсточникиДанных = Новый Соответствие;

	Возврат ИсточникиДанных; 

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

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

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

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

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

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

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

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

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

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

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

#Область СозданиеНаОсновании

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

// Определяет список команд создания на основании.
//
// Параметры:
//  КомандыСозданияНаОсновании - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании.КомандыСозданияНаОсновании
//  Параметры - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании.Параметры
//
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
	
	БизнесПроцессы.Задание.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
	
	Документы.ЗаказПоставщику.ДобавитьКомандуСоздатьОбеспечивающийЗаказ(КомандыСозданияНаОсновании);
	
	//++ НЕ УТ
	Обработки.ФормированиеЗаказовНаПередачуВПроизводствоНаОсновании.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
	Документы.ЗаказПереработчику2_5.ДобавитьКомандуСоздатьОбеспечивающийЗаказ(КомандыСозданияНаОсновании);
	//-- НЕ УТ
	
	Документы.КорректировкаНазначенияТоваров.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
	
	
	Документы.ПеремещениеТоваров.ДобавитьКомандуСоздатьНаОснованииЗаказа(КомандыСозданияНаОсновании);
	
	Документы.РасходныйОрдерНаТовары.ДобавитьКомандуСоздатьНаОснованииРасходныйОрдерНаТовары(КомандыСозданияНаОсновании);
	
	Документы.ПоручениеЭкспедитору.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
	
	Документы.УпаковочныйЛист.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
	
	ЗаказНаПеремещениеЛокализация.ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры);
	
	// ЭлектронноеВзаимодействие.СервисДоставки
	СервисДоставкиПереопределяемый.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании, Параметры);
	// Конец ЭлектронноеВзаимодействие.СервисДоставки
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

// Заполняет список команд печати.
//
// Параметры:
//   КомандыПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт

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

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

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

#Область ОтчетСостояниеВыполненияДокумента

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

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

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

#Область Отчеты

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

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

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

Функция ТекстЗапросаТоварыДокумента() Экспорт

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

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

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

#Область ФормированиеГиперссылкиВЖурналеДокументовВнутреннегоТовародвижения

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

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

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

#Область ОбновлениеИнформационнойБазы

// см. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
	
	Обработчик = Обработчики.Добавить();
	Обработчик.Процедура = "Документы.ЗаказНаПеремещение.ОбработатьДанныеДляПереходаНаНовуюВерсию";
	Обработчик.Версия = "11.5.25.60";
	Обработчик.РежимВыполнения = "Отложенно";
	Обработчик.Идентификатор = Новый УникальныйИдентификатор("174b0cda-50f8-479f-a083-88db17d1ba04");
	Обработчик.Многопоточный = Истина;
	Обработчик.ПроцедураЗаполненияДанныхОбновления = "Документы.ЗаказНаПеремещение.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
	Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
	Обработчик.Комментарий = НСтр("ru = 'Заполняет реквизит ""Направление деятельности"" в документе ""Заказ на перемещение"".'");
	
	ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика();
	Приоритет = ПриоритетыВыполнения.Добавить();
	Приоритет.Порядок = "До";
	Приоритет.Процедура = "РегистрыСведений.РеестрДокументов.ОбработатьДанныеДляПереходаНаНовуюВерсию";
	Обработчик.ПриоритетыВыполнения = ПриоритетыВыполнения;
	
	Читаемые = Новый Массив;
	Читаемые.Добавить(Метаданные.Документы.ЗаказНаПеремещение.ПолноеИмя());
	Читаемые.Добавить(Метаданные.Справочники.Назначения.ПолноеИмя());
	Обработчик.ЧитаемыеОбъекты = СтрСоединить(Читаемые, ",");
	
	Изменяемые = Новый Массив;
	Изменяемые.Добавить(Метаданные.Документы.ЗаказНаПеремещение.ПолноеИмя());
	Обработчик.ИзменяемыеОбъекты = СтрСоединить(Изменяемые, ",");
	
	Блокируемые = Новый Массив;
	Блокируемые.Добавить(Метаданные.Документы.ЗаказНаПеремещение.ПолноеИмя());
	Обработчик.БлокируемыеОбъекты = СтрСоединить(Блокируемые, ",");
	
КонецПроцедуры

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

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

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

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

#КонецЕсли

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