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

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

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

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

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

Причина проблемы и ограничения типового функционала 1С:ДО 2.1

Прежде чем перейти к решениям, проанализируем логику работы программы. Шаблон комплексного процесса в версии 2.1 позволяет жестко зафиксировать автора для каждого действия. Однако настроить схему динамически штатными средствами администрирования в пользовательском режиме невозможно по двум причинам:

  1. Поле Автор в карточке задачи или процесса должно содержать конкретное значение из справочника Пользователи. На этапе проектирования шаблона мы не знаем, какой именно сотрудник из роли «Петровы» возьмет задачу в работу и выполнит её.
  2. Если оставить автора по умолчанию, система подставит инициатора бизнес-процесса (Иванова).

Для обхода этих ограничений мы можем применить несколько подходов.

Решение 1. Использование графической схемы процесса и скриптов (для разработчиков)

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

При переходе от точки действия «Согласование Петровым» к точке «Согласование Сидоровым» мы можем вставить программный код в обработчик «Перед стартом» процесса для Сидорова или использовать промежуточный элемент-скрипт.

Алгоритм работы программного кода следующий:

  1. Найти выполненную задачу предыдущего шага («Согласование Петровым») в рамках текущего комплексного процесса.
  2. Получить значение реквизита ФактическийИсполнитель из этой задачи. Именно этот реквизит хранит ссылку на конкретного пользователя, который нажал кнопку «Согласовано», будучи участником роли.
  3. Записать полученного пользователя в реквизит Автор для нового (стартующего) бизнес-процесса согласования с Сидоровым.

Посмотрим на пример реализации такого скрипта в точке маршрута:


// Определяем переменные для поиска выполненной задачи
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
    |	ЗадачаИсполнителя.ФактическийИсполнитель КАК ФактическийИсполнитель
    |ИЗ
    |	Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
    |ГДЕ
    |	ЗадачаИсполнителя.БизнесПроцесс = &СсылкаНаКомплексныйПроцесс
    |	И ЗадачаИсполнителя.Выполнена = ИСТИНА
    |	И ЗадачаИсполнителя.РольИсполнителя = &РольПетров
    |УПОРЯДОЧИТЬ ПО
    |	ЗадачаИсполнителя.ДатаЗавершения УБЫВ";

Запрос.УстановитьПараметр("СсылкаНаКомплексныйПроцесс", БизнесПроцессСсылка); // Ссылка на текущий комплексный процесс
Запрос.УстановитьПараметр("РольПетров", Справочники.РолиИсполнителей.НайтиПоНаименованию("Петров"));

РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
    Выборка = РезультатЗапроса.Выбрать();
    Выборка.Следующий();
    
    КонкретныйПетров = Выборка.ФактическийИсполнитель;
    
    // Устанавливаем автора для следующего шага процесса.
    // В обработчике "Перед стартом" подчиненного процесса доступна переменная "БизнесПроцесс" (формируемое действие)
    Если ЗначениеЗаполнено(КонкретныйПетров) Тогда
        ОбъектПроцесса = НаправлениеСидорову.ПолучитьОбъект(); // НаправлениеСидорову - ссылка на подчиненный БП
        ОбъектПроцесса.Автор = КонкретныйПетров;
        ОбъектПроцесса.Записать();
    КонецЕсли;
КонецЕсли;

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

Решение 2. Подписка на события (альтернативный программный метод)

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

Для этого программисту необходимо создать подписку на событие ПередЗаписью для бизнес-процесса БизнесПроцессСсылка.Согласование (или общего класса задач). В обработчике подписки мы анализируем:

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

Решение 3. Методологический подход (без программирования)

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

Вместо того чтобы пытаться автоматически связать процессы через шаблон, мы можем использовать механизм подчиненных процессов:

  1. Инициатор Иванов стартует процесс. Первым шагом задача приходит на роль «Петров».
  2. Сотрудник, выполняющий роль Петрова, принимает задачу к исполнению и открывает её карточку.
  3. Вместо того чтобы сразу согласовать документ, Петров использует стандартную кнопку «Направить» на панели задачи и создает подчиненный процесс (например, согласование или исполнение) на Сидорова.
  4. При создании подчиненного процесса его автором автоматически становится текущий пользователь (то есть конкретный Петров, который нажал кнопку), а не Иванов.
  5. Сидоров получает задачу, выполняет её, и Петрову приходит уведомление о завершении подчиненного процесса.
  6. Петров видит результат работы Сидорова, возвращается в свою основную задачу и принимает окончательное решение («Согласовано» или «Не согласовано»), которое уходит обратно Иванову.

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

Решение 4. Как эта задача решается в 1С:Документооборот 3.0

Если ваша организация использует или планирует переход на 1С:Документооборот 3.0, то архитектура работы с процессами там претерпела значительные изменения. В новой редакции больше нет «комплексных процессов» в привычном понимании версии 2.1. Вместо них используется единый гибкий инструмент — «Обработка документа».

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

Таким образом, переопределение авторов и исполнителей шагов на основании истории выполнения процесса в версии 3.0 является стандартным и легко настраиваемым сценарием.

← На главную