Как программно определить текущего пользователя в 1С 8.3
Для программного получения текущего пользователя в 1С 8.3 наиболее эффективным и универсальным способом является использование объекта ПараметрыСеанса или общих модулей Библиотеки стандартных подсистем (БСП). Эти методы работают быстро, не требуют прав на чтение метаданных информационной базы и корректно функционируют как на сервере, так и на клиенте (включая веб-клиент и мобильные приложения). Прямое обращение к ПользователиИнформационнойБазы считается устаревшим подходом для типовых задач из-за ограничений безопасности и производительности.
Оглавление
Быстрый способ: ПараметрыСеанса
Объект ПараметрыСеанса содержит данные, которые платформа загружает в память при старте сеанса работы. Обращение к ним происходит мгновенно, так как не выполняется никаких запросов к базе данных или файловой системе.
В современных конфигурациях (ERP, КА, УТ, ЗУП) в параметрах сеанса обычно уже хранится прямая ссылка на элемент справочника «Пользователи». Это избавляет от необходимости выполнять дополнительные поиски по UUID.
Пример получения ссылки на справочник
// Получаем ссылку на элемент справочника "Пользователи"
СсылкаНаПользователя = ПараметрыСеанса.ТекущийПользователь;
Если СсылкаНаПользователя.Пустая() Тогда
Сообщить("Соответствие пользователя ИБ и элемента справочника не установлено");
Иначе
// Можно сразу обращаться к реквизитам справочника
ФИО = СсылкаНаПользователя.Наименование;
Сообщить("Добро пожаловать, " + ФИО);
КонецЕсли;
Этот метод идеален для серверных процедур, где требуется минимальная задержка выполнения кода. Он работает во всех режимах совместимости и не зависит от прав доступа пользователя к объектам метаданных.
Стандартный подход в БСП
Если ваша конфигурация построена на базе Библиотеки стандартных подсистем (БСП), рекомендуется использовать её общие модули. Это гарантирует корректную работу логики при обновлении платформы, переходе на веб-клиент или использовании мобильных устройств. Функции БСП инкапсулируют сложную логику определения контекста.
Основные функции для работы с пользователем
| Функция | Назначение | Контекст вызова |
|---|---|---|
Пользователи.ТекущийПользователь() | Возвращает ссылку на справочник «Пользователи» | Клиент, Сервер |
ПользователиКлиентСервер.ТекущийПользователь() | Универсальный метод получения данных | Клиент, Сервер |
ПользователиКлиентСервер.ПолучитьПользователяИБ() | Возвращает объект ПользовательИнформационнойБазы по ссылке | Клиент, Сервер |
Пример использования в управляемой форме
&НаКлиенте
Процедура ПоказатьДанныеПользователя(Команда)
// Получаем ссылку через общий модуль БСП
ТекПользователь = Пользователи.ТекущийПользователь();
Если НЕ ТекПользователь.Пустая() Тогда
// Пример получения дополнительных данных через серверный вызов
ЗаполнитьРеквизитыПользователя(ТекПользователь);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьРеквизитыПользователя(Ссылка)
// Работа с данными на сервере
ОбъектПользователяИБ = ПользователиКлиентСервер.ПолучитьПользователяИБ(Ссылка);
Сообщить("Логин в системе: " + ОбъектПользователяИБ.Имя);
КонецПроцедуры
Устаревший метод: ПользователиИнформационнойБазы
Глобальный контекст ПользователиИнформационнойБазы предоставляет доступ к техническим пользователям платформы. Метод ТекущийПользователь() возвращает объект, содержащий имя входа (логин), уникальный идентификатор (UUID) и список ролей.
Использование этого метода требует наличия у пользователя прав на чтение метаданных информационной базы. В системах с жесткой политикой безопасности (например, в облачных решениях или при разделении прав доступа) этот код может вызвать ошибку выполнения.
Пример кода
// Получаем объект технического пользователя
ОбъектПользователяИБ = ПользователиИнформационнойБазы.ТекущийПользователь();
// Системное имя (логин)
ИмяВхода = ОбъектПользователяИБ.Имя;
// Уникальный идентификатор для поиска соответствий
UUID = ОбъектПользователяИБ.УникальныйИдентификатор;
Главный недостаток этого подхода — разрыв между техническим пользователем платформы и физическим лицом в справочнике. Чтобы получить ФИО сотрудника, разработчику приходится выполнять дополнительный поиск по регистру сведений или реквизиту ИдПользователяБазы, что замедляет работу программы.
Сравнение методов и совместимость
Выбор инструмента зависит от того, где выполняется код и какая архитектура используется в вашей базе.
Таблица совместимости методов
| Метод | Тонкий клиент | Веб-клиент | Мобильное приложение | Сервер 1С | Требует прав на метаданные |
|---|---|---|---|---|---|
ПараметрыСеанса | ✅ | ✅ | ✅ | ✅ | Нет |
Пользователи.ТекущийПользователь() (БСП) | ✅ | ✅ | ✅ | ✅ | Нет |
ПользователиИнформационнойБазы | ❌ | ❌ | ❌ | ✅ | Да |
Для максимальной переносимости кода между различными клиентскими приложениями всегда отдавайте предпочтение ПараметрамСеанса или функциям БСП.
Практический пример: автозаполнение ответственного
Распространенная задача — автоматически подставлять текущего менеджера в документ при его создании. Ниже приведен оптимизированный алгоритм, который учитывает возможность отсутствия привязки к сотруднику.
&НаСервере
Процедура ЗаполнитьОтветственного(Команда)
// 1. Безопасно получаем ссылку на пользователя
ТекПользователь = ПараметрыСеанса.ТекущийПользователь;
Если ТекПользователь.Пустая() Тогда
Возврат;
КонецЕсли;
// 2. Проверяем наличие реквизита "ОсновнойСотрудник"
// (актуально для многих типовых конфигураций)
Если Метаданные.Справочники.Пользователи.Реквизиты.Найти("ОсновнойСотрудник") <> Неопределено Тогда
Сотрудник = ТекПользователь.ОсновнойСотрудник;
Если НЕ Сотрудник.Пустая() Тогда
Объект.Ответственный = Сотрудник;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Этот код не создает лишних обращений к базе данных и безопасно обрабатывает ситуации, когда пользователь еще не настроен администратором системы.
Частые ошибки разработчиков
- Путаница понятий.
Имяпользователя информационной базы — это логин для входа (например,adminилиivanov), аНаименованиеэлемента справочника — это ФИО для отчетов и печатных форм. - Отсутствие проверок на пустоту. Администратор мог создать пользователя в платформе, но не добавить его в справочник «Пользователи». В этом случае
ПараметрыСеанса.ТекущийПользовательвернет пустую ссылку, и попытка обратиться к её реквизитам вызовет ошибку. - Использование функции
ИмяПользователя(). Этот метод остался из версии 1С 7.7. В современной платформе он часто возвращает имя пользователя операционной системы Windows, что не имеет отношения к учетной записи в 1С.
FAQ
Что делать, если ПараметрыСеанса.ТекущийПользователь возвращает пустую ссылку?
Это означает, что в системе не настроено соответствие между техническим пользователем платформы и элементом справочника «Пользователи». Необходимо зайти в конфигуратор или режим предприятия с правами администратора и создать элемент справочника, указав в нем правильного пользователя ИБ.
Можно ли использовать ПараметрыСеанса на клиенте?
Да, объект ПараметрыСеанса доступен как на клиенте, так и на сервере. Однако стоит помнить, что на тонком клиенте некоторые свойства могут быть недоступны в зависимости от настроек безопасности, но свойство ТекущийПользователь работает стабильно во всех средах.
Какой метод быстрее: БСП или ПараметрыСеанса?
Функции БСП внутри себя часто используют те же ПараметрыСеанса, добавляя лишь небольшую обертку для проверки контекста. Разница в производительности ничтожна, поэтому при наличии БСП лучше использовать её стандартные функции для соблюдения архитектуры конфигурации.