В процессе ежедневной работы с системой электронного документооборота «1С:Документооборот» (как в редакции 2.1, так и в 3.0) пользователи нередко сталкиваются с ситуацией, когда задача или весь бизнес-процесс завершаются ошибочно. Например, исполнитель случайно нажал кнопку выполнения, не завершив реальную работу, или автор процесса досрочно закрыл его, не дождавшись фактических результатов.
В этой статье мы подробно разберем, какие штатные и альтернативные инструменты существуют в системе для решения этой проблемы, проанализируем технические риски административного вмешательства и посмотрим, как изменилось поведение программы в новых версиях.
Прежде чем рассматривать радикальные меры по реанимации уже закрытого бизнес-процесса, разберем ситуацию, когда ошибку совершил сам исполнитель, но процесс еще продолжает двигаться по маршруту. В «1С:Документооборот» реализован стандартный механизм «Отменить выполнение».
Исполнитель, его руководитель или делегированное лицо могут вернуть задачу в статус «Не выполнена» при соблюдении следующих условий:
Этот способ является наиболее безопасным, так как он заложен в стандартную логику конфигурации и не нарушает целостность данных.
Если автор процесса уже нажал кнопку «Завершить» или «Закрыть», то с точки зрения системы жизненный цикл данного бизнес-процесса официально окончен. Простой кнопки «Возобновить» в пользовательском интерфейсе для полностью закрытых процессов не предусмотрено.
Рассмотрим стандартный и наиболее безопасный алгоритм действий в этом случае:
Иногда администраторы баз данных пытаются «реанимировать» закрытый процесс путем прямого изменения реквизитов объектов в базе данных через стандартную обработку ГрупповоеИзменениеРеквизитов.
Давайте проанализируем, как устроен этот механизм изнутри, и почему его использование крайне нежелательно в рабочей базе данных. Для того чтобы процесс снова стал активным, администраторы меняют реквизит Завершен в значение Ложь у бизнес-процесса, а также реквизит Выполнена в значение Ложь у соответствующих задач.
Программная реализация такого изменения выглядит следующим образом:
// Пример опасного ручного изменения состояния задачи и бизнес-процесса
НачатьТранзакцию();
Попытка
ЗадачаОбъект = СсылкаНаЗадачу.ПолучитьОбъект();
ЗадачаОбъект.Выполнена = Ложь;
ЗадачаОбъект.СостояниеБизнесПроцесса = ПредопределенноеЗначение("Перечисление.СостоянияБизнесПроцессов.Активен");
ЗадачаОбъект.Записать();
БПОбъект = СсылкаНаБизнесПроцесс.ПолучитьОбъект();
БПОбъект.Завершен = Ложь;
БПОбъект.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияБизнесПроцессов.Активен");
БПОбъект.Записать();
ЗафиксироватьТранзакцию();
Исключение
ОтменятьТранзакцию();
ЗаписатьЛогОшибки(ОписаниеОшибки());
КонецПопытки;
Внимание! Категорически не рекомендуется выполнять подобные операции на работающей базе.
Выясним причины, почему этот метод опасен:
БизнесПроцессСсылка и ЗадачаСсылка. Данные о состояниях процессов пишутся во множество связанных регистров сведений (например, история выполнения задач, регистры состояний документов, задачи исполнителей). Прямая перезапись реквизитов «в лоб» не обновляет эти регистры.Посмотрим на ситуацию в новой редакции «1С:Документооборот 3.0». Архитектура работы с процессами здесь претерпела значительные изменения. Вместо привычных комплексных процессов теперь используется единый механизм «Обработка документа», состоящий из отдельных действий и правил.
Однако концептуальная проблема с ошибочным закрытием осталась прежней: штатной кнопки отката полностью завершенной обработки не существует. Тем не менее, в редакции 3.0 решить проблему можно более изящно через изменение состояний:
Проект.Также для редакции 3.0 существуют специализированные внешние расширения, которые позволяют автоматизировать процесс безопасного сброса состояний и отправки текущей схемы обработки в историю для ее повторного прохождения.
Иногда пользователи приводят в пример другие конфигурации семейства «1С:Предприятие», такие как «1С:CRM», где встроен специализированный механизм «Откат бизнес-процесса». Этот инструмент позволяет штатно, на уровне платформы и бизнес-логики решения, перевести процесс на любую предыдущую точку маршрута с корректным очищением всех связанных регистров и транзакций.
К сожалению, разработчики фирмы «1С» не перенесли данный механизм в типовую коробку «1С:Документооборот». Приостановка (пауза) процесса в СЭД возможна, но полное прерывание или завершение остаются необратимыми действиями для обычного пользователя. Поэтому лучшей практикой остается запуск нового процесса взамен ошибочно завершенного.