Отгрузка товаров с хранения / Модуль менеджера

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

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

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

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

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

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

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

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

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

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

#Область СозданиеНаОсновании

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

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

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

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

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

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

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

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

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

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

	Возврат ПараметрыУказанияСерий;
	
КонецФункции

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

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

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

#Область Назначения

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

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

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

//-- НЕ УТКА

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

#Область Доставка

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

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


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

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

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

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

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

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

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

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

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

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


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

#Область ОснованиеДляПечати

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

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

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

#КонецЕсли

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

Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
	
	
	Возврат;
	
КонецПроцедуры

Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
	
	
	Возврат;
	
КонецПроцедуры

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

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

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

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

Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт
	
	// под вопросом
	ИсточникиДанных = Новый Соответствие;
	
	Возврат ИсточникиДанных; 
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Если ПривилегированныйРежим() Тогда
		УстановитьПривилегированныйРежим(Ложь);
	КонецЕсли;
	
	Возврат ТабличныйДокумент;

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

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


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

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


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

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

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

// Функция возвращает имя менеджера документа отгрузки товаров с хранения.
//
// Возвращаемое значение:
//  Строка - имя менеджера документа отгрузки товаров с хранения.
//
Функция ПолноеИмяОбъекта()
	
	Возврат "Документ.ОтгрузкаТоваровСХранения";
	
КонецФункции

