Как получить текущего пользователя в 1С и почему ПользователиИнформационнойБазы возвращает пустое значение

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

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

Основная причина получения пустого пользователя

Рассмотрим типовую ситуацию. В коде модуля пишется функция для получения полного имени текущего пользователя:


Функция ТекущийСеансПользователь() Экспорт
    ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
    Возврат ТекущийПользователь.ПолноеИмя;
КонецФункции

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

Когда новые пользователи создаются через Конфигуратор, изменения сохраняются в конфигурации базы, но еще не применены к самой информационной базе. Если запустить сеанс «1С:Предприятие» без обновления конфигурации базы данных (клавиша F7 или пункт меню Конфигурация — Обновить конфигурацию базы данных), платформа считает, что авторизация выполнена от имени незаполненного пользователя информационной базы.

Вспомогательные факторы: контекст исполнения и авторизация

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

  1. Клиентский контекст: Объект ПользователиИнформационнойБазы доступен только на сервере, в толстом клиенте или во внешнем соединении. При попытке вызвать его на тонком или веб-клиенте произойдет ошибка компиляции или выполнения.
  2. Отсутствие авторизации: Если в базе не заведено ни одного пользователя или для пользователя отключена аутентификация платформы 1С, вход происходит под анонимным сеансом, где имя и полное имя будут пустыми строками.

Использование встроенных функций глобального контекста

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

  1. ИмяПользователя() — возвращает краткое имя (логин), под которым выполнен вход.
  2. ПолноеИмяПользователя() — возвращает полное имя пользователя, указанное в его настройках.

Разберем пример их применения:


ЛогинПользователя = ИмяПользователя();
ПолноеИмя = ПолноеИмяПользователя();

Преимущества данных функций:

  1. Работают во всех контекстах (как на сервере, так и на тонком или веб-клиенте).
  2. Выполняются мгновенно без создания дополнительных объектов платформы.

Архитектурное решение: Параметры сеанса

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

Для реализации этого подхода выполним следующие шаги:

  1. В дереве конфигурации создадим параметр сеанса ТекущийПользователь.
  2. В модуле сеанса пропишем процедуру инициализации УстановкаПараметровСеанса:

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

После этого из любой точки серверного кода можно обращаться к свойству ПараметрыСеанса.ТекущийПользователь.

Связывание пользователя ИБ со справочником

Если в конфигурации используется справочник Пользователи, его элементы связывают с пользователями информационной базы. Связывание выполняется по уникальному идентификатору (GUID) или по имени:


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

Подводя итог: если ПользователиИнформационнойБазы.ТекущийПользователь() возвращает пустой результат в новой базе, обновите конфигурацию БД по клавише F7. Если вам требуется только получить имя пользователя, используйте универсальные функции ИмяПользователя() и ПолноеИмяПользователя().

← На главную