Движение продукции и материалов / Модуль менеджера

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

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

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

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

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

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

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

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

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

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

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

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

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

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

		Если РеквизитыШапки.РазличныхПолучателей > 1 Тогда
			ТекстыОшибок.Добавить(НСтр("ru='У выбранных распоряжений различные получатели.'"));
		КонецЕсли;

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

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

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

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

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

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

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

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


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

#Область Серии

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

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

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

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

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

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


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

#Область Команды

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

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

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

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

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

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

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

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

#Область ПечатьВозвратаМатериалов
	
	СписокХозяйственныхОпераций = Новый Массив();
	СписокХозяйственныхОпераций.Добавить(Перечисления.ХозяйственныеОперации.ВозвратМатериаловИзКладовой);
	
	// Оприходование товаров
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Идентификатор = "НакладнаяНаВозврат";
	КомандаПечати.Представление = НСтр("ru = 'Возврат из производства'");
	КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
	
	ДобавитьУсловиеВидимостиКомандыПоХозяйственнойОперации(КомандаПечати, СписокХозяйственныхОпераций);
	
#КонецОбласти

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

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

	ДвижениеПродукцииИМатериаловЛокализация.ДобавитьКомандыПечати(КомандыПечати);

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

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

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

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

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

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

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

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

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

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

Процедура ДобавитьУсловиеВидимостиКомандыПоХозяйственнойОперации(Команда, Список) Экспорт
	
	Если Команда <> Неопределено Тогда
		
		ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(Команда, "ХозяйственнаяОперация",
			Список, ВидСравненияКомпоновкиДанных.ВСписке);
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

#Область УчетНДС

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

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

#Область ПечатьЗаданияНаОтборРазмещениеТоваров

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

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

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

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

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

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

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

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

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

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

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

//++ НЕ УТ
#Область ПодакцизныеТовары

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

#КонецОбласти
//-- НЕ УТ

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

#КонецЕсли

#Область ОбработчикиСобытий

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

Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
	
	Если ЗначениеЗаполнено(Данные.ХозяйственнаяОперация) Тогда

		ПредставлениеОперации = СписокОпераций().НайтиПоЗначению(Данные.ХозяйственнаяОперация);
		Если ПредставлениеОперации <> Неопределено Тогда
			ПредставлениеОперации = ПредставлениеОперации.Представление;
		Иначе
			ПредставлениеОперации = Данные.ХозяйственнаяОперация;
		КонецЕсли;
		
		СтандартнаяОбработка = Ложь;
		Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru='%1 %2 от %3'"),
			ПредставлениеОперации,
			Данные.Номер,
			Данные.Дата);
		
	КонецЕсли;
		
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура ИнициализироватьКлючиАналитикиНоменклатуры(Запрос)

	Если Запрос = Неопределено ИЛИ Запрос.Параметры.Свойство("КлючиАналитикиНоменклатурыИнициализированы") Тогда
		Возврат;
	КонецЕсли;

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

	Запрос.УстановитьПараметр("КлючиАналитикиНоменклатурыИнициализированы", Истина);
	
КонецПроцедуры

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

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

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

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

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

	ТекущийОбъектМетаданных = Метаданные.Документы.ДвижениеПродукцииИМатериалов;
	
	СкладыСервер.ОформитьПоступлениеТоваровПоДвухходовке(
		Запрос,
		ТекстыЗапроса,
		Регистры,
		ТекстЗапросаДокумента,
		ТекущийОбъектМетаданных,
		"Серии");
		
КонецПроцедуры

Функция ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, Регистры)

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

	ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
	
	Возврат ТекстЗапроса;

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

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

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

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

Функция ТекстЗапросаТаблицаДвиженияНоменклатураНоменклатура(Запрос, ТекстыЗапроса, Регистры)

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

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

Функция ТекстЗапросаТаблицаЗаказыМатериаловВПроизводство(Запрос, ТекстыЗапроса, Регистры)

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

	ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
	
	Возврат ТекстЗапроса;

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


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

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

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

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

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

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

#Область ПартионныйУчет

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

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

Функция СформироватьДополнительныеТаблицыОперацийУчетаЗатратИСебестоимости(Документ, Запрос = Неопределено, ТекстыЗапроса = Неопределено) Экспорт
	
	ДополнительныеТаблицы = Новый Массив;
	ДополнительныеТаблицы.Добавить("ВтВидыЗапасов");
	
	Если Запрос <> Неопределено Тогда
	
		Если НЕ ПроведениеДокументов.ЕстьТаблицаЗапроса(ДополнительныеТаблицы[0], ТекстыЗапроса) Тогда
			ТекстЗапросаВтВидыЗапасов(Запрос, ТекстыЗапроса);
		КонецЕсли;
		
	КонецЕсли;
	
	Возврат ДополнительныеТаблицы;
	
