Формирование заказов на передачу в производство по планам / Форма / Модуль формы

файл

#Область ОписаниеПеременных

&НаКлиенте
Перем КэшированныеЗначения; //используется механизмом обработки изменения реквизитов ТЧ

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	УстановитьУсловноеОформление();
	
	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	УстановитьЗаголовокФормы(Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница);
КонецПроцедуры

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

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

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

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

&НаКлиенте
Процедура РежимРасчетаПотребностейПоПлануПриИзменении(Элемент)
	
	РежимРасчетаПотребностейПоПлануПриИзмененииНаСервере();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПериодНачалоПриИзменении(Элемент)
	
	ПривестиДатыКПериодичностиСценария(ЭтотОбъект, Объект.ПериодНачало, Объект.ПериодОкончание);
	
КонецПроцедуры

&НаКлиенте
Процедура ПериодОкончаниеПриИзменении(Элемент)
	
	ПривестиДатыКПериодичностиСценария(ЭтотОбъект, Объект.ПериодНачало, Объект.ПериодОкончание);
	
КонецПроцедуры


&НаКлиенте
Процедура ОтборПодразделенияПриИзменении(Элемент)
	
	НастройкиВидимостиПриИзмененииОтбораПоПодраздлелениюНаСервере(ЭтаФорма); 
	
КонецПроцедуры

&НаКлиенте
Процедура ПодразделениеПриИзменении(Элемент)
	
	НастройкиВидимостиПриИзмененииОтбораПоПодраздлелениюНаСервере(ЭтаФорма); 
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыФормированиеЗаказов

&НаКлиенте
Процедура ФормированиеЗаказовПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
	
	Отказ = Истина;
	
КонецПроцедуры

&НаКлиенте
Процедура ФормированиеЗаказовПередУдалением(Элемент, Отказ)
	
	Отказ = Истина;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ФормированиеЗаказовКоличествоВЗаказахНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

