Должности / Форма списка / Модуль формы

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ОбслуживаниеСпискаПодобранных

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

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

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

&НаСервереБезКонтекста
Функция РабочаяДата()
	Возврат ОбщегоНазначения.РабочаяДатаПользователя();
КонецФункции

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

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

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