Панель администрирования УТ / Бюджетирование и планирование / Модуль формы

файл

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

&НаКлиенте
Перем ОбновитьИнтерфейс;

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

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

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

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

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

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

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

&НаКлиенте
Процедура ИспользоватьБюджетированиеПриИзменении(Элемент)
	Подключаемый_ПриИзмененииРеквизита(Элемент);
КонецПроцедуры

&НаКлиенте
Процедура ИспользоватьБюджетныйПроцессПриИзменении(Элемент)
	Подключаемый_ПриИзмененииРеквизита(Элемент);
КонецПроцедуры

&НаКлиенте
Процедура ИспользоватьОповещенияДляЗадачБюджетированияПриИзменении(Элемент)
	Подключаемый_ПриИзмененииРеквизита(Элемент, Ложь);
КонецПроцедуры

&НаКлиенте
Процедура АдресПубликацииИнформационнойБазыВЛокальнойСетиПриИзменении(Элемент)
	
	Подключаемый_ПриИзмененииРеквизита(Элемент, Ложь);
	
КонецПроцедуры

&НаКлиенте
Процедура АктуализироватьФактБюджетированияПриПроведенииДокументовПриИзменении(Элемент)
	
	Подключаемый_ПриИзмененииРеквизита(Элемент, Ложь);
	
КонецПроцедуры

&НаКлиенте
Процедура АктуализироватьФактБюджетированияПриФормированииОтчетовПриИзменении(Элемент)
	
	Подключаемый_ПриИзмененииРеквизита(Элемент, Ложь);
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура ИспользоватьПланированиеПродажПриИзменении(Элемент)
	Подключаемый_ПриИзмененииРеквизита(Элемент);
	Если НЕ (НаборКонстант.ИспользоватьПланированиеПродаж
			ИЛИ НаборКонстант.ИспользоватьПланированиеСборкиРазборки
			//++ НЕ УТ
			ИЛИ НаборКонстант.ИспользоватьПланированиеПроизводства
			//-- НЕ УТ
			ИЛИ НаборКонстант.ИспользоватьПланированиеЗакупок
			ИЛИ НаборКонстант.ИспользоватьПланированиеВнутреннихПотреблений) 
			И НаборКонстант.ИспользоватьСезонныеКоэффициенты Тогда
		НаборКонстант.ИспользоватьСезонныеКоэффициенты = Ложь;
		Подключаемый_ПриИзмененииРеквизита(Элементы.ИспользоватьСезонныеКоэффициенты);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ИспользоватьПланированиеПродажПоКатегориямПриИзменении(Элемент)
	
	Подключаемый_ПриИзмененииРеквизита(Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура ИспользоватьПланированиеВнутреннихПотребленийПриИзменении(Элемент)
	Подключаемый_ПриИзмененииРеквизита(Элемент);
	Если НЕ (НаборКонстант.ИспользоватьПланированиеПродаж
			ИЛИ НаборКонстант.ИспользоватьПланированиеСборкиРазборки
			//++ НЕ УТ
			ИЛИ НаборКонстант.ИспользоватьПланированиеПроизводства
			//-- НЕ УТ
			ИЛИ НаборКонстант.ИспользоватьПланированиеЗакупок
			ИЛИ НаборКонстант.ИспользоватьПланированиеВнутреннихПотреблений) 
			И НаборКонстант.ИспользоватьСезонныеКоэффициенты Тогда
		НаборКонстант.ИспользоватьСезонныеКоэффициенты = Ложь;
		Подключаемый_ПриИзмененииРеквизита(Элементы.ИспользоватьСезонныеКоэффициенты);
	КонецЕсли;
КонецПроцедуры

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

&НаКлиенте
Процедура ПериодичностьВводаСезонныхКоэффициентовПриИзменении(Элемент)
	
	Подключаемый_ПриИзмененииРеквизита(Элемент, Ложь);
	
КонецПроцедуры

&НаКлиенте
Процедура ИспользоватьПланированиеСборкиРазборкиПриИзменении(Элемент)
	Подключаемый_ПриИзмененииРеквизита(Элемент);
	Если НЕ (НаборКонстант.ИспользоватьПланированиеПродаж
			ИЛИ НаборКонстант.ИспользоватьПланированиеСборкиРазборки
			//++ НЕ УТ
			ИЛИ НаборКонстант.ИспользоватьПланированиеПроизводства
			//-- НЕ УТ
			ИЛИ НаборКонстант.ИспользоватьПланированиеЗакупок
			ИЛИ НаборКонстант.ИспользоватьПланированиеВнутреннихПотреблений) 
			И НаборКонстант.ИспользоватьСезонныеКоэффициенты Тогда
		НаборКонстант.ИспользоватьСезонныеКоэффициенты = Ложь;
		Подключаемый_ПриИзмененииРеквизита(Элементы.ИспользоватьСезонныеКоэффициенты);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ИспользоватьПланированиеПроизводстваПриИзменении(Элемент)
	Подключаемый_ПриИзмененииРеквизита(Элемент);
	Если НЕ (НаборКонстант.ИспользоватьПланированиеПродаж
			ИЛИ НаборКонстант.ИспользоватьПланированиеСборкиРазборки
			//++ НЕ УТ
			ИЛИ НаборКонстант.ИспользоватьПланированиеПроизводства
			//-- НЕ УТ
			ИЛИ НаборКонстант.ИспользоватьПланированиеЗакупок
			ИЛИ НаборКонстант.ИспользоватьПланированиеВнутреннихПотреблений) 
			И НаборКонстант.ИспользоватьСезонныеКоэффициенты Тогда
		НаборКонстант.ИспользоватьСезонныеКоэффициенты = Ложь;
		Подключаемый_ПриИзмененииРеквизита(Элементы.ИспользоватьСезонныеКоэффициенты);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ИспользоватьПланированиеЗакупокПриИзменении(Элемент)
	Подключаемый_ПриИзмененииРеквизита(Элемент);
	Если НЕ (НаборКонстант.ИспользоватьПланированиеПродаж
			ИЛИ НаборКонстант.ИспользоватьПланированиеСборкиРазборки
			//++ НЕ УТ
			ИЛИ НаборКонстант.ИспользоватьПланированиеПроизводства
			//-- НЕ УТ
			ИЛИ НаборКонстант.ИспользоватьПланированиеЗакупок
			ИЛИ НаборКонстант.ИспользоватьПланированиеВнутреннихПотреблений) 
			И НаборКонстант.ИспользоватьСезонныеКоэффициенты Тогда
		НаборКонстант.ИспользоватьСезонныеКоэффициенты = Ложь;
		Подключаемый_ПриИзмененииРеквизита(Элементы.ИспользоватьСезонныеКоэффициенты);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура РаспараллеливатьРасчетПлановПроизводстваПриИзменении(Элемент)
	Подключаемый_ПриИзмененииРеквизита(Элемент);
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура НастроитьРасписаниеОповещенийПоБюджетнымЗадачам(Команда)
	
	Возврат; // В УТ и КА обработчик пустой
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ОбновитьИнтерфейсПрограммы()
	
	Если ОбновитьИнтерфейс = Истина Тогда
		ОбновитьИнтерфейс = Ложь;
		ОбщегоНазначенияКлиент.ОбновитьИнтерфейсПрограммы();
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

КонецФункции
//-- НЕ УТ

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

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

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


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

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