&НаКлиенте
Процедура ФормированиеЗаказовКоличествоВЗаказахОчистка(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

&НаКлиенте
Процедура ФормированиеЗаказовКоличествоВПланахНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

&НаКлиенте
Процедура ФормированиеЗаказовКоличествоВПланахОчистка(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ФормированиеЗаказовОтметитьКЗаказуПриИзменении(Элемент)
	
	Если ОтображатьЗаказыКОформлению Тогда
		ОбновитьКорзинуЗаказов();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ФормированиеЗаказовСкладПриИзменении(Элемент)
	
	Если ОтображатьЗаказыКОформлению Тогда
		ОбновитьКорзинуЗаказов();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ФормированиеЗаказовЦеховаяКладоваяПриИзменении(Элемент)
	Если ОтображатьЗаказыКОформлению Тогда
		ОбновитьКорзинуЗаказов();
	КонецЕсли;
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыКорзинаЗаказов

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

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

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

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

#Область ОбработчикиКоманд

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

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

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

&НаКлиенте
Процедура ОткрытьСписокЗаказов(Команда)
	
	ОткрытьФорму("Документ.ЗаказМатериаловВПроизводство.ФормаСписка"); 
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
	
КонецПроцедуры

#Область КомандыТаблицыФормыФормированиеЗаказов

&НаКлиенте
Процедура ОтображатьЗаказыКОформлению(Команда)
	
	ОтображатьЗаказыКОформлениюНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура СнятьФлажки(Команда)
	
	ПереключитьФлажки(Ложь);
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьФлажки(Команда)
	
	ПереключитьФлажки(Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьСклад(Команда)
	
	Если Элементы.ФормированиеЗаказов.ВыделенныеСтроки.Количество() = 0 Тогда
		ПоказатьПредупреждение(, НСтр("ru = 'Выделите строки в списке.'"));
		Возврат;
	КонецЕсли;
	
	СтрокаТаблицы = Объект.ФормированиеЗаказов.НайтиПоИдентификатору(Элементы.ФормированиеЗаказов.ВыделенныеСтроки[0]);
	Склад = Неопределено;
	
	ПараметрыФормыВыбора = Новый Структура;
	ПараметрыФормыВыбора.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.Элементы);
	ПараметрыФормыВыбора.Вставить("Ключ", СтрокаТаблицы.Склад);
	
	Оповещение = Новый ОписаниеОповещения(
		"ЗаполнитьСкладЗавершение",
		ЭтотОбъект, 
		Новый Структура("СтрокаТаблицы", СтрокаТаблицы));
	ОткрытьФорму(
		"Справочник.Склады.ФормаВыбора",
		ПараметрыФормыВыбора,
		,
		,
		,
		,
		Оповещение,
		РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

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

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

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

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

#Область КомандыПошаговогоМастера

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

&НаКлиенте
Процедура Назад(Команда)
	
	Если Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаШаг3 Тогда
		
		Если СформированныеЗаказы.Количество() > 0 Тогда
			
			Кнопки = Новый СписокЗначений;
			Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Пометить документы на удаление'"));
			Кнопки.Добавить(КодВозвратаДиалога.Отмена);
			
			ПоказатьВопрос
				(Новый ОписаниеОповещения("НазадЗавершение", ЭтотОбъект), 
				НСтр("ru = 'Список созданных заказов не пуст. Сформированные документы будут помечены на удаление. Пометить на удаление заказы и продолжить?'"),
				Кнопки);
			Возврат;
		КонецЕсли;
		
		ОчиститьСообщения();
		Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаШаг2;
		
	ИначеЕсли Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаШаг2 Тогда
		
		КорзинаЗаказов.Очистить();
		Объект.ФормированиеЗаказов.Очистить();
		Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаШаг1;
		
	КонецЕсли;
	
	УстановитьЗаголовокФормы(Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница);
	УстановитьВидимостьКнопокКоманднойПанели(Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ЗавершитьФормированиеЗаказов(Команда)
	
	КорзинаЗаказов.Очистить();
	ОчиститьСообщения();
	Объект.ФормированиеЗаказов.Очистить();
	СформированныеЗаказы.Очистить();
	
	Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница = Элементы.СтраницаШаг1;
	УстановитьЗаголовокФормы(Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница);
	УстановитьВидимостьКнопокКоманднойПанели(Элементы.СтраницыОсновнаяПанель.ТекущаяСтраница);
	
КонецПроцедуры

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

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

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

#Область НастройкиОтображенияФормы

&НаСервере
Процедура УстановитьУсловноеОформление()

	УсловноеОформление.Элементы.Очистить();

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ФормированиеЗаказовСклад.Имя);

	ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
	
	ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ФормированиеЗаказов.ОтметитьКЗаказу");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Ложь;
	
	ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ФормированиеЗаказов.КоличествоУпаковок");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = 0;
	
	ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьУправлениеПроизводством2_2");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;

	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
	
	
	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ФормированиеЗаказовСклад.Имя);
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ФормированиеЗаказовЦеховаяКладовая.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ФормированиеЗаказов.Склад");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ФормированиеЗаказов.ЦеховаяКладовая");

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ПолеСОшибкойФон);
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьЗаголовокФормы(Страница)
	
	Если Страница = Элементы.СтраницаШаг1 Тогда
		
		Элементы.ПодЗаголовок.Заголовок = НСтр("ru = 'Шаг 1 из 3. Отбор планов'");
		
	ИначеЕсли Страница = Элементы.СтраницаШаг2 Тогда
		
		Элементы.ПодЗаголовок.Заголовок = НСтр("ru = 'Шаг 2 из 3. Определение состава и объема заказа'");
		
	ИначеЕсли Страница = Элементы.СтраницаШаг3 Тогда
		
		Элементы.ПодЗаголовок.Заголовок = НСтр("ru = 'Шаг 3 из 3. Уточнение сформированных заказов'");
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьВидимостьЭлементовФормы()
	
	Элементы.ФормаОтображатьЗаказыКОформлению.Пометка = ОтображатьЗаказыКОформлению;
	Элементы.ГруппаЗаказыКОформлению.Видимость        = ОтображатьЗаказыКОформлению;
	
	Элементы.ФормированиеЗаказовПеренестиРаспределить.Видимость = Периодичность <> Перечисления.Периодичность.День;
	Элементы.ФормированиеЗаказовКонтекстноеМенюПеренестиРаспределить.Видимость = Периодичность <> Перечисления.Периодичность.День;
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьВидимостьКнопокКоманднойПанели(ТекущаяСтраница)
	
	Если ТекущаяСтраница = Элементы.СтраницаШаг1 Тогда
				
		Элементы.СтраницыКомандыНиз.ТекущаяСтраница  = Элементы.СтраницаКомандыНизШаг1;
		Элементы.ДалееШаг1.КнопкаПоУмолчанию = Истина;
		
	ИначеЕсли ТекущаяСтраница = Элементы.СтраницаШаг2 Тогда
		
		Элементы.СтраницыКомандыНиз.ТекущаяСтраница  = Элементы.СтраницаКомандыНизШаг2;
		Элементы.ДалееШаг2.КнопкаПоУмолчанию = Истина;
		
	ИначеЕсли ТекущаяСтраница = Элементы.СтраницаШаг3 Тогда
		
		Элементы.СтраницыКомандыНиз.ТекущаяСтраница  = Элементы.СтраницаКомандыНизШаг3;
		Элементы.ЗавершитьФормированиеЗаказовШаг3.КнопкаПоУмолчанию = Истина;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура НастройкиВидимостиПриИзмененииОтбораПоПодраздлелениюНаСервере(Форма)
	
	Форма.Элементы.ФормированиеЗаказовПодразделениеИсполнитель.Видимость = Не Форма.ОтборПодразделения;
	Форма.Элементы.КорзинаЗаказовПодразделениеИсполнитель.Видимость = Не Форма.ОтборПодразделения;
	
	Форма.Элементы.ФормированиеЗаказовЦеховаяКладовая.Видимость = Форма.ИспользоватьУправлениеПроизводством2_2;
	Форма.Элементы.ФормаЗаполнитьЦеховаяКладовая.Видимость = Форма.ИспользоватьУправлениеПроизводством2_2;
	Форма.Элементы.КорзинаЗаказовЦеховаяКладовая.Видимость = Форма.ИспользоватьУправлениеПроизводством2_2;
	
	Форма.Элементы.Подразделение.Доступность = Форма.ОтборПодразделения;
	
