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

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

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

#Область ПолучениеДанныхИнформационнойБазы

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

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

	МетодПоСтатистике =
		Товар.МетодОбеспечения = ПредопределенноеЗначение("Перечисление.МетодыОбеспеченияПотребностей.ПоддержаниеЗапасаНаСрокПоСтатистике");

	УровеньЗапаса =
		?(Товар.Остаток - Товар.МинимальныйЗапас < 0,     1,      // критический
		?(Товар.Остаток - 2 * Товар.МинимальныйЗапас < 0, 2,      // близкий к критическому
		?(Товар.Остаток < Товар.МаксимальныйЗапас / 2,    4,      // меньше половины
		                                                  7)));

	УровеньЗапасаМаксимум =
		?(Товар.Остаток > Товар.МаксимальныйЗапас,      6,      // избыток
		?(Товар.Остаток >= Товар.МаксимальныйЗапас / 2, 5,      // больше половины
		                                                7));

	ТочкаЗаказаКартинка   = Товар.Остаток - Товар.МинимальныйЗапас < 0;
	КОтменеЗаказаКартинка = Товар.ЗаказыКпоступлению + Товар.Остаток - Товар.МинимальныйЗапас > Товар.МаксимальныйЗапас
		И Товар.ЗаказыКпоступлению > 0;

	КартинкаСменитьМетод =
		?(Товар.ПотреблениеСтабильно И Не МетодПоСтатистике,     0, // рекомендуется использовать статистику
		?(Не Товар.ПотреблениеСтабильно И МетодПоСтатистике,     1, // рекомендуется использовать мин-макс
		?(Товар.ПотреблениеСтабильно И МетодПоСтатистике,       -1, // метод соответствует рекомендации
		?(Не Товар.ПотреблениеСтабильно И Не МетодПоСтатистике, -1, // метод соответствует рекомендации
		                                                                                         -2)))); // нет рекомендации

	Результат = Новый Структура();
	Результат.Вставить("УровеньЗапаса", УровеньЗапаса);
	Результат.Вставить("УровеньЗапасаМаксимум", УровеньЗапасаМаксимум);
	Результат.Вставить("КартинкаСменитьМетод", КартинкаСменитьМетод);
	Результат.Вставить("ТочкаЗаказаКартинка", ТочкаЗаказаКартинка);
	Результат.Вставить("КОтменеЗаказаКартинка", КОтменеЗаказаКартинка);
	Возврат Результат;

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

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

	ДоТочкиЗаказа = Товар.Остаток - Товар.МинимальныйЗапас;
	
	ВосполнениеСтраховогоЗапаса = Мин(Товар.СтраховойЗапас, Макс(0, -ДоТочкиЗаказа));
	КЗаказу = Макс(0, Товар.МаксимальныйЗапас - Товар.СтраховойЗапас - Товар.ЗаказыКпоступлению - Макс(0, ДоТочкиЗаказа) + ВосполнениеСтраховогоЗапаса)
		+ Макс(0, Мин(Товар.РезервыНаСкладе, -Товар.Остаток));
	
	ДатаЗаказаНаступила = Товар.КЗаказуТовары = 1;
	ТочкаЗаказаНаступила = ДоТочкиЗаказа <= 0;
	Отметка = Товар.КЗаказуТовары <> 2 И (ДатаЗаказаНаступила Или ТочкаЗаказаНаступила) И КЗаказу > 0;
	
	Результат = Новый Структура();
	Результат.Вставить("КЗаказу",              КЗаказу);
	Результат.Вставить("Отметка",              Отметка);
	Результат.Вставить("ДатаЗаказаНаступила",  ДатаЗаказаНаступила);
	Результат.Вставить("ТочкаЗаказаНаступила", ТочкаЗаказаНаступила);
	Результат.Вставить("ДоТочкиЗаказа",        ДоТочкиЗаказа);

	Возврат Результат;

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

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

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

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

