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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПериодНачалоПриИзменении(Элемент)
	
	ПериодНачалоПериодОкончаниеПриИзменении();
	
КонецПроцедуры

&НаКлиенте
Процедура ПериодОкончаниеПриИзменении(Элемент)
	
	ПериодНачалоПериодОкончаниеПриИзменении();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ФормированиеЗаказовПодразделениеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	СтрокаТаблицы = Объект.ФормированиеЗаказов.НайтиПоИдентификатору(Элементы.ФормированиеЗаказов.ВыделенныеСтроки[0]);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	//

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);

	//

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

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

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

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

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

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

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

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// Расчитывает выделенные строки при изменении соглашения
&НаСервере
Функция ПриИзменененииСоглашенияНаСервере(ЗаказОбъект, ЗаполнятьСоглашения = Ложь)

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

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

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

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

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

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

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

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

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

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

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

	КонецЦикла;
	
	Возврат СписокДокументов;
	
КонецФункции

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

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

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

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

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

	КонецЦикла;
	
	Возврат СписокДокументов;
	
КонецФункции

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ЗаписатьЗаказНаСервере(ДокументОбъект, СкладРодитель, СписокОшибок)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция НастройкиЗаполненияЦеныЗакупкиВСтрокеТЧ(Строка, ТекущаяДатаСеанса)
	
	СтруктураЗаполненияЦены = Новый Структура;
	СтруктураЗаполненияЦены.Вставить("Организация", Неопределено);
	СтруктураЗаполненияЦены.Вставить("Соглашение",  Строка.Соглашение);
	СтруктураЗаполненияЦены.Вставить("Партнер",     Строка.Партнер);
	СтруктураЗаполненияЦены.Вставить("Дата",        ТекущаяДатаСеанса);
	СтруктураЗаполненияЦены.Вставить("Валюта",      Строка.Валюта);
	
	Возврат СтруктураЗаполненияЦены;
	
КонецФункции

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

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

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

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

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