К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как получить email пользователя в 1С

Как получить email пользователя в 1С: код для обычных и управляемых форм, работа с контактной информацией, типовые функции БСП, ошибки и проверка результата.

Адрес электронной почты пользователя в 1С может храниться в разных местах: в списке пользователей информационной базы, в справочнике «Пользователи» с табличной частью контактной информации, в карточке физического лица или контрагента. Поэтому универсального однострочного решения нет — сначала нужно понять, какой именно email требуется и где он фактически заполнен в вашей конфигурации.

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

Ниже разобраны основные способы получения email: через объект ПользовательИнформационнойБазы, через механизм контактной информации БСП и через связанные справочники. Для каждого способа приведены условия применимости, примеры кода и способы проверить результат.

Определите, где хранится email в вашей конфигурации

Прежде чем писать код, откройте карточку пользователя в режиме предприятия и посмотрите, заполнен ли адрес и в каком поле. В типовых конфигурациях (УТ, ERP, БП, ЗУП) email хранится в табличной части «Контактная информация» справочника «Пользователи», а физически — в регистре сведений «Контактная информация» или в служебных полях табличной части, в зависимости от версии БСП.

Отдельно существует адрес в настройках пользователя информационной базы — тот, что задаётся в конфигураторе или в разделе администрирования. Он используется, например, для восстановления пароля и системных рассылок, и в прикладных данных его обычно не видно. Это два разных адреса, и они могут не совпадать.

Если требуется почта не «пользователя-учётной записи», а человека как сотрудника или клиента, адрес может лежать в справочниках «Физические лица», «Сотрудники» или «Контрагенты». Уточните у постановщика задачи, какой именно адрес нужен, — от этого зависит весь дальнейший код.

Справочник «Пользователи»Контактная информация БСП

Типовой вариант для УТ, ERP, БП, ЗУП

Пользователь ИБСвойство АдресЭлектроннойПочты

Задаётся в конфигураторе, часто пустое

Физлицо / контрагентСвоя контактная информация

Когда нужна почта человека, а не учётной записи

Получение email через контактную информацию БСП

В конфигурациях на базе БСП правильный способ — использовать программный интерфейс подсистемы «Контактная информация», а не лезть в табличную часть напрямую. Основная функция — УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(), которая возвращает таблицу значений с адресами нужного вида.

Типовой фрагмент кода для получения email текущего пользователя выглядит так:

ТекущийПользователь = Пользователи.ТекущийПользователь();

ВидыКИ = Новый Массив;

ВидыКИ.Добавить(Справочники.ВидыКонтактнойИнформации.EmailПользователя);

ТаблицаКИ = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(

ТекущийПользователь, ВидыКИ, ТекущаяДатаСеанса(), Ложь);

Если ТаблицаКИ.Количество() > 0 Тогда

Email = ТаблицаКИ[0].АдресЭП;

Иначе

Email = "";

КонецЕсли;

Поле АдресЭП содержит сам адрес, поле Представление — отображаемое значение. В новых версиях БСП модуль может называться УправлениеКонтактнойИнформацией или вызываться через ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией") — проверьте актуальное имя в своей конфигурации через синтакс-помощник.

Адрес из пользователя информационной базы

Если конфигурация самописная или нужен именно системный адрес учётной записи, используйте менеджер пользователей информационной базы. Этот способ не зависит от БСП и работает на любой платформе 8.3:

ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();

Email = ПользовательИБ.АдресЭлектроннойПочты;

Для произвольного пользователя, а не текущего, применяется метод НайтиПоИмени() или НайтиПоУникальномуИдентификатору(). Учтите, что поиск по имени чувствителен к точному написанию, а метод может вернуть Неопределено — это нужно обрабатывать, иначе получите ошибку обращения к свойству.

Главное ограничение способа: поле «Адрес электронной почты» в свойствах пользователя ИБ администраторы заполняют редко. Чаще всего вы получите пустую строку, даже если в карточке пользователя в справочнике email указан. Поэтому для прикладных задач (рассылки, уведомления) этот вариант подходит плохо.

Email физического лица или контрагента

Когда требуется почта сотрудника или клиента, ссылка на справочник «Пользователи» не поможет. В ЗУП адрес хранится у физического лица, в УТ и ERP — у партнёра или контрагента, в БП — у контрагента. Механика та же: функция КонтактнаяИнформацияОбъекта(), но с другим видом контактной информации, например EmailКонтрагента или EMailФизическиеЛица.

Как связать пользователя с физлицом: в типовых конфигурациях у элемента справочника «Пользователи» есть реквизит «Физическое лицо». Получив его, вы обращаетесь к контактной информации уже физлица. В ЗУП дополнительно может понадобиться переход от физлица к сотруднику через регистр или функции кадрового учёта.

Порядок действий для email физлица
  1. 1
    Получите ссылку на текущего пользователя через Пользователи.ТекущийПользователь()
  2. 2
    Прочитайте реквизит «ФизическоеЛицо» через ОбщегоНазначения.ЗначениеРеквизитаОбъекта()
  3. 3
    Вызовите КонтактнаяИнформацияОбъекта() для физлица с видом EMailФизическиеЛица
  4. 4
    Проверьте, что таблица результата не пустая, и возьмите АдресЭП

