В процессе работы с 1С:Документооборот 2.1 часто возникают ситуации, когда один из участников согласования ошибочно поставил визу или когда состав согласующих лиц изменился уже в процессе выполнения задачи. Типовая реакция системы при прерывании процесса — аннулирование всех текущих результатов, что крайне неудобно, если остальные десять человек уже успешно подписали документ. Разберем подробно, как можно удалить визу пользователя «на лету», сохранив при этом ход выполнения процесса.
Проанализируем самый простой и быстрый метод, который доступен пользователю с правами Администратора. В 1С:Документооборот 2.1 механизм работы с визами реализован таким образом, что результаты согласования отображаются на специальной вкладке предмета процесса.
Рассмотрим пошагово, как это сделать:
При выполнении этого действия система выдаст предупреждение: «Виза с заполненным результатом будет помещена в историю». После нажатия кнопки «Продолжить» виза визуально исчезнет из основного списка и переместится в раздел «История согласования». Если в результате таких действий возникла ошибка, может потребоваться специальное исправление виз во внутреннем документе. Нажмем Записать и закрыть, чтобы зафиксировать изменения в базе данных.
Выясним причину, по которой простое удаление визы может быть недостаточно. Виза — это результат выполнения задачи. Если мы удалим только визу, бизнес-процесс будет считать, что этап пройден, и пойдет дальше. Если нам нужно, чтобы пользователь переголосовал или чтобы вместо него это сделал кто-то другой, правильнее работать с объектом ЗадачаИсполнителя.
Разберем этот алгоритм совместными усилиями:
Выполнена = Истина.Выполнена = Ложь.РезультатВыполнения и дату исполнения.После этих манипуляций задача снова появится у пользователя в списке «Задачи мне». Это самый «чистый» способ, так как он не нарушает логическую цепочку бизнес-процесса.
Иногда требуется автоматизировать процесс или очистить данные более глубоко. В 1С:Документооборот 2.1 информация о визах хранится в нескольких местах: в табличной части документа, в регистре сведений ВизыСогласования и во внутренних таблицах бизнес-процесса. Для корректного внесения изменений часто применяется корректировка истории выполнения в бизнес-процессах.
Посмотрим на пример кода, который позволяет найти и пометить на удаление запись о визе в регистре:
// Пример поиска и удаления записи в регистре виз
НаборЗаписей = РегистрыСведений.ВизыСогласования.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Документ.Установить(СсылкаНаДокумент);
НаборЗаписей.Отбор.Исполнитель.Установить(НужныйПользователь);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() > 0 Тогда
Для Каждого Запись Из НаборЗаписей Цикл
// Можно либо удалить запись, либо пометить ее как удаленную для истории
Запись.Удалена = Истина;
КонецЦикла;
НаборЗаписей.Записать();
КонецЕсли;
Проанализируем ситуацию: если мы программно меняем визы, нам также может потребоваться обновить состояние документа. За это отвечает регистр сведений СостоянияДокументов. Если после удаления визы документ «завис» в состоянии «На согласовании», хотя все остальные уже ответили, нужно вручную или программно вызвать процедуру обновления состояния.
Рассмотрим подробнее, почему удаление виз в незавершенном комплексном процессе может привести к ошибкам. В 10-15% случаев администраторы сталкиваются с тем, что при завершении последней задачи документ не меняет статус на «Согласован». В таких ситуациях администратору полезно иметь под рукой отчет, показывающий зависшие процессы в Документообороте.
Это происходит по следующим причинам:
Чтобы исправить «зависшее» состояние, нам нужно зайти в регистр СостоянияДокументов, найти запись по нашему предмету и убедиться, что текущее состояние соответствует действительности.
Подводя итог нашему разбору, выделим основные правила работы с визами в 1С:ДО 2.1:
Таким образом, мы выяснили, что архитектура 1С:Документооборот достаточно гибкая, чтобы позволять административные правки без прерывания бизнес-процессов, но требует внимательного отношения к регистрам сведений и состояниям объектов.