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