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

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

При разработке отчетов или кастомных механизмов в 1С:Документооборот программисты часто сталкиваются с ситуацией, когда стандартное соединение задачи со справочником ролей возвращает пустые значения (NULL). Разберем по шагам, почему это происходит, как устроена архитектура адресации в этой конфигурации и как правильно составить запрос для получения адреса электронной почты или других данных роли.

Анализ проблемы: Почему прямая связь не работает

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

Проанализируем ситуацию: справочник ПолныеРоли является вспомогательным механизмом системы адресации. Он хранит уникальные комбинации вида «Роль + Основной объект адресации + Дополнительный объект адресации». Это позволяет системе различать, например, роль «Бухгалтер» для «Филиала №1» и роль «Бухгалтер» для «Филиала №2».

Шаг 1: Правильное соединение через справочник ПолныеРоли

Для того чтобы добраться до искомой роли и её контактной информации, нам необходимо выстроить цепочку соединений. Выясним причину: данные о самой роли (наименование, настройки) хранятся в РолиИсполнителей, а задача ссылается на ПолныеРоли. При этом справочник ПолныеРоли является подчиненным по отношению к РолиИсполнителей (или связан через реквизит Владелец).

Посмотрим на пример правильной структуры запроса для получения ссылки на роль:


ВЫБРАТЬ
    Задача.Ссылка КАК ЗадачаСсылка,
    Задача.РольИсполнителя КАК ПолнаяРоль,
    ПолныеРоли.Владелец КАК ИстиннаяРоль
ИЗ
    Задача.ЗадачаИсполнителя КАК Задача
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПолныеРоли КАК ПолныеРоли
    ПО Задача.РольИсполнителя = ПолныеРоли.Ссылка
ГДЕ
    Задача.Дата > &Дата

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

Шаг 2: Получение контактной информации (Адрес ЭП)

В современных версиях конфигураций на базе БСП (Библиотеки стандартных подсистем), к которым относится и 1С:Документооборот, контактная информация может храниться двумя способами: в табличной части справочника или в отдельном регистре сведений. Если вы видите, что табличная часть КонтактнаяИнформация внутри справочника пуста, значит, данные хранятся в регистре.

Рассмотрим подробнее вариант получения Email роли через регистр сведений КонтактнаяИнформация. Это наиболее универсальный и надежный способ:


ВЫБРАТЬ
    Задача.Ссылка КАК ЗадачаСсылка,
    КонтактнаяИнформация.Представление КАК АдресЭП
ИЗ
    Задача.ЗадачаИсполнителя КАК Задача
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПолныеРоли КАК ПолныеРоли
        ПО Задача.РольИсполнителя = ПолныеРоли.Ссылка
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
        ПО ПолныеРоли.Владелец = КонтактнаяИнформация.Объект
        И КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)

Важный момент: Обратите внимание, что мы соединяем регистр не с задачей, а с ПолныеРоли.Владелец (который является ссылкой на роль). Также обязательно фильтруем по Типу контактной информации, чтобы не получить несколько строк (телефон, адрес и т.д.).

Шаг 3: Работа с табличной частью «Предметы»

Частой ошибкой начинающих разработчиков (как показано в сообщениях форума) является попытка связать роль с табличной частью Предметы задачи. Выясним причину: в табличной части Предметы хранятся ссылки на документы, файлы или иные объекты, которые являются основанием для задачи. Информация об исполнителе, его роли и сроках находится в шапке (в самой таблице Задача.ЗадачаИсполнителя).

Если вам нужно получить данные по задаче вместе с её предметами, запрос должен выглядеть так:


ВЫБРАТЬ
    ЗадачаПредметы.Ссылка КАК СсылкаЗадача,
    ЗадачаПредметы.Предмет КАК ПредметДокумент,
    ПолныеРоли.Владелец КАК РольИсполнителя,
    КИ.АдресЭП КАК ПочтаРоли
ИЗ
    Задача.ЗадачаИсполнителя.Предметы КАК ЗадачаПредметы
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Задача.ЗадачаИсполнителя КАК ЗадачаШапка
        ПО ЗадачаПредметы.Ссылка = ЗадачаШапка.Ссылка
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПолныеРоли КАК ПолныеРоли
        ПО ЗадачаШапка.РольИсполнителя = ПолныеРоли.Ссылка
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РолиИсполнителей.КонтактнаяИнформация КАК КИ
        ПО ПолныеРоли.Владелец = КИ.Ссылка

Особенности адресации в Документообороте 3.0

Проанализируем изменения в новой версии 3.0. Система стала гибче, и теперь вместо жесткой привязки к ролям часто используются объекты исполнителей. Однако принцип использования справочника ПолныеРоли сохранился для обеспечения совместимости процессов.

Если вам необходимо найти не почту самой роли, а почту конкретных людей, которые в данный момент исполняют эту роль, вам потребуется обратиться к регистру сведений ИсполнителиЗадач. Рассмотрим этот сценарий:

  1. Из задачи получаем РольИсполнителя (это ссылка на ПолныеРоли).
  2. Из ПолныеРоли извлекаем Владелец (Роль), ОсновнойОбъектАдресации и ДополнительныйОбъектАдресации.
  3. Идем в регистр РегистрСведений.ИсполнителиЗадач и делаем срез последних или выборку по этим трем полям.
  4. Получаем список Пользователей и уже у них запрашиваем контактную информацию.

Этот путь сложнее, но он позволяет отправить уведомление конкретным людям, если у самой роли общий ящик не заведен. Помните, что в 1С:Документооборот за ролью может стоять десяток сотрудников, и связка через ПолныеРоли — единственный способ корректно определить адресатов с учетом объектов адресации (организаций, подразделений, проектов).

Резюме

Для успешного решения задачи связывания объектов соблюдайте следующую последовательность:

Такой подход гарантирует получение корректных данных и отсутствие пустых значений в ваших отчетах и запросах.

← На главную