Внутреннее потребление / Модуль менеджера

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область СменаСтатуса

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ЗаполнениеДокументаПоЗаказамОрдерам

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

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


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

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

#КонецЕсли

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

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

Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
	
	Если ПолучитьФункциональнуюОпцию("БазоваяВерсия") Тогда

		СтандартнаяОбработка = Ложь;
		Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Списание товаров на хознужды %1 от %2'"),
			Данные.Номер,
			Данные.Дата);
		
	КонецЕсли;
	
КонецПроцедуры

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

		Выборка = Запрос.Выполнить().Выбрать();
		Пока Выборка.Следующий() Цикл
			
			ТекстЗначения = СокрЛП(Выборка.Номер) + " (" + Выборка.Дата + ")";
			
			ЗначениеСписка = Новый Структура;
			ЗначениеСписка.Вставить("Значение", Выборка.Ссылка);
			ЗначениеСписка.Вставить("ПометкаУдаления", Выборка.ПометкаУдаления);
		
			ДанныеВыбора.Добавить(ЗначениеСписка, ТекстЗначения);
			
		КонецЦикла; 	
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

Функция ПолноеИмяОбъекта()
	Возврат "Документ.ВнутреннееПотребление";
КонецФункции

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

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

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

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

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

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

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

Функция ЗначенияПараметровПроведения(Реквизиты = Неопределено)

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

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

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

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

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

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

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

	Возврат ТекстЗапроса;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Результат = ОбновлениеИнформационнойБазыУТ.РезультатАдаптацииЗапроса();
	Результат.ЗначенияПараметров = ЗначенияПараметров;
	Результат.ТекстЗапроса = ТекстЗапроса;
	
	Возврат Результат;

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

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


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

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

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

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

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

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

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

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

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

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

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

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

Процедура ОбработатьДокументПослеДобавленияСтрок(Объект) Экспорт

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


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

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

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

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

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

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

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

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

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

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

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

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

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

	КонецЦикла;
	
	Возврат ТабДокумент;

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

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

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

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

#Область ЗаполнениеДокумента

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

#КонецЕсли

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