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