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