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