Панель настроек зарплата кадры / Настройка штатного расписания / Модуль формы

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

&НаКлиенте
Перем ПараметрыОбработчикаОжидания;

&НаКлиенте
Перем ФормаДлительнойОперации;

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗаписатьИЗакрыть(Команда)
	ЗаписатьНастройкиНаКлиенте();
КонецПроцедуры

&НаКлиенте
Процедура Отмена(Команда)
	
	Модифицированность = Ложь;
	Закрыть();
	
КонецПроцедуры

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

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

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

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

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

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

&НаКлиенте
Процедура ОбработатьВыполнениеЗаписиНастроек()

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

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

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

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

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

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