КонецПроцедуры

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

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

#Область ПроцедурыРаботыСНастройкамиПользователя

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

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

&НаСервереБезКонтекста
Процедура СохранитьНастройкиНаСервере(Настройки)
	
	КлючОбъекта = "Обработка.ФормированиеЗаказовНаПередачуВПроизводствоПоПлану";
	ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(КлючОбъекта, "Настройки", Настройки);
	
КонецПроцедуры

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

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

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

#Область ПроцедурыОбработчикиКомандЗавершение

&НаКлиенте
Процедура УстановитьИнтервалПериодаЗавершение(Результат, ДополнительныеПараметры) Экспорт 
	
	ПривестиДатыКПериодичностиСценария(ЭтотОбъект, Объект.ПериодНачало, Объект.ПериодОкончание);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
	
	Если РезультатВопроса = КодВозвратаДиалога.Отмена Тогда
		Возврат;
	КонецЕсли;
	
	ЗаполнитьНаКлиенте();
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьНаКлиенте()
	
	Объект.ФормированиеЗаказов.Очистить();
	КорзинаЗаказов.Очистить();
	ОбновитьНаСервере();
	Если Объект.ФормированиеЗаказов.Количество() = 0 Тогда
		Если ОтборПодразделения Тогда
			ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru='По сценарию %1 у подразделения исполнителя %2 за установленный период потребность в материалах отсутствует.'"),
				Объект.Сценарий,
				Объект.ПодразделениеИсполнитель);
		Иначе
			ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru='По сценарию %1 за установленный период потребность в материалах отсутствует.'"),
				Объект.Сценарий);
		КонецЕсли;
		ПоказатьПредупреждение(, ТекстОшибки);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

