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