При работе в системе 1С:Документооборот (1С:ДО), особенно в сценариях с использованием бесшовной интеграции или автоматического запуска процессов, администраторы и разработчики часто сталкиваются с критической ошибкой: Не найдены исполнители для автоподстановки. Эта ошибка блокирует создание бизнес-процесса и может парализовать цепочку согласования документов. Рассмотрим причины возникновения этой ситуации и разберем по шагам, как её исправить.
Ошибка обычно фиксируется в общем модуле ШаблоныБизнесПроцессов.Модуль или БизнесСобытияВызовСервера.Модуль. Система пытается выполнить метод БизнесПроцесс.Заполнить(ПараметрыЗаполнения), который, в свою очередь, инициирует обработчик ОбработкаЗаполнения. Когда алгоритм доходит до вычисления исполнителей, указанных в шаблоне как «Автоподстановка», и не получает конкретного Пользователя или Роли, система выбрасывает исключение.
Проанализируем типичный текст ошибки:
{ОбщийМодуль.БизнесСобытияВызовСервера.Модуль(705)}: Ошибка при вызове метода контекста (Заполнить)
БизнесПроцесс.Заполнить(ПараметрыЗаполнения); по причине:
Ошибка при выполнении обработчика - 'ОбработкаЗаполнения' по причине:
{ОбщийМодуль.ШаблоныБизнесПроцессов.Модуль(1361)}: Не найдены исполнители для автоподстановки
"Заказ поставщику.Ответственный за документ".
Это означает, что в шаблоне процесса в качестве исполнителя указан не конкретный человек, а правило (например, Ответственный за документ), но система не смогла «вычислить» этого человека для конкретного экземпляра документа.
Самая очевидная причина — реквизит, на который ссылается автоподстановка, просто не заполнен в самом документе. Если мы используем автоподстановку Заказ поставщику.Ответственный за документ, то в справочнике «Внутренние документы» (или в интегрированном объекте из ERP) поле Ответственный должно быть обязательно заполнено.
Выясним причину, почему поле может быть пустым:
Ответственный не было инициализировано.Если бизнес-логика допускает, что ответственный может быть не указан, или мы хотим избежать жесткой остановки системы, необходимо настроить Условие в шаблоне бизнес-процесса. Это наиболее правильный путь с точки зрения администрирования 1С:ДО.
Разберем по шагам, как это реализовать:
Ответственный за документ.ЗаказПоставщику.Ответственный за документ Заполнено.Таким образом, система будет пытаться назначить задачу ответственному только в том случае, если он указан. Если поле пустое, шаг будет либо пропущен (в зависимости от настроек схемы), либо задача уйдет другому исполнителю.
Часто ошибка возникает только при автоматическом старте процесса. Проанализируем ситуацию: когда процесс запускается «руками», все работает, а при автозапуске — падает. Это связано с тем, что автоматический запуск происходит в контексте фонового задания под системным пользователем.
В этом случае стоит проверить:
Предупреждение, Вопрос и т.д.).Если стандартных настроек недостаточно, мы можем использовать встроенный язык 1С для написания собственной логики автоподстановки. Рассмотрим пример кода, который предотвращает ошибку путем проверки значения на Неопределено или ПустаяСсылка.
В скрипте автоподстановки рекомендуется использовать следующую конструкцию:
// Получаем предмет процесса
Предмет = СсылкаНаОбъект.Предмет;
Если ЗначениеЗаполнено(Предмет) И ЗначениеЗаполнено(Предмет.Ответственный) Тогда
// Если ответственный заполнен, возвращаем его как исполнителя
Результат = Предмет.Ответственный;
Иначе
// Если не заполнен, возвращаем пустое значение или роль по умолчанию
// Чтобы система не выдавала ошибку, можно вернуть администратора или пустой массив
Результат = Справочники.Пользователи.ПустаяСсылка();
КонецЕсли;
Важно помнить, что если автоподстановка возвращает ПустуюСсылку, система все равно может выдать ошибку «Исполнитель не найден», если в настройках действия не указано «Допускать пустого исполнителя».
В версиях 1С:ДО 2.1.12.2 и выше часто наблюдается эффект, когда бизнес-процесс в 1С:ДО пытается стартовать по событию создания документа в связанной системе (например, УТ 11 или ERP 2), но на момент старта процесса данные документа еще не полностью синхронизированы или транзакция записи еще не завершена.
Для решения этой проблемы мы можем:
РегламентныеЗадания для отложенного старта процессов по документам, где исполнители еще не определены.Система может не находить исполнителя, даже если поле заполнено, если указанный пользователь:
Недействителен.Проанализируем карточку пользователя, указанного в поле Ответственный. Убедимся, что он является действующим сотрудником и имеет права доступа к данному виду документа.
Для устранения ошибки Не найдены исполнители для автоподстановки мы рекомендуем следовать алгоритму: сначала проверить фактическое заполнение реквизита в документе, затем настроить проверку этого реквизита в Условиях шаблона процесса, и в завершение убедиться, что между интегрированными системами корректно настроено сопоставление пользователей. Использование ролевой адресации вместо прямой привязки к «Ответственному» также значительно повышает отказоустойчивость системы.