Списание отгруженных товаров / Модуль менеджера

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

#Область НазначениеИНаправлениеДеятельности

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

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

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


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

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

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

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

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

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


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

#Область ЗаполнениеПоРаспоряжению

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

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

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

	Распоряжения = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Распоряжение");

	Возврат ОбщегоНазначенияКлиентСервер.СвернутьМассив(Распоряжения);
	
КонецФункции

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

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

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

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

	ТекстыЗапроса = Новый Массив();
	
	// 1. Получаем текст запроса по остаткам к отгрузке: [отгружено] + [оприходовано до ППС] - [списано до ППС]
	// - [оформлено] - [принято]

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

	Ключ = "КодСтроки, " + ПараметрыЗаполнения.КлючевыеПоля;
	Если ЗаполнятьГТД Тогда
		Ключ = Ключ + ", НомерГТД";
	КонецЕсли;
	
	ТаблицаЗаказы.Колонки.КОформлению.Имя = "КоличествоВЗаказе";
	
	Условие = "ПО [Количество]"; // @query-part
	НакладныеСервер.РаспределитьКоличество(ТаблицаЗаказы, Товары, "КоличествоВЗаказе", Ключ, Условие, Истина);
	
	// Добавление отдельными строками нераспределенного количества заказов
	НакладныеСервер.ДополнитьТаблицу(ТаблицаЗаказы, Товары, "КоличествоВЗаказе");
	
КонецПроцедуры

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

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

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

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

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

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

#КонецЕсли

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область УнифицированныеМетодыПоХозяйственнымОперациям

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

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

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

#Область ХозяйственныеОперации

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

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

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

#Область ФункциональныеОпции

// Возвращает признак применяемости соглашений с клиентами.
//
// Возвращаемое значение:
//	Булево - признак применяемости соглашений с клиентами.
//
Функция СоглашенияСКлиентамиПрименимы() Экспорт
	
	Возврат Истина;
	
КонецФункции

// Возвращает признак использования соглашений с клиентами.
//
// Возвращаемое значение:
//	Булево - признак использование соглашений с клиентами.
//
Функция ИспользоватьСоглашенияСКлиентами() Экспорт
	
	Возврат ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами");

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

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

#Область Форма

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

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

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

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

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

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

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

#Область ПечатныеФормы

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

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

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

#Область ОбщиеМетодыПоХозяйственнымОперациям

#Область ОбработчикиДействий

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

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

#Область Форма

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

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

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

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

// см. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления.
//
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
	
	#Область Документы_СписаниеОтгруженныхТоваров_ОбработатьДанныеДляПереходаНаНовуюВерсию
	
	Обработчик = Обработчики.Добавить();
	Обработчик.Процедура = "Документы.СписаниеОтгруженныхТоваров.ОбработатьДанныеДляПереходаНаНовуюВерсию";
	Обработчик.Версия = "11.5.23.24";
	Обработчик.РежимВыполнения = "Отложенно";
	Обработчик.Порядок = Перечисления.ПорядокОбработчиковОбновления.Некритичный;
	Обработчик.Идентификатор = Новый УникальныйИдентификатор("37bce852-8ca1-440b-b8db-eead2c670d92");
	Обработчик.Многопоточный = Истина;
	Обработчик.ПроцедураЗаполненияДанныхОбновления = "Документы.СписаниеОтгруженныхТоваров.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
	Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
	
	СписокОписаний = Новый Массив;
	СписокОписаний.Добавить(НСтр("ru = 'Обновление документов ""Списание отгруженных товаров"":'"));
	СписокОписаний.Добавить(НСтр("ru = '- заполнение реквизита ""Статус указания серий, переданных товаров"" в табличной части ""Товары"".';"));
	
	Обработчик.Комментарий = СтрСоединить(СписокОписаний, Символы.ПС);
	
	Читаемые = Новый Массив;
	Читаемые.Добавить(Метаданные.Документы.СписаниеОтгруженныхТоваров.ПолноеИмя());
	Обработчик.ЧитаемыеОбъекты = СтрСоединить(Читаемые, ",");
	
	Изменяемые = Новый Массив;
	Изменяемые.Добавить(Метаданные.Документы.СписаниеОтгруженныхТоваров.ПолноеИмя());
	Обработчик.ИзменяемыеОбъекты = СтрСоединить(Изменяемые, ",");
	
	Блокируемые = Новый Массив;
	Блокируемые.Добавить(Метаданные.Документы.СписаниеОтгруженныхТоваров.ПолноеИмя());
	Обработчик.БлокируемыеОбъекты = СтрСоединить(Блокируемые, ",");
	
	#КонецОбласти
	
КонецПроцедуры

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

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

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

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

Функция ТекстЗапросаОстаткиКОформлениюПоГТД(ИмяВременнойТаблицыКОформлениюПоРаспоряжениям,
	ИмяВременнойТаблицы = "ВтДанныеУчета")

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

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

#КонецЕсли

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