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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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