В 1С Документооборот (рассматривается версия 2.1.25, но вопрос актуален и для других относительно свежих версий конфигурации) есть несколько возможностей построить процессы согласования (исполнения подписания и т.д.) для документов:
1. Использование простых процессов, вручную запускаемых пользователем из документа в нужном ему порядке.
2. Использование комплексных процессов - процессы, каждый этап которого может состоять из "простых" процессов.
Есть возможность составлять комплексные процессы в виде схемы и в виде таблицы.
Первый вариант, а также вариант с использованием комплексного процесса в виде таблицы здесь рассматривать не буду, так как они годятся в основном для несложных вариантов маршрутов. Максимальный функционал доступен при использовании схем комплексных процессов.
В процессе работы выявили для себя несколько минусов использования схем комплексных процессов:
1. Неудобный редактор:
- при копировании блоков данные внутри них очищаются (результат копирования на скриншоте)
- редактор может подвисать при перемещении или копирования большого количества блоков,
- соединяющие линии иногда ведут себя непредсказуемо
(линии на скриншоте выше не поддаются выравниванию)
- нельзя добавить несколько блоков завершения, из за этого линий на схеме может стать очень много и их нужно долго и утомительно "тянуть" до блока завершения.
2. Не работает автоматическая адресация по объектам адресации (из ролей исполнителей), нужно помимо указания объекта адресации в роли, указывать еще дополнительно условие в блоке, где выбрана эта роль.
К примеру добавим роль с объектом адресации организация:
И внесем в нее двух исполнителей по организациям:
Для того чтобы исполнителем по документу был участник по определенной организации, блок в маршруте придется заполнить таким образом:
Создать условия маршрутизации по организациям
Для второй организации также потребуется условие. После этого нужно будет указать их в самом блоке:
А теперь предположим, что у нас таким организаций 10... Удобства добавляет вышеупомянутый пункт, что такой блок на схеме скопировать не получится, каждый раз придется заполнять вручную, за что отдельная "благодарность" разработчикам.
3. При использовании больших схем пользователю сложно разобраться по какому маршруту пойдет его документ.
4. Для замены исполнителя в маршруте приходится долго выискивать нужные строки внутри блоков, открывая каждый.
В итоге после запуска согласования документов через Документооборот на тех поддержку свалилось множество заявок от пользователей с просьбой помочь понять кто будет согласовывать их документ. Было принято решение оптимизировать этот механизм.
Было разработано следующее решение:
1. В шаблон комплексного процесса добавлена табличная часть Порядок участников со следующими полями:
- Этап (добавленный справочник, см. пункт 2)
- Исполнитель
- Условие маршрутизации
Условие маршрутизации в данном случае дает максимальную гибкость отборов, но с другой стороны приходится вносить множество условий. Если ваши процессы проще, можно добавить в колонки другие отборы, например по организации или виду документа, принцип работы в данном случае не меняется.
Пример таблицы со множеством отборов:
2. При записи шаблона комплексного процесса для каждого блока, в котором выполняется действие (например согласование, исполнение и т.д.) добавляется элемент справочника Этапы процессов.
3. Был доработан механизм создания каждого этапа процесса.
4. Создан служебный элемент справочника Пользователи для выбора в схемах процессов в качестве исполнителя ("Робот ДО").
Принцип работы:
Создается шаблон процесса, в нем добавляются необходимые блоки - согласования, утверждения, обработки и т.д. После этого шаблон записывается. Для каждого блока создаются элементы справочника Этапы процессов, названия которого совпадают с названиями блоков. Во всех блоках всегда указываем исполнителем пользователя Робот ДО. Функционирует возможность в блоке указать порядок выполнения (по очереди, всем сразу).
Теперь в табличной части Порядок участников мы выбираем исполнителей (элементы справочника Полные роли или справочника Пользователи), а также условия, при которых исполнитель участвует в данном этапе.
Для обработки условий используется типовой справочник Условия маршрутизации, которые позволяет задавать практически любые условия по предмету согласования.
Для проверки выполняется ли условие используется типовая функция (общий модуль РаботаСУсловиямиМаршрутизации.ПроверитьПрименимостьУсловияМаршрутизацииКОбъекту).
После того как мы внесли всех участников процесса, задали им условия, можно использовать процесс для запуска согласования документов.
При запуске комплексного процесса перед созданием простых процессов по этапам мы проверяем в коде (общий модуль РаботаСКомплекснымиБизнесПроцессамиСерверПереопределяемый.СоздатьПроцессПоДействиюДоЗаписиПроцесса) какие участники по этому этапу указаны в таблице и подставляем их вместо строки с Роботом ДО - он выполняет роль шаблона строки. Если участники не заданы задача попадет Роботу ДО и можно будет сразу понять что заполнение таблицы неверное, а созданную задачу перенаправить нужному сотруднику.
В шаблоне комплексного процесса можно указать назначения - виды документов, для которых возможен запуск этого процесса. По этому значению можно еще до запуска процесса определить по документу (если для вида этого документа задан всего один шаблон процесса), какие участники будут согласовывать этот документ - для этого нужно пройтись по таблице Порядок участников и вывести результат для пользователя, например, в таблицу на отдельной вкладке или выводить при помощи кнопки Показать участников.
Второй вариант вывести на форму создания нового комплексного процесса таблицу, в которую выводить Порядок участников отобрав те, которые проходят по условиям документа:
У нас используются обе эти возможности. Также добавлен вывод в отдельную колонку в документе текущих исполнителей роли, если в Порядок участников процесса внесена роль (см. скриншот выше).
В результате мы имеем следующие возможности:
- Пользователь до запуска процесса может узнать его участников в удобном виде
- Схемы процессов значительно упрощаются
- Участников процессе легче администрировать
- Весь процесс заполнения шаблона процесса можно переложить на менее квалифицированных пользователей (таблицу заполнять проще чем схему)
Интересно мнение сообщества на подобную схему работы, как и предложения по улучшению. Функционал используется в рабочей базе несколько месяцев, на матрицах процессов с сотнями строк исполнителей и условий. При наличии интереса могу описать полностью какие изменения в коде и куда внести, с какими сложностями столкнулись и вопросы производительности.