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

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

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

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

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

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

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

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

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

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

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

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

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

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

		Возврат КомандаСоздатьНаОсновании;
	КонецЕсли;

	Возврат Неопределено;
КонецФункции

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

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

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

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

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

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

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

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

//++ НЕ УТ

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

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

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

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

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

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

//-- НЕ УТ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "АктОбОприходованииТоваров") Тогда

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

	КонецЕсли;
	ОприходованиеИзлишковТоваровЛокализация.Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
КонецПроцедуры

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

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

	Если ВыводитьДопКолонку Тогда
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИмяКолонкиКодов", "ТаблицаТовары.Номенклатура." +ИмяКолонкиКодов);
	Иначе
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИмяКолонкиКодов КАК ДопКолонка,", "");
	КонецЕсли;

	РеквизитыДокумента = Новый Структура("Номер, Дата, Префикс, НомерИсправляемогоДокумента, ДатаИсправляемогоДокумента");
	СинонимДокумента = НСтр("ru='Акт об оприходовании товаров'", ОбщегоНазначения.КодОсновногоЯзыка());

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

	ОбластьНомераШапка = Макет.ПолучитьОбласть("ШапкаТаблицы|НомерСтроки");
	ОбластьКодовШапка  = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов");
	ОбластьТоварШапка  = Макет.ПолучитьОбласть("ШапкаТаблицы|Товар");
	ОбластьДанныеШапка = Макет.ПолучитьОбласть("ШапкаТаблицы|Данные");

	Если Не ВыводитьДопКолонку Тогда

		Макет.Область("Товар").ШиринаКолонки = Макет.Область("Товар").ШиринаКолонки
				+ Макет.Область("КолонкаКодов").ШиринаКолонки;

	КонецЕсли;

	ОбластьНомераСтрока = Макет.ПолучитьОбласть("Строка|НомерСтроки");
	ОбластьКодовСтрока  = Макет.ПолучитьОбласть("Строка|КолонкаКодов");
	ОбластьТоварСтрока  = Макет.ПолучитьОбласть("Строка|Товар");
	ОбластьДанныхСтрока = Макет.ПолучитьОбласть("Строка|Данные");

	ОбластьНомераПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы|НомерСтроки");
	ОбластьКодовПодвалТаблицы  = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаКодов");
	ОбластьТоварПодвалТаблицы  = Макет.ПолучитьОбласть("ПодвалТаблицы|Товар");
	ОбластьДанныхПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы|Данные");

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

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

		// Вывод шапки.
		ТабДокумент.Вывести(ОбластьНомераШапка);

		Если ВыводитьДопКолонку Тогда

			ОбластьКодовШапка.Параметры.ДопКолонка = ПредставлениеКолонкиКодов;
			ТабДокумент.Присоединить(ОбластьКодовШапка);

		КонецЕсли;
		ТабДокумент.Присоединить(ОбластьТоварШапка);

		ТабДокумент.Присоединить(ОбластьДанныеШапка);

		СуммаВсего = 0;
		ВсегоНаименований = 0;

		// Вывод строк.
		ВыборкаПоТабличнымЧастям.НайтиСледующий(Новый Структура("Ссылка",ВыборкаДокументы.Ссылка));
		
		ВыборкаПоСтрокам = ВыборкаПоТабличнымЧастям.Выбрать();
		
		Пока ВыборкаПоСтрокам.Следующий() Цикл

			ОбластьНомераСтрока.Параметры.Заполнить(ВыборкаПоСтрокам);
			ТабДокумент.Вывести(ОбластьНомераСтрока);

			Если ВыводитьДопКолонку Тогда

				ОбластьКодовСтрока.Параметры.Заполнить(ВыборкаПоСтрокам);
				ТабДокумент.Присоединить(ОбластьКодовСтрока);

			КонецЕсли;

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

			СуммаВсего = СуммаВсего + ВыборкаПоСтрокам.Сумма;
			ВсегоНаименований = ВсегоНаименований + 1;

		КонецЦикла;

		// Вывод подвала.
		ТабДокумент.Вывести(ОбластьНомераПодвалТаблицы);
		Если ВыводитьДопКолонку Тогда
			ТабДокумент.Присоединить(ОбластьКодовПодвалТаблицы);
		КонецЕсли;
		ТабДокумент.Присоединить(ОбластьТоварПодвалТаблицы);
		ТабДокумент.Присоединить(ОбластьДанныхПодвалТаблицы);

		// Вывод Суммы прописью.
		ОбластьСуммаПрописью.Параметры.СуммаПрописью = РаботаСКурсамиВалютУТ.СформироватьСуммуПрописью(СуммаВсего, ВыборкаДокументы.Валюта);
		
		ТекстИтоговойСтроки = НСтр("ru = 'Всего наименований %ВсегоНаименований%, на сумму %СуммаВсего% %Валюта%'", ОбщегоНазначения.КодОсновногоЯзыка());
		
		ТекстИтоговойСтроки = СтрЗаменить(ТекстИтоговойСтроки,"%ВсегоНаименований%", ВсегоНаименований);
		ТекстИтоговойСтроки = СтрЗаменить(ТекстИтоговойСтроки,"%СуммаВсего%", Формат(СуммаВсего, "ЧДЦ=2"));
		ТекстИтоговойСтроки = СтрЗаменить(ТекстИтоговойСтроки,"%Валюта%", Строка(ВыборкаДокументы.Валюта));
		
		ОбластьСуммаПрописью.Параметры.ИтоговаяСтрока = ТекстИтоговойСтроки;

		ТабДокумент.Вывести(ОбластьСуммаПрописью);

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

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

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

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

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

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

#Область Обработчики_11_4_1

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

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

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

#КонецЕсли

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