Виды планов / Форма элемента / Модуль формы

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

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

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ОбновитьДоступностьЭлементов();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗаполнятьПоФормулеПриИзменении(Элемент)
	
	ЗаполнятьПоФормулеПриИзмененииФрагмент();
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнятьПоФормулеПоПрогнозированиюПриИзменении(Элемент)
	
	ЗаполнятьПоФормулеПриИзмененииФрагмент();
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ОтражаетсяВБюджетированииПриИзменении(Элемент)
	
	ОбновитьДоступностьЭлементов();
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнятьПланОплатПриИзменении(Элемент)
	
	
	Возврат; // В УТ 11.1 код данного обработчика пустой
	
КонецПроцедуры

&НаКлиенте
Процедура ОтражаетсяВБюджетированииОплатыПриИзменении(Элемент)
	
	
	ОбновитьДоступностьЭлементов();
	
КонецПроцедуры

&НаКлиенте
Процедура ОтражаетсяВБюджетированииОплатыКредитПриИзменении(Элемент)
	
	ОбновитьДоступностьЭлементов();
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ВариантЗаполненияСоставаПриИзменении(Элемент)
	ПересчитатьДефициты = Истина;
КонецПроцедуры

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

&НаКлиенте
Процедура ХозяйственнаяОперацияПриИзменении(Элемент)
	ИнициализироватьНастройкиРежимаЗаполненияПоДефицитам();
КонецПроцедуры

&НаКлиенте
Процедура ИспользоватьВидЦеныПриИзменении(Элемент)
	Если ИспользоватьВидЦены Тогда
		Элементы.ВидЦены.Доступность = Истина;
	Иначе
		Элементы.ВидЦены.Доступность = Ложь;
	КонецЕсли;
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ЗаполнятьПоФормулеПриИзмененииНаСервере()
	ОпределитьСхемуКомпоновкиДанных();
	СформироватьПредставлениеОтбораНоменклатуры();
КонецПроцедуры

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

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

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

#Область НастройкиЗаполненияИОтборов

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

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

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

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

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

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

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

&НаСервере
Функция ОтборНоменклатурыНастройки()
	Возврат ПоместитьВоВременноеХранилище(ОтборНоменклатуры.ПолучитьНастройки());
КонецФункции

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

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

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

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

//-- Локализация

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

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