#Область ПроцедурыПолученияПлановИЗаказов

&НаСервере
Функция СписокПлановПоСтроке(КлючСтроки)

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

&НаСервере
Функция СписокПлановНарастающимИтогомПоСтроке(КлючСтроки)

	Запрос = ПолучитьЗапросСОтборамиКомпоновкиДанных(АдресСхемыКомпоновкиДанныхКоличествоВПланах, КомпоновщикНастроекКоличествоВПланахВзаказах, Истина);
	
	Запрос.УстановитьПараметр("Сценарий", Объект.Сценарий);
	Запрос.УстановитьПараметр("ПодразделениеИсполнитель", КлючСтроки.ПодразделениеИсполнитель);
	Запрос.УстановитьПараметр("ПланированиеПоНазначениям", ПланированиеПоНазначениям);
	Запрос.УстановитьПараметр("Назначение", КлючСтроки.Назначение);
	Запрос.УстановитьПараметр("Номенклатура", КлючСтроки.Номенклатура);
	Запрос.УстановитьПараметр("Характеристика", КлючСтроки.Характеристика);
	Запрос.УстановитьПараметр("Склад", КлючСтроки.Склад);
	
	ТаблицаРезультата = Запрос.Выполнить().Выгрузить();
	
	СписокДокументов = Новый СписокЗначений();
	Для Каждого Строка Из ТаблицаРезультата Цикл
		
		ДокументПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = '%1 (№ %2 от %3)'"), 
				Формат(Строка.Количество, "ЧДЦ=3"), Строка.НомерДокумента, 
				Формат(Строка.ДатаДокумента, "ДЛФ=D"));
		СписокДокументов.Добавить(Строка.Документ, ДокументПредставление);
	КонецЦикла;
	
	Возврат СписокДокументов;
	
КонецФункции

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

&НаСервере
Функция СписокЗаказовНарастающимИтогомПоСтроке(КлючСтроки)
	
	Запрос = ПолучитьЗапросСОтборамиКомпоновкиДанных(АдресСхемыКомпоновкиДанныхКоличествоВЗаказах, КомпоновщикНастроекКоличествоВПланахВЗаказах, Истина);
	
	Запрос.УстановитьПараметр("Сценарий", Объект.Сценарий);
	Запрос.УстановитьПараметр("ПодразделениеИсполнитель", КлючСтроки.ПодразделениеИсполнитель);
	Запрос.УстановитьПараметр("ОтборПодразделения", ЗначениеЗаполнено(КлючСтроки.ПодразделениеИсполнитель));
	Запрос.УстановитьПараметр("ПланированиеПоНазначениям", ПланированиеПоНазначениям);
	Запрос.УстановитьПараметр("Назначение", КлючСтроки.Назначение);
	Запрос.УстановитьПараметр("Номенклатура", КлючСтроки.Номенклатура);
	Запрос.УстановитьПараметр("Характеристика", КлючСтроки.Характеристика);
	Запрос.УстановитьПараметр("Склад", КлючСтроки.Склад);
	
	ТаблицаРезультата = Запрос.Выполнить().Выгрузить();
	
	СписокДокументов = Новый СписокЗначений();
	Для Каждого Строка Из ТаблицаРезультата Цикл
		
		ДокументПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = '%1 (№ %2 от %3)'"), 
				Формат(Строка.Количество, "ЧДЦ=3"), Строка.НомерДокумента, 
				Формат(Строка.ДатаДокумента, "ДЛФ=D"));
		СписокДокументов.Добавить(Строка.Документ, ДокументПредставление);
	КонецЦикла;
	
	Возврат СписокДокументов;
	
КонецФункции

&НаКлиенте
Процедура ВыборДокументаПланаИзСписка(РезультатВыбора, ДополнительныеПараметры) Экспорт 

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

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

