Заказ на внутреннее потребление / Модуль менеджера

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

#Область РасчетСостояний

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Функция ТекстЗапросаТоварыДокумента() Экспорт

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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