В типовой конфигурации «1С:Документооборот» механизмы маршрутизации процессов позволяют назначать исполнителей автоматически. Однако стандартного списка автоподстановок не всегда достаточно. Проанализируем частую практическую задачу: когда в процессе требуется подставить в качестве исполнителя пользователя, указанного в дополнительном реквизите документа (например, «ФИО руководителя со старого места работы» или «ФИО руководителя с нового места работы»).
Рассмотрим пошагово, как реализовать такую автоподстановку с помощью программной доработки в Конфигураторе, а также разберем альтернативные штатные варианты решения.
Выясним исходные условия: автор темы добавил в документ дополнительный реквизит с типом СправочникСсылка.Пользователи. При запуске комплексного процесса (например, «Перевод сотрудника») система должна автоматически извлечь значение этого дополнительного реквизита из предмета процесса и подставить его в качество исполнителя задачи на этапе «Ознакомление».
Разберем алгоритм доработки программного кода. Для создания новой автоподстановки необходимо зарегистрировать ее в списке доступных функций и написать логику поиска и возврата нужного пользователя.
Регистрация новой автоподстановки. В общем модуле ШаблоныБизнесПроцессов находим экспортную функцию ПолучитьСписокДоступныхФункций. В этой функции заполняется список значений, отображаемый на форме выбора подстановки. Добавим в него новую строчку:
// Добавление новой автоподстановки в список доступных
ДоступныеФункции.Добавить("ШаблоныБизнесПроцессов.НоваяПодстановка(ЭтотОбъект)", НСтр("ru = 'Руководитель из доп. реквизита'"));
Примечание: Чтобы не снимать конфигурацию с поддержки, рекомендуется перехватывать логику в расширении конфигурации через модули типа ШаблоныБизнесПроцессовПереопределяемый.
Написание функции-обработчика. В этом же модуле (или соответствующем модуле расширения) создаем экспортную функцию, которая принимает объект бизнес-процесса и возвращает нужного исполнителя:
Функция НоваяПодстановка(БизнесПроцессОбъект) Экспорт
// Получаем предмет бизнес-процесса (например, документ)
ПредметПроцесса = БизнесПроцессОбъект.Предметы[0].Предмет;
// Безопасное получение значения дополнительного реквизита через БСП
СвойствоРуководитель = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Руководитель со старого места работы");
Если ЗначениеЗаполнено(СвойствоРуководитель) Тогда
Исполнитель = УправлениеСвойствами.ЗначениеСвойства(ПредметПроцесса, СвойствоРуководитель);
Возврат Исполнитель;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Рассмотрим варианты решения задачи без применения Конфигуратора:
УправлениеСвойствами.ЗначениеСвойства.Проанализируем технические риски, которые следует учитывать при реализации:
Неопределено. Это приведет к ошибке формирования задач. Настройте обязательность заполнения реквизита в карточке вида документа.Пользователи. В редакции 3.0 адресация завязана на справочник Сотрудники. Учитывайте тип данных дополнительного реквизита при считывании значения.Предметы считывается реквизит.