КонецФункции

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

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

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

#Область ПроведениеРегламентированныйУчет

// Функция возвращает текст запроса для отражения документа в регламентированном учете.
//
// Возвращаемое значение:
//	Строка - Текст запроса
//
Функция ТекстОтраженияВРеглУчете() Экспорт

	Возврат ДвижениеПродукцииИМатериаловЛокализация.ТекстОтраженияВРеглУчете();

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

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

	Возврат ДвижениеПродукцииИМатериаловЛокализация.ТекстЗапросаВТОтраженияВРеглУчете();

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

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

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

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

Функция СформироватьПечатнуюФормуНакладной(МассивОбъектов, ОбъектыПечати)
	
	УстановитьПривилегированныйРежим(Истина);

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

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

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

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

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

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

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

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

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

				ОбластьЗаголовка  = ОбластьЗаголовкаПеремещение;

			Иначе //Шапка.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПеремещениеПолуфабрикатовМеждуФилиалами

				ОбластьЗаголовка = ОбластьЗаголовкаВнутренняяПередача;

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

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

Функция ПечатьПередачаМатериаловВПроизводство(МассивОбъектов, ОбъектыПечати)

	КолонкаКодов = ФормированиеПечатныхФорм.ДополнительнаяКолонкаПечатныхФормДокументов();
	ДопКолонка = КолонкаКодов.ИмяКолонки;
	ПредставлениеКолонкиКодов = КолонкаКодов.ПредставлениеКолонки;
	ВыводитьДопКолонку = ЗначениеЗаполнено(ДопКолонка);

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

	РеквизитыДокумента = Новый Структура("Номер, Дата, Префикс, Склад, Подразделение, ДатаИсправляемогоДокумента, НомерИсправляемогоДокумента");
	СинонимДокумента = Строка(Перечисления.ХозяйственныеОперации.ПередачаМатериаловВПроизводство);

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

			УправлениеПечатью.ЗадатьОбластьПечатиДокумента(
				ТабДокумент,
				НомерСтрокиНачало,
				ОбъектыПечати,
				ВыборкаПоДокументам.Ссылка);
			
		КонецЦикла;
	КонецЦикла;
	
	Возврат ТабДокумент;
	
КонецФункции

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

#Область ТекущиеДела

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

	ПараметрыОтбора = Новый Структура;
	ПараметрыОтбора.Вставить("ОтборХозяйственныеОперации", ОтборХозяйственныеОперации);
	ПараметрыОтбора.Вставить("ОтборТипыДокументов", ОтборТипыДокументов);
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("СтруктураБыстрогоОтбора", ПараметрыОтбора);
	ПараметрыФормы.Вставить("КлючНазначенияФормы", "ТекущиеДела");
	
	Дело = ТекущиеДела.Добавить();
	Дело.Идентификатор  = "ПередачиМатериаловВПроизводство2_2КОформлению";
	Дело.ЕстьДела       = ПередачиМатериаловКОформлению > 0;
	Дело.Представление  = НСтр("ru = 'Передачи материалов к оформлению'");
	Дело.Количество     = ПередачиМатериаловКОформлению;
	Дело.Важное         = Ложь;
	Дело.Форма          = ИмяФормы;
	Дело.ПараметрыФормы = ПараметрыФормы;
	Дело.Владелец       = ИдентификаторДела;
	
КонецПроцедуры

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

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

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

Функция ПредставлениеПолей(Объект) Экспорт

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

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

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

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

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

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

	СписокОпераций = СписокОпераций();
	Для каждого ИмяИПредставление Из СписокОпераций Цикл
		
		ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();

		ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
		ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ИмяПоляОперация);

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

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

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

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


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

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

Функция СозданиеНаОснованииПроверкаНаличияОрдеров()

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


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

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

Процедура ДобавитьЭлементОтбораСклад(Отбор)
	
	ОбщегоНазначенияУТ.ДобавитьЭлементОтбораВКоллекцию(Отбор, "Склад", "&Склад");
	
КонецПроцедуры	


Процедура ДобавитьЭлементОтбораПолучатель(Отбор)
	
	ОбщегоНазначенияУТ.ДобавитьЭлементОтбораВКоллекцию(Отбор, "Получатель", "&Получатель");
	
КонецПроцедуры	

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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