Функция СформироватьТаблицуОтгрузки()
	
	ТоварыДляОтгрузки = Новый ТаблицаЗначений;
	ТоварыДляОтгрузки.Колонки.Добавить("ЗаказКлиента", Новый ОписаниеТипов("ДокументСсылка.ЗаказКлиента"));
	ТоварыДляОтгрузки.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
	ТоварыДляОтгрузки.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
	ТоварыДляОтгрузки.Колонки.Добавить("Назначение", Новый ОписаниеТипов("СправочникСсылка.Назначения"));
	ТоварыДляОтгрузки.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
	ТоварыДляОтгрузки.Колонки.Добавить("Склад", Новый ОписаниеТипов("СправочникСсылка.Склады"));
	ТоварыДляОтгрузки.Колонки.Добавить("НомерСтрокиВДокументе", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0)));
	ТоварыДляОтгрузки.Колонки.Добавить("Упаковка", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
	ТоварыДляОтгрузки.Колонки.Добавить("Серия", Новый ОписаниеТипов("СправочникСсылка.СерииНоменклатуры"));
	ТоварыДляОтгрузки.Колонки.Добавить("КоличествоВЗаказе", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
	ТоварыДляОтгрузки.Колонки.Добавить("Цена", ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля());
	ТоварыДляОтгрузки.Колонки.Добавить("Сумма", ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля());
	ТоварыДляОтгрузки.Колонки.Добавить("КоличествоДокумента", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
	ТоварыДляОтгрузки.Колонки.Добавить("СуммаДокумента", ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля());
	ТоварыДляОтгрузки.Колонки.Добавить("Коэффициент", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
	ТоварыДляОтгрузки.Колонки.Добавить("КоличествоУпаковок", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
	ТоварыДляОтгрузки.Колонки.Добавить("КоличествоВОтчете", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
	ТоварыДляОтгрузки.Колонки.Добавить("КоличествоОстаток", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
	ТоварыДляОтгрузки.Колонки.Добавить("КоличествоСобирается", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
	ТоварыДляОтгрузки.Колонки.Добавить("КоличествоСобрано", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
	ТоварыДляОтгрузки.Колонки.Добавить("КоличествоВНакладной", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
	ТоварыДляОтгрузки.Колонки.Добавить("КоличествоПодобрано", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
	ТоварыДляОтгрузки.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево"));
	ТоварыДляОтгрузки.Колонки.Добавить("ОрдернаяСхемаПриОтгрузке", Новый ОписаниеТипов("Булево"));
	
	Возврат ТоварыДляОтгрузки;
	
КонецФункции

// Возвращает таблицу остатков товаров к отгрузке
//
// Параметры:
//  ПараметрыДанных - Структура - структура содержит:
//   * Партнер - СправочникСсылка.Партнеры - Парнер.
//   * Контрагент - СправочникСсылка.Контрагенты - Контрагент.
//   * Организация - СправочникСсылка.Организации - Организация.
//   * Склад - СправочникСсылка.
//   * Договор - СправочникСсылка.
//   * ЗаказыКлиентов - Массив из ДокументСсылка.ЗаказКлиента
//   * ТоварыОтгрузки - ТаблицаЗначений - товары документа.
//   * ДокументОтгрузки - ДокументСсылка.ОтгрузкаТоваровСХранения - текщуй документ отгрузки.
//   * ПоЗаказу - Булево - Производится отгрузка по заказу клиента.
//
// Возвращаемое значение:
//  ТаблицаЗначений - см. СформироватьТаблицуОтгрузки - таблица отгрузки товаров с хранения.
//
Функция ПолучитьТаблицуОстатковПоОтгрузке(ПараметрыДанных) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("ВидДвижения", ВидДвиженияНакопления.Расход);
	Запрос.УстановитьПараметр("ПустоеНазначение",      Справочники.Назначения.ПустаяСсылка());
	Запрос.УстановитьПараметр("Договор", ПараметрыДанных.Договор);
	Запрос.УстановитьПараметр("Контрагент", ПараметрыДанных.Контрагент);
	Запрос.УстановитьПараметр("Организация", ПараметрыДанных.Организация);
	Запрос.УстановитьПараметр("Партнер", ПараметрыДанных.Партнер);
	Запрос.УстановитьПараметр("Регистратор", ПараметрыДанных.ДокументОтгрузки);
	Запрос.УстановитьПараметр("СкладРеализации", ПараметрыДанных.Склад);
	Запрос.УстановитьПараметр("ТипНоменклатуры", Перечисления.ТипыНоменклатуры.Товар);
	
	Если ЗначениеЗаполнено(ПараметрыДанных.ТоварыОтгрузки) Тогда
		Запрос.УстановитьПараметр("ТоварыОтгрузки",   ПараметрыДанных.ТоварыОтгрузки);
	Иначе
		ТоварыРеализации = Новый ТаблицаЗначений;
		ТоварыРеализации.Колонки.Добавить("ЗаказКлиента", Новый ОписаниеТипов("ДокументСсылка.ЗаказКлиента"));
		ТоварыРеализации.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
		ТоварыРеализации.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
		ТоварыРеализации.Колонки.Добавить("КодСтроки", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0)));
		ТоварыРеализации.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
		ТоварыРеализации.Колонки.Добавить("Склад", Новый ОписаниеТипов("СправочникСсылка.Склады"));
		ТоварыРеализации.Колонки.Добавить("Упаковка", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
		ТоварыРеализации.Колонки.Добавить("Серия", Новый ОписаниеТипов("СправочникСсылка.СерииНоменклатуры"));
		ТоварыРеализации.Колонки.Добавить("ВидЦены", Новый ОписаниеТипов("СправочникСсылка.ВидыЦен"));
		ТоварыРеализации.Колонки.Добавить("КоличествоВЗаказе", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
		ТоварыРеализации.Колонки.Добавить("Цена", ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля());
		ТоварыРеализации.Колонки.Добавить("Сумма", ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля());
		ТоварыРеализации.Колонки.Добавить("Назначение", Новый ОписаниеТипов("СправочникСсылка.Назначения"));
		ТоварыРеализации.Колонки.Добавить("КлючСвязи", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0)));
		
		Запрос.УстановитьПараметр("ТоварыОтгрузки", ТоварыРеализации);
	КонецЕсли;
	
	ТоварыДляОтгрузки = СформироватьТаблицуОтгрузки();
	
	Если ПараметрыДанных.ПоЗаказу Тогда
		Запрос.УстановитьПараметр("ОтобратьПоЗаказу", ПараметрыДанных.ЗаказыКлиентов.Количество() > 0);
		Запрос.УстановитьПараметр("МассивЗаказов", ПараметрыДанных.ЗаказыКлиентов);
	Иначе
		Запрос.УстановитьПараметр("ОтобратьПоЗаказу", Ложь);
		Запрос.УстановитьПараметр("МассивЗаказов", Новый Массив());
	КонецЕсли;
	
	Запрос.УстановитьПараметр("ТекущаяДата", НачалоДня(ТекущаяДатаСеанса()));
	Запрос.УстановитьПараметр("ТребуетсяЗалогЗаТару", Ложь);
	
	Запрос.УстановитьПараметр("ИспользоватьРасширенныеВозможностиЗаказаКлиента",
		ПолучитьФункциональнуюОпцию("ИспользоватьРасширенныеВозможностиЗаказаКлиента"));
		
	ЗаполнитьТекстЗапросаПоЗаказу(Запрос);
	РезультатЗапроса = Запрос.ВыполнитьПакет();
	ДанныеПоОстаткам = РезультатЗапроса[6].Выгрузить();
	ДанныеПоЗаказуИОтгрузке = РезультатЗапроса[7].Выгрузить();
	ДанныеПоОстаткамОрганизации = РезультатЗапроса[14].Выгрузить();
	ДанныеПоОтчету = РезультатЗапроса[13].Выгрузить();
	ДанныеПоЦенам = РезультатЗапроса[15].Выгрузить();
	ДанныеПоОрдерам = РезультатЗапроса[18].Выгрузить();
	
	КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
	СтруктураДействий = Новый Структура("ПересчитатьКоличествоУпаковок");
	
	Для каждого СтрокаЦена Из ДанныеПоЦенам Цикл
		
		ОтборПоТовару = Новый Структура();
		ОтборПоТовару.Вставить("Номенклатура", СтрокаЦена.Номенклатура);
		ОтборПоТовару.Вставить("Характеристика", СтрокаЦена.Характеристика);
		ОтборПоТовару.Вставить("Назначение", СтрокаЦена.Назначение);
		ОтборПоТовару.Вставить("Цена", 0);
		СтрокиПоОстаткам = ДанныеПоОстаткамОрганизации.НайтиСтроки(ОтборПоТовару);
		Для каждого СтрокаОстаток Из СтрокиПоОстаткам Цикл
			Если СтрокаОстаток.КоличествоОстаток > СтрокаЦена.КоличествоОстаток 
				И СтрокаЦена.КоличествоОстаток > 0 Тогда
				НоваяСтрокаОстатков = ДанныеПоОстаткам.Добавить();
				ЗаполнитьЗначенияСвойств(НоваяСтрокаОстатков, СтрокаОстаток);
				НоваяСтрокаОстатков.КоличествоОстаток = СтрокаОстаток.КоличествоОстаток - СтрокаЦена.КоличествоОстаток;
				СтрокаОстаток.Цена = СтрокаЦена.Цена;
				СтрокаОстаток.Сумма = СтрокаОстаток.Цена * СтрокаЦена.КоличествоОстаток;
				СтрокаЦена.КоличествоОстаток = 0;
			Иначе 
				СтрокаОстаток.Цена = СтрокаЦена.Цена;
				СтрокаОстаток.Сумма = СтрокаОстаток.Цена * СтрокаЦена.КоличествоОстаток;
				СтрокаЦена.КоличествоОстаток = СтрокаЦена.КоличествоОстаток-СтрокаОстаток.КоличествоОстаток;
			КонецЕсли;
		КонецЦикла;
		
	КонецЦикла;

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

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

	ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
		ОбрабатываемыеСтроки,
		СтруктураДействий,
		ТоварыДляОтгрузки,
		КэшированныеЗначения);

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

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

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

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

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

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

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

Функция ПолучитьСтруктуруПоиска(ПоСериям = Истина)
	
	СтруктураПоиска = Новый Структура;
	
	СтруктураПоиска.Вставить("Номенклатура");
	СтруктураПоиска.Вставить("Характеристика");
	СтруктураПоиска.Вставить("Назначение");
	СтруктураПоиска.Вставить("Склад");
	Если ПоСериям Тогда
		СтруктураПоиска.Вставить("Серия");
	КонецЕсли;
	
	Возврат СтруктураПоиска;
	
КонецФункции

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

#Область ШаблоныСообщений

// Вызывается при подготовке шаблонов сообщений и позволяет переопределить список реквизитов и вложений.
//
// Параметры:
//  Реквизиты               - ДеревоЗначений - список реквизитов шаблона:
//         * Имя            - Строка - Уникальное имя общего реквизита.
//         * Представление  - Строка - Представление общего реквизита.
//         * Тип            - Тип    - Тип реквизита. По умолчанию строка.
//         * Формат         - Строка - Формат вывода значения для чисел, дат, строк и булевых значений.
//  Вложения                - ТаблицаЗначений - печатные формы и вложения:
//         * Имя            - Строка - Уникальное имя вложения.
//         * Представление  - Строка - Представление варианта.
//         * ТипФайла       - Строка - Тип вложения, который соответствует расширению файла: "pdf", "png", "jpg", mxl"
//                                      и др.
//  ДополнительныеПараметры - Структура - дополнительные сведения о шаблоне сообщений.
//
Процедура ПриПодготовкеШаблонаСообщения(Реквизиты, Вложения, ДополнительныеПараметры) Экспорт
	
КонецПроцедуры

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

// Заполняет список получателей SMS при отправке сообщения сформированного по шаблону.
//
// Параметры:
//   ПолучателиSMS - ТаблицаЗначений - список получается SMS:
//     * НомерТелефона - Строка - номер телефона, куда будет отправлено сообщение SMS.
//     * Представление - Строка - представление получателя сообщения SMS.
//     * Контакт       - СправочникСсылка - контакт, которому принадлежит номер телефона.
//  ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных.
//
Процедура ПриЗаполненииТелефоновПолучателейВСообщении(ПолучателиSMS, ПредметСообщения) Экспорт
	
КонецПроцедуры

// Заполняет список получателей письма при отправки сообщения сформированного по шаблону.
//
// Параметры:
//   ПолучателиПисьма - ТаблицаЗначений - список получается письма:
//     * Адрес           - Строка - адрес электронной почты получателя.
//     * Представление   - Строка - представление получается письма.
//     * ВариантОтправки - Строка - Варианты отправки письма: "Кому", "Копия", "СкрытаяКопия", "ОбратныйАдреса";
//  ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных.
//
Процедура ПриЗаполненииПочтыПолучателейВСообщении(ПолучателиПисьма, ПредметСообщения) Экспорт
	
КонецПроцедуры

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

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

#КонецЕсли

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