Как аннулировать внутренний документ и остановить все процессы в 1С:Документооборот?

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

При оформлении внутренних документов (например, заявок на командировку, служебных записок, согласований договоров) нередко возникают ситуации, когда необходимость в процедуре отпадает уже после старта цепочки бизнес-процессов. В этот момент задачи могут находиться на исполнении у множества сотрудников: руководителей, бухгалтеров, специалистов кадровой службы. Разберем подробно, как корректно прекратить действие внутреннего документа, прервать запущенные задачи и уведомить исполнителей без предоставления пользователям избыточных административных прав.

Рассмотрим несколько вариантов решения задачи: от штатных возможностей управления процессами и правами доступа до автоматической обработки событий системы.

Вариант 1. Штатное прерывание процессов автором и настройка прав

Проанализируем типовую модель безопасности «1С:Документооборот». Распространенным заблуждением является мнение о том, что остановить запущенный процесс может только системный администратор. В типовой конфигурации автор процесса имеет полное право управлять его жизненным циклом.

Разберем по шагам, как работает штатный механизм:

  1. Прерывание корневого процесса: инициатор документа открывает запущенный им процесс (например, комплексный процесс или процесс согласования) и нажимает команду «Прервать».
  2. Каскадное закрытие задач: платформа переводит статус процесса в значение Прерван, автоматически отменяет все активные задачи исполнителей и рекурсивно останавливает вложенные подпроцессы. При этом в журнале сохраняется история выполнения, но задачи пропадают из списков «Мои задачи» исполнителей.
  3. Проверка прав доступа: если у инициатора отсутствует кнопка прерывания, выясним причину в настройках прав. Доступ к управлению процессами регулируется типовыми профилями групп доступа и полномочиями (например, правами на изменение собственных процессов и задач). Для предоставления такой возможности достаточно скорректировать назначенные пользователю полномочия, не выдавая полные административные права.
  4. Изменение состояния документа: в карточке внутреннего документа устанавливается признак или состояние Не действует (или Аннулирован). Это исключает документ из активного оперативного учета.

Вариант 2. Автоматическое прерывание и уведомление через «Бизнес-события»

Если на предприятии регистрируется большой поток документов и требуется свести ручные действия пользователей к минимуму, автоматизируем реакцию системы на аннулирование документа. Для этого используем типовой механизм «Бизнес-события» и справочник «Дополнительные обработчики бизнес-событий», позволяющий внедрять логику без снятия конфигурации с поддержки.

Рассмотрим структуру реализации данного алгоритма:

  1. Дополнительный реквизит: для вида документа добавляем дополнительный реквизит (например, флаг Командировка отменена) либо отслеживаем изменение типового состояния документа.
  2. Детектор событий: настраиваем регистрацию бизнес-события на запись и изменение внутреннего документа при взводе признака отмены.
  3. Обработчик бизнес-события: в дополнительном обработчике описываем логику поиска связанных процессов, их прерывания и создания задачи на ознакомление.

Посмотрим на пример логики, выполняемой в обработчике бизнес-события:


// 1. Поиск активных процессов по предмету (нашему документу)
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    |	Предметы.Ссылка КАК ПроцессСсылка
    |ИЗ
    |	РегистрСведений.ПредметыПапкиИБ КАК Предметы
    |ГДЕ
    |	Предметы.Предмет = &ТекущийДокумент
    |	И Предметы.Ссылка.Состояние В (&СтатусыАктивных)";

Запрос.УстановитьПараметр("ТекущийДокумент", Источник);
СтатусыАктивных = Новый Массив;
СтатусыАктивных.Добавить(Перечисления.СостоянияБизнесПроцессов.ВРаботе);
СтатусыАктивных.Добавить(Перечисления.СостоянияБизнесПроцессов.Старт);
Запрос.УстановитьПараметр("СтатусыАктивных", СтатусыАктивных);

Выборка = Запрос.Выполнить().Выбрать();
СписокИсполнителей = Новый Массив;

Пока Выборка.Следующий() Цикл
    // 2. Прерывание найденных процессов
    БизнесПроцессОбъект = Выборка.ПроцессСсылка.ПолучитьОбъект();
    Если БизнесПроцессОбъект <> Неопределено Тогда
        // Сбор текущих исполнителей прерываемых задач для последующего уведомления
        // Вызов типового метода прерывания бизнес-процесса
        БизнесПроцессОбъект.Прервать("Документ аннулирован инициатором.");
    КонецЕсли;
КонецЦикла;

// 3. Формирование процесса «Ознакомление» для участников
Если СписокИсполнителей.Количество() > 0 Тогда
    НовыйПроцесс = БизнесПроцессы.Ознакомление.СоздатьБизнесПроцесс();
    НовыйПроцесс.ГлавныйПредмет = Источник;
    НовыйПроцесс.Наименование = "Отмена командировки: " + Строка(Источник);
    НовыйПроцесс.Описание = "Командировка отменена. Процессы согласования прерваны.";
    
    Для Каждого Исполнитель Из СписокИсполнителей Цикл
        СтрокаИсполнителя = НовыйПроцесс.Исполнители.Добавить();
        СтрокаИсполнителя.Исполнитель = Исполнитель;
    КонецЦикла;
    
    НовыйПроцесс.Записать();
    НовыйПроцесс.Старт();
КонецЕсли;

Такой подход полностью исключает человеческий фактор: инициатор просто меняет статус документа, после чего система самостоятельно снимает задачи с исполнителей и рассылает информационные уведомления.

Вариант 3. Использование регламентного процесса отмены

Если аннулирование документа требует выполнения обратных регламентных процедур (возврат купленных билетов, аннуляция брони в гостинице, отмена приказа по кадрам), прерывания задач может быть недостаточно.

В этом случае эффективнее настроить отдельный шаблон процесса «Отмена командировки». При форс-мажоре пользователь запускает данный процесс на основании документа. В маршрут включаются задачи для конкретных служб (бухгалтерия, секретариат, кадры), что позволяет упорядоченно завершить все связанные хозяйственные операции.

← На главную