Расходный ордер на товары / Модуль менеджера

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Функция АдаптированныйТекстЗапросаДвиженийПоРегистру(ИмяРегистра) Экспорт

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

	Возврат Результат;

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

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

	Результат = Запрос.Выполнить();

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

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

Процедура ПолучитьДанныеДокумента(Запрос, ДокументСсылка)

	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();

	Если ДокументСсылка = Неопределено Тогда
		Возврат;
	КонецЕсли;

	СписокЗапросов = Новый Массив;

	ТекстЗапросаДанныеДокументаШапка(СписокЗапросов);
	ТекстЗапросаДанныеДокументаТаблицаОтгружаемыеТовары(СписокЗапросов);
	ТекстЗапросаДанныеДокументаТаблицаТоварыПоРаспоряжениям(СписокЗапросов);

	ТекстЗапроса = СтрСоединить(СписокЗапросов, ОбщегоНазначения.РазделительПакетаЗапросов());

	Запрос.Текст = ТекстЗапроса;
	Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
	Запрос.Выполнить();

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

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

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

	СписокЗапросов.Добавить(ТекстЗапросаТаблицаТовары);

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

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

	СписокЗапросов.Добавить(ТекстЗапросаТаблицаТоварыПоРаспоряжениям);

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

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

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

Процедура ОтгрузитьТоварСоСклада(Запрос, ТекстыЗапроса, Регистры, ДокументОбъект)

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

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

	СкладыСервер.ОтгрузитьТоварСоСклада(Запрос, ТекстыЗапроса, Регистры, ТекстЗапросаДанныхДокумента);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Функция ТекстЗапросаЗаполненияСтатусовУказанияСерийОтгружаемыеТовары(Знач ПараметрыУказанияСерий)

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

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

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

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

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

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

#КонецЕсли
#КонецЕсли

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