Заказ на сборку (разборку) / Модуль менеджера

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ВариантыКомплектации

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

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

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

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

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

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

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

	Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "Статус,Проведен,ХозяйственнаяОперация");

	ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(Ссылка, Реквизиты.Статус, Не Реквизиты.Проведен);

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

	Запрос.Выполнить();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Возврат ПараметрыВстраивания;
	
КонецФункции

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

	Возврат ПараметрыВстраивания;
	
КонецФункции

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

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

Функция ЕстьСборкаПоЗаказу(ЗаказНаСборку) Экспорт

	УстановитьПривилегированныйРежим(Истина);

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

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

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

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

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

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

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

#Область ОтчетСостояниеВыполненияДокумента

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

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

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

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

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

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

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

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

#Область ОтменаНеотработанныхСтроки

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

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

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

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

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

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

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

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

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

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

#Область ВидДеятельностиНДС

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

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

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

#КонецЕсли

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