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