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