В процессе внедрения и сопровождения системы 1С:Документооборот (1С:ДО) администраторы и разработчики часто сталкиваются с логической дилеммой: что делать, если в процессе согласования файл договора или соглашения был изменен инициатором? По умолчанию система не "обнуляет" результаты уже выполненных задач согласования, что может привести к ситуации, когда одни пользователи согласовали одну версию документа, а другие — уже обновленную.
В этой статье мы подробно разберем, как решить эту проблему, используя штатные механизмы системы, организационные подходы и программные доработки. Мы проанализируем ситуацию как для версии 2.1, так и для новой архитектуры версии 3.0.
Прежде всего, разберем критически важный нюанс, который часто упускают начинающие администраторы. В 1С:ДО существует два принципиально разных способа запуска согласования:
Проанализируем ситуацию: если мы выбираем первый путь (без карточки документа), система лишается возможности отслеживать состояния объекта. Именно поэтому механизмы Доступность по состоянию в данном случае не работают. Для полноценного контроля за жизненным циклом документа всегда следует использовать карточку документа (внутреннего, входящего или исходящего). Рассмотрим, как это меняет логику работы.
Это самый правильный "штатный" путь, не требующий написания кода. Суть метода заключается в том, чтобы запретить любое редактирование файла, пока он находится на этапе согласования.
Разберем по шагам настройку этого механизма:
Выясним причину, почему это эффективно: такой подход дисциплинирует участников. Если инициатору нужно внести правку, он обязан либо прервать текущий процесс, либо дождаться возврата на доработку.
Если мы не хотим жестко блокировать файл, мы можем использовать стандартную логику циклического согласования. Рассмотрим, как это работает в типовом функционале:
В схеме процесса Согласование предусмотрен результат "Согласовано с замечаниями" или "Не согласовано". Если хотя бы один из участников выбирает такой вариант, процесс переходит на этап На доработку к инициатору.
Проанализируем действия инициатора на этапе доработки:
Важный момент: в настройках шаблона процесса можно указать, направлять ли документ на повторное согласование всем участникам или только тем, кто не согласовал в прошлый раз. Для обеспечения юридической чистоты рекомендуется всегда направлять "Всем заново", если предмет (файл) претерпел изменения.
Если ваша бизнес-логика требует, чтобы процесс "обнулялся" или прерывался автоматически в момент нажатия кнопки "Сохранить" в MS Word, нам потребуется прибегнуть к программированию. В 1С:ДО для этого предусмотрен механизм Дополнительные обработчики событий.
Рассмотрим алгоритм реализации такого обработчика:
При создании версии файла.Пример логики кода на языке 1С (схематично):
// Получаем список активных процессов по предмету
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ БизнесПроцесс.Согласование ГДЕ Предмет = &Предмет И Завершен = ЛОЖЬ";
Запрос.УстановитьПараметр("Предмет", СсылкаНаДокументИлиФайл);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ОбъектБП = Выборка.Ссылка.ПолучитьОбъект();
// Используем стандартный метод для остановки всех задач
ОбъектБП.Состояние = Перечисления.СостоянияБизнесПроцессов.Прерван;
ОбъектБП.Записать();
// Опционально: создаем уведомление инициатору или запускаем новый процесс
КонецЦикла;
Нужно учитывать, что метод ОбъектБП.Прервать() корректно помечает задачи как выполненные с результатом "Прервано", что позволяет сохранить историю, но при этом очищает список текущих дел у согласующих.
Посмотрим на ситуацию в версии 3.0. Здесь архитектура процессов была полностью пересмотрена. Вместо отдельных шаблонов бизнес-процессов используются Правила обработки документов.
В 3.0 автоматизация "перезапуска" стала еще доступнее:
Подведем итог нашему анализу. Выбор метода зависит от требуемой жесткости контроля:
Помните, что автоматический перезапуск процесса без уведомления участников может вызвать путаницу. Поэтому при программной реализации всегда добавляйте запись в Журнал регистрации или отправляйте краткое уведомление всем участникам о том, что процесс был перезапущен в связи с изменением файла.