При использовании шаблонов бизнес-процессов частенько приходится использовать механизмы автоподстановки исполнителей, и типовой функционал позволяет это сделать, но сам по себе список этих автоподстановок ограничен.
Для расширения возможностей этого механизма и была реализована эта подсистема. С помощью нее можно описать любой нужный вам алгоритм автоподстановки в пользовательском режиме.
Подсистема реализована в виде расширения, поэтому снимать конфигурацию с поддержки не придется
Пользовательские алгоритмы автоподстановки доступны в двух видах:
- Общий (в контексте алгоритма доступен объект бизнес-процесса)
- По основному предмету(в контексте алгоритма доступен объект бизнес-процесса и его основной предмет)
- Для использования автоподстановки в шаблоне бизнес - процесса обязательно нужно указать предмет
Подсистема позволяет описать практически любой механизм автоподстановки, все ограничивается только вашей фантазией/навыками
Ниже приведены примеры пользовательских алгоритмов:
- Общий алгоритм автоподстановки всех пользователей системы КРОМЕ автора самого процесса
МассивПользователей = Новый Массив;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущийПользователь", ПараметрыСеанса.ТекущийПользователь);
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Пользователи.Ссылка,
| Пользователи.ИдентификаторПользователяИБ
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| НЕ Пользователи.Недействителен
| И Пользователи.Ссылка <> &ТекущийПользователь
|
|УПОРЯДОЧИТЬ ПО
| Пользователи.Наименование";
Выборка = Запрос.Выполнить().Выбрать();
УстановитьПривилегированныйРежим(Истина);
Пока Выборка.Следующий() Цикл
Если ЗначениеЗаполнено(Выборка.ИдентификаторПользователяИБ) Тогда
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(
Выборка.ИдентификаторПользователяИБ);
Если ПользовательИБ <> Неопределено Тогда
МассивПользователей.Добавить(Выборка.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЦикла;
РезультатФункции = МассивПользователей;
- Алгоритм автоподстановки по предмету (в предмет был добавлен доп. реквизит, пользователь указанный в этом реквизите является исполнителем задачи)
СтрокаПредмета = Объект.Предметы.Найти(ИмяПредмета, "ИмяПредмета");
Если СтрокаПредмета <> Неопределено Тогда
Если НЕ ЗначениеЗаполнено(СтрокаПредмета.Предмет) Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Автоподстановка не может быть выполнена, так как не указан предмет ""%1"" процесса.'"),
Строка(ИмяПредмета));
КонецЕсли;
Если ТипЗнч(СтрокаПредмета.Предмет) <> Тип("СправочникСсылка.ВнутренниеДокументы") Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Автоподстановка не может быть выполнена для предмета ""%1"" процесса.'"),
Строка(ИмяПредмета));
КонецЕсли;
РезультатФункции = УправлениеСвойствами.ЗначениеСвойства(СтрокаПредмета.Предмет, "Ревизор_c04a1fa23d014aff8d34200c3e470766");
Иначе
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не найден предмет ""%1"" процесса.'"),
Строка(ИмяПредмета));
КонецЕсли;
Не забудьте обновить список доступных автоподстановок
Проверено:
Платформа: 1С:Предприятие 8.3 (8.3.17.1851)
Конфигурация: Документооборот 8 КОРП, редакция 2.1 (2.1.28.13)
Код расширения открыт, и при необходимости подсистему можно "допилить" под собственные нужды.
P.S. Если понравилось/пригодилось - ставь + (мне будет приятно)
Возможно, также будут интересны другие мои публикации
Проверено на следующих конфигурациях и релизах:
- Документооборот КОРП, релизы 2.1.28.12