Как реализовать автоматический перезапуск процесса согласования при изменении файла в 1С:Документооборот

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

В процессе внедрения и сопровождения системы 1С:Документооборот (1С:ДО) администраторы и разработчики часто сталкиваются с логической дилеммой: что делать, если в процессе согласования файл договора или соглашения был изменен инициатором? По умолчанию система не "обнуляет" результаты уже выполненных задач согласования, что может привести к ситуации, когда одни пользователи согласовали одну версию документа, а другие — уже обновленную.

В этой статье мы подробно разберем, как решить эту проблему, используя штатные механизмы системы, организационные подходы и программные доработки. Мы проанализируем ситуацию как для версии 2.1, так и для новой архитектуры версии 3.0.

Методология работы с предметами процесса

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

  1. Запуск процесса "Согласование" напрямую, где файлы добавляются просто как "Предметы и файлы" в карточке процесса.
  2. Создание карточки Внутреннего документа, добавление файла в него и запуск процесса на основании этого документа.

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

Решение 1: Использование механизма «Доступность по состоянию»

Это самый правильный "штатный" путь, не требующий написания кода. Суть метода заключается в том, чтобы запретить любое редактирование файла, пока он находится на этапе согласования.

Разберем по шагам настройку этого механизма:

  1. Перейдем в настройки вида документа и включим использование состояний.
  2. В разделе Настройка доступности по состоянию для состояния "На согласовании" установим запрет на редактирование файлов и полей карточки для всех пользователей, кроме администратора.
  3. Теперь, если документ запущен в работу, инициатор просто не сможет сохранить новую версию файла "тихо", пока процесс не будет прерван или завершен.

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

Решение 2: Использование итераций согласования (этап «На доработку»)

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

В схеме процесса Согласование предусмотрен результат "Согласовано с замечаниями" или "Не согласовано". Если хотя бы один из участников выбирает такой вариант, процесс переходит на этап На доработку к инициатору.

Проанализируем действия инициатора на этапе доработки:

  1. Инициатор открывает задачу доработки, вносит изменения в файл (создается новая версия).
  2. Инициатор завершает задачу доработки с результатом "Исправлено".
  3. Система автоматически запускает новую итерацию согласования.

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

Решение 3: Программный перезапуск через дополнительные обработчики

Если ваша бизнес-логика требует, чтобы процесс "обнулялся" или прерывался автоматически в момент нажатия кнопки "Сохранить" в MS Word, нам потребуется прибегнуть к программированию. В 1С:ДО для этого предусмотрен механизм Дополнительные обработчики событий.

Рассмотрим алгоритм реализации такого обработчика:

  1. Создадим новый обработчик с привязкой к событию При создании версии файла.
  2. В коде обработчика необходимо найти все активные бизнес-процессы, в которых данный файл является основным предметом.
  3. Для найденных процессов вызовем метод прерывания.

Пример логики кода на языке 1С (схематично):


// Получаем список активных процессов по предмету
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ БизнесПроцесс.Согласование ГДЕ Предмет = &Предмет И Завершен = ЛОЖЬ";
Запрос.УстановитьПараметр("Предмет", СсылкаНаДокументИлиФайл);
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    ОбъектБП = Выборка.Ссылка.ПолучитьОбъект();
    // Используем стандартный метод для остановки всех задач
    ОбъектБП.Состояние = Перечисления.СостоянияБизнесПроцессов.Прерван;
    ОбъектБП.Записать();
    
    // Опционально: создаем уведомление инициатору или запускаем новый процесс
КонецЦикла;

Нужно учитывать, что метод ОбъектБП.Прервать() корректно помечает задачи как выполненные с результатом "Прервано", что позволяет сохранить историю, но при этом очищает список текущих дел у согласующих.

Особенности реализации в 1С:Документооборот 3.0

Посмотрим на ситуацию в версии 3.0. Здесь архитектура процессов была полностью пересмотрена. Вместо отдельных шаблонов бизнес-процессов используются Правила обработки документов.

В 3.0 автоматизация "перезапуска" стала еще доступнее:

  1. Скрипты в правилах: Прямо в настройках действия "Согласование" можно прописать условия выполнения и действия при возврате.
  2. Автоматические действия: Можно настроить систему так, что при изменении файла (событие объекта) состояние обработки документа автоматически сбрасывается в начальное.
  3. Контроль версий: Система 3.0 лучше визуализирует итерации, и согласующий сразу видит в своей задаче, что он уже согласовывал версию №1, а сейчас на рассмотрении версия №2.

Выводы и рекомендации

Подведем итог нашему анализу. Выбор метода зависит от требуемой жесткости контроля:

Помните, что автоматический перезапуск процесса без уведомления участников может вызвать путаницу. Поэтому при программной реализации всегда добавляйте запись в Журнал регистрации или отправляйте краткое уведомление всем участникам о том, что процесс был перезапущен в связи с изменением файла.

← На главную