При оформлении внутренних документов (например, заявок на командировку, служебных записок, согласований договоров) нередко возникают ситуации, когда необходимость в процедуре отпадает уже после старта цепочки бизнес-процессов. В этот момент задачи могут находиться на исполнении у множества сотрудников: руководителей, бухгалтеров, специалистов кадровой службы. Разберем подробно, как корректно прекратить действие внутреннего документа, прервать запущенные задачи и уведомить исполнителей без предоставления пользователям избыточных административных прав.
Рассмотрим несколько вариантов решения задачи: от штатных возможностей управления процессами и правами доступа до автоматической обработки событий системы.
Проанализируем типовую модель безопасности «1С:Документооборот». Распространенным заблуждением является мнение о том, что остановить запущенный процесс может только системный администратор. В типовой конфигурации автор процесса имеет полное право управлять его жизненным циклом.
Разберем по шагам, как работает штатный механизм:
Прерван, автоматически отменяет все активные задачи исполнителей и рекурсивно останавливает вложенные подпроцессы. При этом в журнале сохраняется история выполнения, но задачи пропадают из списков «Мои задачи» исполнителей.Не действует (или Аннулирован). Это исключает документ из активного оперативного учета.Если на предприятии регистрируется большой поток документов и требуется свести ручные действия пользователей к минимуму, автоматизируем реакцию системы на аннулирование документа. Для этого используем типовой механизм «Бизнес-события» и справочник «Дополнительные обработчики бизнес-событий», позволяющий внедрять логику без снятия конфигурации с поддержки.
Рассмотрим структуру реализации данного алгоритма:
Командировка отменена) либо отслеживаем изменение типового состояния документа.Посмотрим на пример логики, выполняемой в обработчике бизнес-события:
// 1. Поиск активных процессов по предмету (нашему документу)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| Предметы.Ссылка КАК ПроцессСсылка
|ИЗ
| РегистрСведений.ПредметыПапкиИБ КАК Предметы
|ГДЕ
| Предметы.Предмет = &ТекущийДокумент
| И Предметы.Ссылка.Состояние В (&СтатусыАктивных)";
Запрос.УстановитьПараметр("ТекущийДокумент", Источник);
СтатусыАктивных = Новый Массив;
СтатусыАктивных.Добавить(Перечисления.СостоянияБизнесПроцессов.ВРаботе);
СтатусыАктивных.Добавить(Перечисления.СостоянияБизнесПроцессов.Старт);
Запрос.УстановитьПараметр("СтатусыАктивных", СтатусыАктивных);
Выборка = Запрос.Выполнить().Выбрать();
СписокИсполнителей = Новый Массив;
Пока Выборка.Следующий() Цикл
// 2. Прерывание найденных процессов
БизнесПроцессОбъект = Выборка.ПроцессСсылка.ПолучитьОбъект();
Если БизнесПроцессОбъект <> Неопределено Тогда
// Сбор текущих исполнителей прерываемых задач для последующего уведомления
// Вызов типового метода прерывания бизнес-процесса
БизнесПроцессОбъект.Прервать("Документ аннулирован инициатором.");
КонецЕсли;
КонецЦикла;
// 3. Формирование процесса «Ознакомление» для участников
Если СписокИсполнителей.Количество() > 0 Тогда
НовыйПроцесс = БизнесПроцессы.Ознакомление.СоздатьБизнесПроцесс();
НовыйПроцесс.ГлавныйПредмет = Источник;
НовыйПроцесс.Наименование = "Отмена командировки: " + Строка(Источник);
НовыйПроцесс.Описание = "Командировка отменена. Процессы согласования прерваны.";
Для Каждого Исполнитель Из СписокИсполнителей Цикл
СтрокаИсполнителя = НовыйПроцесс.Исполнители.Добавить();
СтрокаИсполнителя.Исполнитель = Исполнитель;
КонецЦикла;
НовыйПроцесс.Записать();
НовыйПроцесс.Старт();
КонецЕсли;
Такой подход полностью исключает человеческий фактор: инициатор просто меняет статус документа, после чего система самостоятельно снимает задачи с исполнителей и рассылает информационные уведомления.
Если аннулирование документа требует выполнения обратных регламентных процедур (возврат купленных билетов, аннуляция брони в гостинице, отмена приказа по кадрам), прерывания задач может быть недостаточно.
В этом случае эффективнее настроить отдельный шаблон процесса «Отмена командировки». При форс-мажоре пользователь запускает данный процесс на основании документа. В маршрут включаются задачи для конкретных служб (бухгалтерия, секретариат, кадры), что позволяет упорядоченно завершить все связанные хозяйственные операции.