Ордер на отражение излишков товаров / Модуль менеджера

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Возврат ТекстЗапроса;
	
КонецФункции

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

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

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

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

	// Отражение излишков товаров
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Идентификатор = "ОрдерНаОтражениеИзлишковТоваров";
	КомандаПечати.Представление = НСтр("ru = 'Отражение излишков товаров'");
	КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;

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

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

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

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

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

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

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

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

Функция ДанныеДляПечатиЭтикеток(МассивДокументов) Экспорт

	ДатаЦенообразования = ОбщегоНазначенияУТ.ПолучитьМаксимальнуюДатуДокументов(МассивДокументов);
	ИспользуетсяЦенообразование25 = ЦенообразованиеВызовСервера.ИспользуетсяЦенообразование25(ДатаЦенообразования);

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

Функция ДанныеДляПечатиЦенников(МассивДокументов) Экспорт

	ДатаЦенообразования = ОбщегоНазначенияУТ.ПолучитьМаксимальнуюДатуДокументов(МассивДокументов);
	ИспользуетсяЦенообразование25 = ЦенообразованиеВызовСервера.ИспользуетсяЦенообразование25(ДатаЦенообразования);

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

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

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

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

#КонецЕсли

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