Как программно выполнить задачу бизнес-процесса сразу после ее создания?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Часто в процессе разработки конфигураций на платформе 1С возникает необходимость автоматизировать прохождение маршрута бизнес-процесса. Задача состоит в том, чтобы после старта процесса или при попадании на определенную точку маршрута, задача для пользователя создавалась и тут же программно закрывалась, продвигая процесс дальше. Попытка выполнить эту операцию напрямую в обработчике ПриСозданииЗадач часто приводит к ошибкам блокировки данных или несоответствию версий. Разберем, как реализовать это правильно.

Почему возникает ошибка выполнения задачи?

Основная проблема заключается в жизненном цикле транзакции. Когда срабатывает событие ПриСозданииЗадач, объект Задача еще не зафиксирован в базе данных окончательно. Он находится в состоянии формирования. Попытка вызвать метод ВыполнитьЗадачу в этот момент вызывает конфликт, так как этот метод ожидает, что задача уже существует, имеет уникальный идентификатор и корректную версию записи. Кроме того, ВыполнитьЗадачу — это комплексный механизм, который не только меняет статус задачи, но и запускает процедуру продвижения бизнес-процесса по карте маршрута, что невозможно сделать для объекта, который еще не прошел этап записи в базу.

Решение 1: Заполнение обязательных реквизитов перед выполнением

Для того чтобы система позволила закрыть задачу, необходимо корректно подготовить объект. Одной из частых причин успеха является предварительное заполнение тех реквизитов, которые 1С ожидает увидеть заполненными при выполнении, а именно: исполнителя, даты выполнения и результата. Рассмотрим пример реализации:


// Пример корректного заполнения реквизитов задачи
ФормируемаяЗадача.ДатаВыполненияЗадачи = ТекущаяДата();
ФормируемаяЗадача.Исполнитель = Пользователь; // Укажите необходимого исполнителя
ФормируемаяЗадача.Результат = Перечисления.РезультатВыполненияЗадачи.Выполнено;
ФормируемаяЗадача.ВыполнитьЗадачу();

Использование этого метода позволяет платформе понять, что задача завершена корректно. Важно убедиться, что передаваемые значения соответствуют типам данных, определенным в конфигурации для конкретного вида Задача.

Решение 2: Использование обработчика «ПередСозданиемЗадач»

Если необходимо, чтобы задача не просто закрывалась, а в принципе создавалась как «уже выполненная» для истории, лучше использовать событие ПередСозданиемЗадач. В этом случае мы управляем самим процессом создания объекта. Рассмотрим алгоритм действий:

  1. Отключите стандартную обработку создания задачи через параметр СтандартнаяОбработка = Ложь.
  2. Вручную создайте объект задачи.
  3. Установите свойство Выполнена в значение Истина.
  4. Запишите объект в базу данных.

Этот подход позволяет избежать ошибок, связанных с тем, что бизнес-процесс еще не завершил свою транзакцию записи. Вы фактически подменяете стандартное поведение системы на свое, создавая запись в регистре задач с нужным статусом.

Решение 3: Логическая переработка карты маршрута

Если задача является «технической» или не требует вмешательства пользователя, проанализируйте, нужна ли она вообще в виде интерактивной задачи. Возможно, стоит:

Подводя итоги

Для успешного выполнения задачи внутри модуля объекта бизнес-процесса помните о следующих правилах:

Применяя данные подходы, вы сможете добиться стабильной работы автоматизированных бизнес-процессов, избегая ошибок транзакций и конфликтов версий объектов базы данных. Для интерактивного выполнения или отмены задач можно использовать обработку для работы с задачами исполнителя.

← На главную