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

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

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

Для начала проанализируем стандартную механику. Бизнес-процесс «Согласование» имеет свою внутреннюю логику и три основных результата:

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

Рассмотрим, как обойти это ограничение.

Решение 1: Использование статуса «Согласовано с замечаниями» и условий (рекомендуемый способ)

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

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

  2. Настройте условия в схеме комплексного процесса. После блока параллельного согласования добавьте в схему элемент «Условие». Это условие будет анализировать результат предыдущего шага.

  3. Настройте ветвление маршрута.

    • Ветка 1 (Все согласовано). Условие должно проверять, что результат согласования — «Согласовано». Если это так, процесс движется дальше по основной ветке (например, на согласование финансовому директору).
    • Ветка 2 (Требуется доработка). Второе условие должно проверять, что результат согласования — «Согласовано с замечаниями». Если условие выполняется, процесс направляется по альтернативной ветке: сначала на задачу «Ознакомление» для Юриста, а после него — на задачу «Исполнение» для инициатора с текстом вроде «Внести исправления по замечаниям и отправить на повторное согласование». После этого шага можно зациклить процесс, направив его обратно на первый этап согласования.

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

Решение 2: Программная смена автора процесса согласования

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

Разберем по шагам:

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

  2. Добавьте обработчик события. В схеме процесса перед блоком «Согласование», для которого нужно изменить маршрут, вставьте обработчик события «Перед стартом дочернего процесса».

  3. Напишите код для подмены автора. В обработчике нужно написать скрипт, который найдет нужный дочерний процесс (наше согласование) и изменит в его шаблоне автора. В качестве нового автора можно указать, например, пользователя с ролью «Юрист».

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

    
    // Получаем параметры схемы текущего комплексного процесса
    ПараметрыДействийСхемы = Справочники.СхемыКомплексныхПроцессов.ПараметрыДействийСхемы(Процесс.Схема);
    
    // Находим основной предмет процесса (наш документ)
    ОсновнойПредмет = Неопределено;
    Для Каждого СтрокаПредмета Из Процесс.Предметы Цикл
        Если СтрокаПредмета.РольПредмета = Перечисления.РолиПредметов.Основной Тогда
            ОсновнойПредмет = СтрокаПредмета.Предмет;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    Если ЗначениеЗаполнено(ОсновнойПредмет) Тогда
        // В этом примере мы берем пользователя из реквизита "Подготовил"
        // Здесь вы можете найти вашего Юриста любым способом
        НовыйАвтор = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОсновнойПредмет, "Подготовил");
        
        // Ищем нужную точку действия в схеме по ее имени.
        // ВАЖНО: имя берется из свойств точки на схеме (ПКМ -> Свойства).
        // По умолчанию это "Действие1", "Действие2" и т.д.
        ПараметрыСогласования = ПараметрыДействийСхемы.Найти("Действие2");
    
        Если ПараметрыСогласования <> Неопределено Тогда
            // Получаем объект шаблона процесса согласования
            ШаблонПроцесса = ПараметрыСогласования.ШаблонПроцесса.ПолучитьОбъект();
            // Подменяем автора
            ШаблонПроцесса.Автор = НовыйАвтор;
            // Записываем изменения
            ШаблонПроцесса.Записать();
        КонецЕсли;
    КонецЕсли;
    

    Важный момент по отладке: если при выполнении кода возникает ошибка «Значение не является значением объектного типа (ШаблонПроцесса)», это почти наверняка означает, что строка ПараметрыСогласования = ПараметрыДействийСхемы.Найти("ИмяВашегоДействия"); вернула Неопределено. Проверьте имя точки действия в свойствах схемы. Это не заголовок, который вы видите на схеме («Согласование договора»), а внутреннее имя («Действие2»).

  4. Продумайте дальнейший маршрут. После того как юрист получит задачу «Ознакомиться с результатом согласования» и выполнит ее, комплексный процесс пойдет дальше по схеме. Чтобы вернуть документ инициатору на доработку, просто поставьте в схеме после блока согласования и его условий явную задачу «Исполнение» на роль «Автор процесса». Таким образом, инициатор не выпадет из цепочки, а получит свою задачу после того, как юрист проведет анализ.

Этот способ мощный и гибкий, но требует аккуратности в настройке и понимания объектной модели бизнес-процессов 1С:Документооборот.

← На главную