При разработке конфигурации с нуля или доработке существующих решений разработчики часто сталкиваются с задачей определения пользователя, под которым выполнен вход в систему. Начинающие программисты используют менеджер ПользователиИнформационнойБазы, однако иногда вызов методов этого объекта возвращает пустое значение. Проанализируем причины такого поведения и разберем все способы получения текущего пользователя в платформе 1С.
Рассмотрим типовую ситуацию. В коде модуля пишется функция для получения полного имени текущего пользователя:
Функция ТекущийСеансПользователь() Экспорт
ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
Возврат ТекущийПользователь.ПолноеИмя;
КонецФункции
Если функция возвращает пустую строку, а объект ТекущийПользователь оказывается незаполненным, в первую очередь необходимо проверить, обновлена ли конфигурация базы данных.
Когда новые пользователи создаются через Конфигуратор, изменения сохраняются в конфигурации базы, но еще не применены к самой информационной базе. Если запустить сеанс «1С:Предприятие» без обновления конфигурации базы данных (клавиша F7 или пункт меню Конфигурация — Обновить конфигурацию базы данных), платформа считает, что авторизация выполнена от имени незаполненного пользователя информационной базы.
Помимо необновленной конфигурации БД, вызов ПользователиИнформационнойБазы.ТекущийПользователь() может работать некорректно или вызывать ошибку выполнения по следующим причинам:
ПользователиИнформационнойБазы доступен только на сервере, в толстом клиенте или во внешнем соединении. При попытке вызвать его на тонком или веб-клиенте произойдет ошибка компиляции или выполнения.Для простого получения логина или полного имени авторизованного пользователя не обязательно обращаться к менеджеру ПользователиИнформационнойБазы. В платформе 1С предусмотрены быстрые и универсальные функции глобального контекста:
ИмяПользователя() — возвращает краткое имя (логин), под которым выполнен вход.ПолноеИмяПользователя() — возвращает полное имя пользователя, указанное в его настройках.Разберем пример их применения:
ЛогинПользователя = ИмяПользователя();
ПолноеИмя = ПолноеИмяПользователя();
Преимущества данных функций:
В развитых конфигурациях рекомендуется хранить данные о текущем пользователе в параметрах сеанса. Это позволяет избежать повторных обращений к базе данных при каждом вызове.
Для реализации этого подхода выполним следующие шаги:
ТекущийПользователь.УстановкаПараметровСеанса:
Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
ПараметрыСеанса.ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
КонецПроцедуры
После этого из любой точки серверного кода можно обращаться к свойству ПараметрыСеанса.ТекущийПользователь.
Если в конфигурации используется справочник Пользователи, его элементы связывают с пользователями информационной базы. Связывание выполняется по уникальному идентификатору (GUID) или по имени:
УникальныйИдентификаторИБ = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор;
ЭлементСправочника = Справочники.Пользователи.НайтиПоУникальномуИдентификатору(УникальныйИдентификаторИБ);
Подводя итог: если ПользователиИнформационнойБазы.ТекущийПользователь() возвращает пустой результат в новой базе, обновите конфигурацию БД по клавише F7. Если вам требуется только получить имя пользователя, используйте универсальные функции ИмяПользователя() и ПолноеИмяПользователя().