&НаКлиенте
Процедура ВыборДокументаЗаказаИзСписка(РезультатВыбора, ДополнительныеПараметры) Экспорт 

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

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

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

#Область СозданиеУдалениеЗаказов

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ПривестиДатыКПериодичностиСценария(Форма, ДатаНачала, ДатаОкончания)
	
	НоваяДатаНачала = ПланированиеКлиентСерверПовтИсп.РассчитатьДатуНачалаПериода(
		ДатаНачала, Форма.Периодичность);
	
	ДатаНачала = ?(ЗначениеЗаполнено(ДатаНачала), НоваяДатаНачала, ДатаНачала);
	
	НоваяДатаОкончания = ПланированиеКлиентСерверПовтИсп.РассчитатьДатуОкончанияПериода(
		ДатаОкончания, Форма.Периодичность);
		
	ДатаОкончания = ?(ЗначениеЗаполнено(ДатаОкончания), НоваяДатаОкончания, ДатаОкончания);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ОбновитьДанныеКогдаФормаСтанетАктивной()

	ПодключитьОбработчикОжидания("Подключаемый_ОбновитьДанныеКогдаФормаСтанетАктивной", 0.1, Истина);

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

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

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

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

&НаСервере
Процедура ОтображатьЗаказыКОформлениюНаСервере()
	
	ОтображатьЗаказыКОформлению = Не ОтображатьЗаказыКОформлению;
	УстановитьВидимостьЭлементовФормы();
	
	Если ОтображатьЗаказыКОформлению Тогда
		ОбновитьКорзинуЗаказов();
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьКорзинуЗаказов()
	
	Отбор = Новый Структура("ОтметитьКЗаказу", Истина);
	Колонки = "Склад, ПодразделениеИсполнитель";
	Если ИспользоватьУправлениеПроизводством2_2 Тогда
		Колонки = Колонки + ", ЦеховаяКладовая";
	КонецЕсли;
	
	ТаблицаКорзинаЗаказов = Объект.ФормированиеЗаказов.Выгрузить(Отбор, Колонки + ", КоличествоУпаковок");
	Для Каждого Строка Из ТаблицаКорзинаЗаказов Цикл
		Если Строка.КоличествоУпаковок>0 Тогда
			Строка.КоличествоУпаковок = 1;
		КонецЕсли;
	КонецЦикла;
	
	ТаблицаКорзинаЗаказов.Свернуть(Колонки, "КоличествоУпаковок");
	КорзинаЗаказов.Очистить();
	
	Для Каждого Строка Из ТаблицаКорзинаЗаказов Цикл
		Если Строка.КоличествоУпаковок = 0 Тогда
			Продолжить;
		КонецЕсли;
		НоваяСтрока = КорзинаЗаказов.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
		НоваяСтрока.ВсегоСтрок = Строка.КоличествоУпаковок;
	КонецЦикла;
	
КонецПроцедуры

&НаСервере 
Процедура ПереключитьФлажки(Устанавливать)
	
	Если Элементы.ФормированиеЗаказов.ВыделенныеСтроки.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	Для Каждого ВыделеннаяСтрока Из Элементы.ФормированиеЗаказов.ВыделенныеСтроки Цикл
		
		СтрокаТаблицы = Объект.ФормированиеЗаказов.НайтиПоИдентификатору(ВыделеннаяСтрока);
		
		Если Устанавливать И НЕ СтрокаТаблицы.ОтметитьКЗаказу И СтрокаТаблицы.КоличествоУпаковок > 0 Тогда
			
			СтрокаТаблицы.ОтметитьКЗаказу = Истина;
			
		ИначеЕсли Не Устанавливать И СтрокаТаблицы.ОтметитьКЗаказу Тогда
			
			СтрокаТаблицы.ОтметитьКЗаказу = Ложь;
		
		КонецЕсли;
		
	КонецЦикла;
	
	Если ОтображатьЗаказыКОформлению Тогда
		ОбновитьКорзинуЗаказов();
	КонецЕсли;
	
КонецПроцедуры

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

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

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