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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Возврат Новый Структура("ОбъектыОснований, РезультатПроверки", ОбъектыОснований, РезультатПроверки);
	
КонецФункции

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

#Область УчетНДС

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Функция ТекстЗапросаТаблицаЗаказыМатериаловВПроизводство(Запрос, ТекстыЗапроса, Регистры)

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

	ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
	
	Возврат ТекстЗапроса;

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

Функция ТекстЗапросаТаблицаЗаказыМатериаловСУчетомКорректировок(Запрос, ТекстыЗапроса, Регистры)

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ФормированиеГиперссылкиВЖурналеПроизводства

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

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

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

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

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

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

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

// см. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
	
	Обработчик = Обработчики.Добавить();
	Обработчик.Процедура = "Документы.ЗаказМатериаловВПроизводство.ОбработатьДанныеДляПереходаНаНовуюВерсию";
	Обработчик.Версия = "2.5.25.60";
	Обработчик.РежимВыполнения = "Отложенно";
	Обработчик.Идентификатор = Новый УникальныйИдентификатор("585b47aa-3f0e-4e83-8e9d-ebc62dd2e19c");
	Обработчик.Многопоточный = Истина;
	Обработчик.ПроцедураЗаполненияДанныхОбновления = "Документы.ЗаказМатериаловВПроизводство.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
	Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
	Обработчик.Комментарий = НСтр("ru = 'Заполняет реквизит ""Направление деятельности"" в документе ""Заказ материалов в производство"".'");
	
	ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика();
	Приоритет = ПриоритетыВыполнения.Добавить();
	Приоритет.Порядок = "До";
	Приоритет.Процедура = "РегистрыСведений.РеестрДокументов.ОбработатьДанныеДляПереходаНаНовуюВерсию";
	Обработчик.ПриоритетыВыполнения = ПриоритетыВыполнения;
	
	Читаемые = Новый Массив;
	Читаемые.Добавить(Метаданные.Документы.ЗаказМатериаловВПроизводство.ПолноеИмя());
	Читаемые.Добавить(Метаданные.Справочники.Назначения.ПолноеИмя());
	Обработчик.ЧитаемыеОбъекты = СтрСоединить(Читаемые, ",");
	
	Изменяемые = Новый Массив;
	Изменяемые.Добавить(Метаданные.Документы.ЗаказМатериаловВПроизводство.ПолноеИмя());
	Обработчик.ИзменяемыеОбъекты = СтрСоединить(Изменяемые, ",");
	
	Блокируемые = Новый Массив;
	Блокируемые.Добавить(Метаданные.Документы.ЗаказМатериаловВПроизводство.ПолноеИмя());
	Обработчик.БлокируемыеОбъекты = СтрСоединить(Блокируемые, ",");
	
КонецПроцедуры

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

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

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

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

#КонецЕсли

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