Ордер на перемещение товаров / Модуль менеджера

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Запрос.УстановитьПараметр("Статус",					Реквизиты.Статус);
	Запрос.УстановитьПараметр("Период",					Реквизиты.Период);
	Запрос.УстановитьПараметр("Склад",					Реквизиты.Склад);
	Запрос.УстановитьПараметр("ПомещениеОтправитель",	Реквизиты.ПомещениеОтправитель);
	Запрос.УстановитьПараметр("ПомещениеПолучатель",	Реквизиты.ПомещениеПолучатель);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

Процедура ВывестиСтрокуТаблицыТоваров(СтруктураПараметров)
	
	ТабличныйДокумент 		= СтруктураПараметров.ТабличныйДокумент;
	ВыводитьКоды 			= СтруктураПараметров.ВыводитьКоды;
	ВыводитьУпаковки 		= СтруктураПараметров.ВыводитьУпаковки;
	ОбластьНачало 			= СтруктураПараметров.ОбластьНачало;
	ОбластьКолонкаКодов 	= СтруктураПараметров.ОбластьКолонкаКодов;
	ОбластьКолонкаТоваров 	= СтруктураПараметров.ОбластьКолонкаТоваров;
	ОбластьКолонкаУпаковок 	= СтруктураПараметров.ОбластьКолонкаУпаковок;
	ОбластьКонец 			= СтруктураПараметров.ОбластьКонец;	
	
	ТабличныйДокумент.Вывести(ОбластьНачало);
	
	Если ВыводитьКоды Тогда
		ТабличныйДокумент.Присоединить(ОбластьКолонкаКодов);
	КонецЕсли;
	
	ТабличныйДокумент.Присоединить(ОбластьКолонкаТоваров);
	
	Если ВыводитьУпаковки Тогда
		ТабличныйДокумент.Присоединить(ОбластьКолонкаУпаковок);
	КонецЕсли;
	
	ТабличныйДокумент.Присоединить(ОбластьКонец);
	
КонецПроцедуры

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

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

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

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

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

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

#КонецЕсли

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