Массовое получение адресов и производительность

Если email нужен для списка пользователей — например, для рассылки всем согласующим, — не вызывайте функцию контактной информации в цикле по одному объекту. Функция КонтактнаяИнформацияОбъектов() (во множественном числе) принимает массив ссылок и возвращает все адреса одним запросом, что заметно быстрее при десятках и сотнях получателей.

Альтернатива — прямой запрос к табличной части или регистру контактной информации. Он даёт максимальную скорость, но привязывает код к внутренней структуре хранения БСП, которая менялась между версиями. Такой запрос оправдан только в обработках массовой выгрузки, и его нужно тестировать после каждого обновления конфигурации.

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| ПользователиКИ.Ссылка КАК Пользователь,

| ПользователиКИ.АдресЭП КАК Email

|ИЗ

| Справочник.Пользователи.КонтактнаяИнформация КАК ПользователиКИ

|ГДЕ

| ПользователиКИ.Вид = &ВидEmail";

Запрос.УстановитьПараметр("ВидEmail",

Справочники.ВидыКонтактнойИнформации.EmailПользователя);

Сравнение подходов

Функции БСП

Устойчивы к обновлениям, но требуют наличия БСП и знания видов КИ

Прямой запрос к табличной части

Быстро при массовой выборке, но ломается при смене структуры хранения

Свойство пользователя ИБ

Не зависит от конфигурации, но поле обычно не заполнено

Проверка результата и типичные ошибки

После получения адреса проверьте три вещи: строка не пустая, адрес соответствует формату (наличие «@» и домена), адрес принадлежит нужному объекту. Для формальной проверки в БСП есть функция ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям() — используйте её вместо самописных проверок.

Самая частая ошибка — молчаливая пустота: функция вернула пустую таблицу, код не упал, но письмо никому не ушло. Всегда обрабатывайте случай отсутствия адреса явно: пишите предупреждение в журнал регистрации или сообщайте пользователю, у кого именно email не заполнен.

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

Типичные ошибки
01
Обращение к АдресЭП без проверки, что таблица результата не пустая — ошибка индекса или пустая отправка
02
Поиск пользователя ИБ по имени без проверки на Неопределено — падение кода
03
Использование системного адреса пользователя ИБ вместо контактной информации — адрес пуст, хотя в карточке заполнен
04
Чтение чужих карточек без привилегированного режима — пустой результат из-за прав доступа

Отправка письма после получения адреса

Полученный email обычно передаётся в объект ИнтернетПочтовоеСообщение вместе с учётной записью почты (Справочники.УчетныеЗаписиЭлектроннойПочты) и отправляется через ИнтернетПочта. В БСП есть готовая процедура РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(), которая скрывает детали SMTP-соединения.

Учтите, что отправка требует настроенной системной учётной записи в разделе администрирования. Если письма не уходят, проблема почти всегда в настройках почтового сервера (порт, шифрование, пароль приложения), а не в коде получения адреса. Проверяйте эти части независимо друг от друга.

Контрольные точки

Как проверить результат

Значение переменной Email
Норма

Строка с адресом в формате имя@домен

Тревожный признак

Пустая строка или Неопределено

Журнал регистрации при отправке
Норма

Нет ошибок почтового соединения

Тревожный признак

Ошибки авторизации SMTP или таймауты

Тестовое письмо
Норма

Дошло до нужного получателя с корректной темой

Тревожный признак

Письмо ушло не тому адресату или в спам

Частые вопросы

Почему функция возвращает пустой результат, хотя email в карточке есть?

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

Как получить email пользователя, который сейчас не вошёл в базу?

Через справочник «Пользователи» — найдите элемент по наименованию или коду и вызовите КонтактнаяИнформацияОбъекта() для его ссылки. Авторизация пользователя в сеансе не требуется: контактная информация хранится в базе постоянно.

Можно ли получить email без БСП в самописной конфигурации?

Да, если вы сами храните адреса — например, в реквизите справочника пользователей или в собственном регистре сведений. Тогда достаточно обычного запроса или обращения к реквизиту. Стандартный механизм контактной информации без БСП недоступен.

Чем отличается АдресЭП от Представления в результате функции?

АдресЭП — это чистый адрес для программной отправки письма. Представление — отображаемое значение, которое может включать дополнительное оформление. Для поля «Кому» почтового сообщения используйте именно АдресЭП.

Безопасно ли выгружать email пользователей во внешний файл?

Адреса сотрудников — персональные данные, поэтому выгрузку стоит ограничить служебными целями, хранить файл в защищённом каталоге и удалять после использования. Не передавайте список адресов третьим лицам и не публикуйте его в открытом доступе.

Как узнать email пользователя в тонком клиенте без изменения кода?

Откройте раздел администрирования, перейдите в список пользователей и откройте карточку нужного человека — адрес виден на закладке с контактной информацией. Если у вас нет доступа к этому разделу, запросите данные у администратора базы.

Итог

Что важно запомнить

В типовых конфигурациях email берите через УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта() с видом EmailПользователя, для списков — через версию функции для массива объектов. Всегда проверяйте результат на пустоту, учитывайте права доступа и тестируйте отправку на себе перед массовой рассылкой.