#Область СтруктурыДанных

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

	Поля = Новый Структура();

	Если СтрНайти(Секции, "СвойстваПотребности") Тогда

		Поля.Вставить("Номенклатура",             Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
		Поля.Вставить("Характеристика",           Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
		Поля.Вставить("Склад",                    Новый ОписаниеТипов("СправочникСсылка.Склады"));
		Поля.Вставить("ПодразделениеПолучатель",  Новый ОписаниеТипов("СправочникСсылка.СтруктураПредприятия"));
		Поля.Вставить("Назначение",               Новый ОписаниеТипов("СправочникСсылка.Назначения"));

	КонецЕсли;

	Если СтрНайти(Секции, "РеквизитыЗаказаКОбеспечению") Тогда

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

	КонецЕсли;

	Если СтрНайти(Секции, "РеквизитыОбеспечивающегоЗаказа") Тогда

		Поля.Вставить("ТипОбеспечения",      Новый ОписаниеТипов("ПеречислениеСсылка.ТипыОбеспечения"));
		Поля.Вставить("ИсточникОбеспечения", Новый ОписаниеТипов("СправочникСсылка.Склады, СправочникСсылка.Партнеры, СправочникСсылка.СтруктураПредприятия"));
		Поля.Вставить("Соглашение",          Новый ОписаниеТипов("СправочникСсылка.СоглашенияСПоставщиками"));
		Поля.Вставить("СпособОбеспечения",   Новый ОписаниеТипов("СправочникСсылка.СпособыОбеспеченияПотребностей"));
		Поля.Вставить("ВидЦены",             Новый ОписаниеТипов("СправочникСсылка.ВидыЦенПоставщиков"));
		Поля.Вставить("ДатаПоставки",        ОбщегоНазначенияУТ.ПолучитьОписаниеТиповДаты(ЧастиДаты.Дата));
		Поля.Вставить("КЗаказу",             ОбщегоНазначенияУТ.ПолучитьОписаниеТиповЧисла(15, 3));

	КонецЕсли;

	Возврат Поля;

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

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

	Поля = Новый Структура();

	Если СтрНайти(Секции, "СвойстваПотребности") Тогда

		Поля.Вставить("Номенклатура",   Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
		Поля.Вставить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
		Поля.Вставить("Склад",          Новый ОписаниеТипов("СправочникСсылка.Склады"));

	КонецЕсли;

	Если СтрНайти(Секции, "РеквизитыОбеспечивающегоЗаказа") Тогда

		Поля.Вставить("ТипОбеспечения",      Новый ОписаниеТипов("ПеречислениеСсылка.ТипыОбеспечения"));
		Поля.Вставить("ИсточникОбеспечения", Новый ОписаниеТипов("СправочникСсылка.Склады, СправочникСсылка.Партнеры, СправочникСсылка.СтруктураПредприятия"));
		Поля.Вставить("Соглашение",          Новый ОписаниеТипов("СправочникСсылка.СоглашенияСПоставщиками"));
		Поля.Вставить("СпособОбеспечения",   Новый ОписаниеТипов("СправочникСсылка.СпособыОбеспеченияПотребностей"));
		Поля.Вставить("ВидЦены",             Новый ОписаниеТипов("СправочникСсылка.ВидыЦенПоставщиков"));
		Поля.Вставить("ДатаПоставки",        ОбщегоНазначенияУТ.ПолучитьОписаниеТиповДаты(ЧастиДаты.Дата));
		Поля.Вставить("КЗаказу",             ОбщегоНазначенияУТ.ПолучитьОписаниеТиповЧисла(15, 3));

	КонецЕсли;

	Возврат Поля;

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

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

	ДокументОбъект = МенеджерДокументов.СоздатьДокумент();
	
	ДанныеЗаполнения.Вставить("Дата", ТекущаяДатаСеанса());
	ДанныеЗаполнения.Вставить("Статус", Статус);

	ДокументОбъект.Заполнить(ДанныеЗаполнения);

	ЗаписатьДокумент(ДокументОбъект, СообщенияОбОшибках);

	Возврат ДокументОбъект;

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

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

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

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

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

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

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

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

Процедура СформироватьДеревоЗаказов(Параметры, АдресРезультата) Экспорт
	
	ДеревоЗаказов = Параметры.ДеревоЗаказов;
	
	// Склеить две таблицы в одну и сгруппировать
	КвалификаторыЧисла = Новый КвалификаторыЧисла(15, 3, ДопустимыйЗнак.Неотрицательный);
	
	ОписаниеБулева = Новый ОписаниеТипов("Булево");
	Параметры.Запасы.Колонки.Добавить("ЭтоРабота", ОписаниеБулева);
	

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

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

#Область ФормированиеЗаказов

// Создает заказы в информационной базе по имеющейся таблице заказов, зафиксированных пользователем.
//
Процедура СформироватьЗаказы(Параметры, АдресРезультата) Экспорт

	ДокументыОбъекты = Новый Массив();
	ТекстКомментарий = НСтр("ru = 'Сформирован автоматически обработкой ""Формирование заказов по потребностям"".'");

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

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

Функция ВременнаяТаблицаИзТаблицыКЗаказу()

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

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

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

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

Функция ТаблицаЗаказыПоставщикуКОформлению()

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

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

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

Функция ТаблицаЗаказыНаПеремещениеКОформлению()

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

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

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

Функция ТаблицаЗаказыНаСборкуКОформлению()

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

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

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



Процедура ОкруглитьПередСозданиемЗаказов(Таблица)
	
	Таблица.Сортировать("Номенклатура, Характеристика, Склад, ДатаПоставки, Назначение УБЫВ", Новый СравнениеЗначений());
	
	ПоляКлюча = "Номенклатура, Характеристика, Склад";
	Ключ = Новый Структура(ПоляКлюча);
	
	Остаток = 0;
	ОкругленнаяСтрока = Неопределено;
	Для ИндексСтроки = 0 По Таблица.Количество() - 1 Цикл
		
		Строка = Таблица[ИндексСтроки];
		
		Если Не Строка.Отметка 
			Или Строка.КЗаказу = 0
			Или Строка.НеОкруглятьПередСозданиемЗаказа Тогда
			Продолжить;
		КонецЕсли;
		
		ИзменилсяКлюч = ОбеспечениеСервер.ИзменилсяКлюч(Ключ, Строка);
		ЗаполнитьЗначенияСвойств(Ключ, Строка);
		
		Если ИзменилсяКлюч Тогда
			
			Если Остаток > 0 Тогда
				НоваяСтрока = Таблица.Добавить();
				ЗаполнитьЗначенияСвойств(НоваяСтрока, ОкругленнаяСтрока);
				НоваяСтрока.КЗаказу = Остаток;
				НоваяСтрока.Назначение = Справочники.Назначения.ПустаяСсылка();
				НоваяСтрока.ЭтоОкругление = Истина;
				НоваяСтрока.НазначениеОкругленнойСтроки = ОкругленнаяСтрока.Назначение;
			КонецЕсли;
			
			Округлено = Округлить(Строка.КЗаказу, ?(Строка.ЧислительУпаковки = 0 Или Строка.ЗнаменательУпаковки = 0, 1, Строка.ЧислительУпаковки / Строка.ЗнаменательУпаковки),
				Строка.ТипЕдиницыИзмерения);
			
			Кратность = ?(Строка.ЧислительУпаковки = 0 Или Строка.ЗнаменательУпаковки = 0, 1, Строка.ЧислительУпаковки / Строка.ЗнаменательУпаковки);
			МинимальнаяПартияПоставки = Строка.МинимальнаяПартияПоставки * Кратность;
			
			Округлено = Макс(МинимальнаяПартияПоставки, Округлено);
			
			Остаток = Округлено - Строка.КЗаказу;
			ОкругленнаяСтрока = Строка;
			
		Иначе
			
			Если Остаток >= Строка.КЗаказу Тогда
				Строка.ДатаПоставки = ОкругленнаяСтрока.ДатаПоставки;
				Остаток = Остаток - Строка.КЗаказу;
			Иначе
				
				Если Остаток > 0 Тогда
					
					КЗаказуДляНовойОкругленнойСтроки = Строка.КЗаказу - Остаток;
					
					// Частично относим на дату округленной строки, новой строкой
					НоваяСтрока = Таблица.Добавить();
					ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
					НоваяСтрока.КЗаказу = Остаток;
					НоваяСтрока.ДатаПоставки = ОкругленнаяСтрока.ДатаПоставки;
					
					// Частично оставляем на дату текущей строки
					Строка.КЗаказу = КЗаказуДляНовойОкругленнойСтроки;
					
				КонецЕсли;
				
				Округлено = Округлить(Строка.КЗаказу, ?(Строка.ЧислительУпаковки = 0 Или Строка.ЗнаменательУпаковки = 0, 1, Строка.ЧислительУпаковки / Строка.ЗнаменательУпаковки),
					Строка.ТипЕдиницыИзмерения);
				Остаток = Округлено - Строка.КЗаказу;
				ОкругленнаяСтрока = Строка;
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЦикла;
	
	Если Остаток > 0 Тогда
		НоваяСтрока = Таблица.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, ОкругленнаяСтрока);
		НоваяСтрока.КЗаказу = Остаток;
		НоваяСтрока.Назначение = Справочники.Назначения.ПустаяСсылка();
		НоваяСтрока.ЭтоОкругление = Истина;
		НоваяСтрока.НазначениеОкругленнойСтроки = ОкругленнаяСтрока.Назначение;
	КонецЕсли;
	
КонецПроцедуры

Функция Округлить(Количество, Кратность, ТипЕдиницыИзмерения)
	
	Если Кратность <> 1
		Или ТипЕдиницыИзмерения = ПредопределенноеЗначение("Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук") Тогда
		Если Количество % Кратность <> 0 Тогда
			Остаток = Цел(Количество / Кратность) + 1;
			Возврат Остаток * Кратность;
		Иначе
			Возврат Количество;
		КонецЕсли;
	Иначе 
		Возврат Количество;
	КонецЕсли;
	
КонецФункции

Функция ПолучитьЗначенияРеквизитовДокумента(ДокументОбъект)

	ЗначенияРеквизитов = Новый Структура();
	
	ЗначенияРеквизитов.Вставить("Документ",            ДокументОбъект.Ссылка);
	ЗначенияРеквизитов.Вставить("СтандартнаяКартинка", ?(ДокументОбъект.Проведен, 0, ?(ДокументОбъект.ПометкаУдаления, 1, 2)));

	ЗаказНеПодтвержден = ?(ТипЗнч(ДокументОбъект) <> Тип("ДокументОбъект.ЗаказПоставщику")
		Или ДокументОбъект.Статус = Перечисления.СтатусыЗаказовПоставщикам.Подтвержден
		Или ДокументОбъект.Статус = Перечисления.СтатусыЗаказовПоставщикам.Закрыт, ?(ДокументОбъект.Проведен, 0, 1), 1);

	ЗаказНаПроизводствоНеКПроизводству = 0;

	ЗначенияРеквизитов.Вставить("НеПоставленВГрафик",  ЗаказНеПодтвержден);
	ЗначенияРеквизитов.Вставить("НеПоставленВГрафикПроизводства", ЗаказНаПроизводствоНеКПроизводству);

	ЗначенияРеквизитов.Вставить("Статус",              ДокументОбъект.Статус);
	ЗначенияРеквизитов.Вставить("Организация",         ДокументОбъект.Организация);
	
	ДатаПоставки = '00010101';
	ИмяТабЧасти = "";
	
	Если ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.ЗаказНаСборку") Тогда
		
		ЗначенияРеквизитов.Вставить("ИсточникОбеспечения", ДокументОбъект.Склад);
		ДатаПоставки = ДокументОбъект.ОкончаниеСборкиРазборки;
		
	ИначеЕсли ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.ЗаказНаПеремещение") Тогда
		
		ЗначенияРеквизитов.Вставить("ИсточникОбеспечения", ДокументОбъект.СкладОтправитель);
		ИмяТабЧасти = "Товары";
		ИмяРеквизитаДатыПоставки = "ОкончаниеПоступления";
		
	ИначеЕсли ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.ЗаказПоставщику") Тогда
		
		ЗначенияРеквизитов.Вставить("ИсточникОбеспечения", ДокументОбъект.Партнер);
		ЗначенияРеквизитов.Вставить("Сумма",               ДокументОбъект.СуммаДокумента);
		ЗначенияРеквизитов.Вставить("Валюта",              ДокументОбъект.Валюта);
		ИмяТабЧасти = "Товары";
		ИмяРеквизитаДатыПоставки = "ДатаПоступления";
	КонецЕсли;
	
	Если ИмяТабЧасти <> "" Тогда
		
		Для каждого Строка Из ДокументОбъект[ИмяТабЧасти] Цикл
			
			Если ДатаПоставки <> Строка[ИмяРеквизитаДатыПоставки] Тогда
				
				Если ДатаПоставки <> '00010101' Тогда
					
					// Если в документе более одной строки и разные даты поставок, то дату поставки не заполняем.
					ДатаПоставки = '00010101';
					Прервать;
					
				КонецЕсли;
				
				ДатаПоставки = Строка[ИмяРеквизитаДатыПоставки];
				
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЕсли;
	ЗначенияРеквизитов.Вставить("ДатаПоставки", ДатаПоставки);
	
	Возврат ЗначенияРеквизитов;
	
КонецФункции

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

Процедура ДобавитьДокументВРезультат(Документ, Результат, ИспользованиеСтатусов)
	
	НоваяСтрока = Результат.ТаблицаДокументов.Добавить();
	
	НовыеЗначенияРеквизитов = ПолучитьЗначенияРеквизитовДокумента(Документ);
	ЗаполнитьЗначенияСвойств(НоваяСтрока, НовыеЗначенияРеквизитов);
	НоваяСтрока.ИспользованиеСтатусов = ИспользованиеСтатусов[ТипЗнч(НоваяСтрока.Документ)];
	
	Ошибки = ПолучитьСообщенияПользователю(Истина);
	Для Каждого Ошибка Из Ошибки Цикл
		Ошибка.КлючДанных = Документ.Ссылка;
		Результат.СписокСообщений.Добавить(Ошибка);
	КонецЦикла;
	
КонецПроцедуры

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

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

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

	Запрос = Новый Запрос(МакетКомпоновкиДанных.НаборыДанных[ИмяНабораДанных].Запрос);

	Для каждого ПараметрКомпоновки Из МакетКомпоновкиДанных.ЗначенияПараметров Цикл

		Запрос.УстановитьПараметр(ПараметрКомпоновки.Имя, ПараметрКомпоновки.Значение);

	КонецЦикла;
	ИспользоватьХарактеристикиНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры");
	Запрос.УстановитьПараметр("ИспользоватьХарактеристикиНоменклатуры", ИспользоватьХарактеристикиНоменклатуры);
	Возврат Запрос;

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

Функция ВременнаяТаблицаТоваровДляПоддержанияЗапаса()

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

	ТекстЗапроса = РегистрыСведений.СхемыОбеспечения.ПодставитьСоединениеДляПолученияСпособаОбеспечения(
		ТекстЗапроса, "ПодстановкаОсновногоСпособаОбеспечения");
	
	Возврат ТекстЗапроса;

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

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

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

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

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

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

	ЕстьОграниченияВременный = Истина;
	ЕстьОграничения = ЕстьОграничения Или ЕстьОграниченияВременный;
	
	ЕстьОграниченияВременный = Истина;
	ЕстьОграничения = ЕстьОграничения Или ЕстьОграниченияВременный;
	
	Если ЕстьОграничения Тогда
		Возврат Результат;
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	
КонецФункции

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

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

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

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

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

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

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

Процедура ЗаписатьДокумент(ДокументОбъект, СообщенияОбОшибках)

	ОшибокНеОбнаружено = ДокументОбъект.ПроверитьЗаполнение();

	Если Не ОшибокНеОбнаружено Тогда

		ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);

	Иначе //нет ошибок, проводим документ

		Попытка

			ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);

		Исключение

			ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
			ИмяГруппыСобытий = НСтр("ru = 'Обеспечение потребностей'", ОбщегоНазначения.КодОсновногоЯзыка());
			ИмяСобытияВГруппе = НСтр("ru = 'Создание заказов'", ОбщегоНазначения.КодОсновногоЯзыка());
			ИмяСобытияЖурнала = ИмяГруппыСобытий + "." + ИмяСобытияВГруппе;
			ЗаписьЖурналаРегистрации(ИмяСобытияЖурнала, УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));

		КонецПопытки;

	КонецЕсли;

	Ошибки = ПолучитьСообщенияПользователю(Истина);
	Для Каждого Ошибка Из Ошибки Цикл

		Ошибка.КлючДанных = ДокументОбъект.Ссылка;
		СообщенияОбОшибках.Добавить(Ошибка);

	КонецЦикла;

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


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

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

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

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

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

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

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

		//

		|		
		|		ЛЕВОЕ СОЕДИНЕНИЕ ТопологияСкладов КАК Топология
		|		ПО Топология.Номенклатура   =  ВсеТовары.Номенклатура
		|		 И Топология.Характеристика =  ВсеТовары.Характеристика
		|		 И Топология.Склад          =  ВсеТовары.Склад
		|		
		|		ЛЕВОЕ СОЕДИНЕНИЕ ТопологияСкладов КАК СкладыСети
		|		ПО СкладыСети.Номенклатура   =  Топология.Номенклатура
		|		 И СкладыСети.Характеристика =  Топология.Характеристика
		|		 И СкладыСети.Центр          =  Топология.Центр
		|		 И СкладыСети.Склад = (
		|			ВЫБОР
		|				КОГДА ЗаказыНаПеремещение.СкладПолучатель ЕСТЬ НЕ NULL ТОГДА ЗаказыНаПеремещение.СкладПолучатель

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

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

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

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

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

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

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

#КонецЕсли

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