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