Разработка и Конфигурация · 12 мин
Как получить имя пользователя в 1С
Как получить имя текущего пользователя в 1С: ПользователиИнформационнойБазы, ПараметрыСеанса, БСП. Примеры кода, отличия имени и полного имени, типовые ошибки.
Задача получить имя пользователя возникает в 1С постоянно: при журналировании действий, подстановке ответственного в документы, формировании отчётов, разграничении прав и выводе приветствия в интерфейсе. При этом «имя пользователя» в 1С — не одно понятие, а минимум три разных сущности, и путаница между ними — самая частая причина ошибок.
Первая сущность — пользователь информационной базы: учётная запись, с которой выполнен вход в сеанс. У неё есть имя (логин), полное имя, пароль, роли. Вторая — элемент справочника «Пользователи», который существует в конфигурациях на базе Библиотеки стандартных подсистем (БСП) и связан с учётной записью, но живёт в прикладных данных. Третья — физическое лицо или сотрудник, к которому может быть привязан пользователь.
Ниже разобраны все рабочие способы получить имя пользователя: встроенными функциями, через параметры сеанса, средствами БСП, а также как посмотреть пользователя без программирования — через интерфейс и консоль кластера.
Какие «имена» бывают у пользователя в 1С
Прежде чем писать код, нужно понять, какое именно значение требуется. От этого зависит выбор метода.
- Имя (логин) — строка, с которой пользователь входит в базу. Может быть пустой, если используется только аутентификация операционной системы.
- Полное имя — отображаемое ФИО или описательное название учётной записи, например «Иванова Анна Сергеевна».
- Уникальный идентификатор — GUID пользователя информационной базы, неизменный даже при переименовании.
- Наименование элемента справочника «Пользователи» — прикладное представление в конфигурациях с БСП, обычно совпадает с полным именем, но не обязано.
Практическое следствие: если нужно записать в реквизит документа «Ответственный», строкового имени недостаточно — нужна ссылка на справочник. Если нужно вывести в сообщении, кто выполнил операцию, — достаточно строки имени или полного имени.
Способ 1. Получить имя через ПользователиИнформационнойБазы
Универсальный платформенный способ, работающий в любой конфигурации, включая пустую. Менеджер ПользователиИнформационнойБазы предоставляет доступ к учётным записям.
ТекущийПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();
ИмяПользователя = ТекущийПользовательИБ.Имя;
ПолноеИмя = ТекущийПользовательИБ.ПолноеИмя;
Сообщить("Вход выполнен под: " + ИмяПользователя);Метод ТекущийПользователь() возвращает объект ПользовательИнформационнойБазы, у которого доступны свойства: Имя, ПолноеИмя, УникальныйИдентификатор, АутентификацияОС, АутентификацияСтандартная, Роли и другие.
Если известен уникальный идентификатор, пользователя можно найти методом НайтиПоУникальномуИдентификатору(), а по имени — НайтиПоИмени(). Оба метода вернут Неопределено, если пользователь не найден, поэтому результат нужно проверять перед обращением к свойствам.
Способ 2. Имя пользователя в конфигурациях на БСП
В типовых конфигурациях (1С:ERP, Управление торговлей, Бухгалтерия, ЗУП и других на базе БСП) работать напрямую с пользователями информационной базы для прикладных задач не принято. Вместо этого используется справочник «Пользователи» и программный интерфейс общего модуля Пользователи.
ТекущийПользователь = Пользователи.ТекущийПользователь(); // СправочникСсылка.Пользователи
// В серверном контексте с обращением к данным:
Наименование = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийПользователь, "Наименование");Функция Пользователи.ТекущийПользователь() возвращает ссылку на элемент справочника, а не строку. Это именно то значение, которое подставляют в реквизиты документов типа «Ответственный». Для получения строкового представления используйте Строка(ТекущийПользователь) или читайте реквизит Наименование.
Дополнительно в БСП есть функция Пользователи.АвторизованныйПользователь() — она возвращает внешнего пользователя, если сеанс запущен под ним (например, для внешнего доступа контрагентов), и обычного пользователя в остальных случаях. Для кода, который должен работать и с внешними пользователями, выбирайте именно её.
Что выбрать
Подходит для служебных задач: журналирование, проверки аутентификации, собственные конфигурации без БСП. Возвращает объект учётной записи, а не ссылку на справочник.
Стандарт для БСП: возвращает СправочникСсылка.Пользователи для подстановки в документы и регистры. Не работает в конфигурациях без БСП.
Быстрая функция платформы, возвращает строку имени текущего пользователя сеанса. Не даёт доступа к полному имени и идентификатору.
Способ 3. Быстрые функции глобального контекста
Платформа предоставляет две встроенные функции, доступные без обращения к менеджерам: ИмяПользователя() и ПолноеИмяПользователя(). Они возвращают строки имени и полного имени текущего пользователя сеанса.
Логин = ИмяПользователя(); // "ivanov" или "" при OS-аутентификации
ФИО = ПолноеИмяПользователя(); // "Иванов Иван Иванович"
Предупреждение("Операцию выполнил: " + ФИО);Эти функции удобны для сообщений, заголовков отчётов и отладки. Их ограничение — они не дают ни ссылки на справочник, ни уникального идентификатора, ни возможности проверить роли. Для прикладной логики, где пользователь сохраняется в данные, они не подходят.
Как подставить текущего пользователя в реквизит документа
Типовой сценарий — при создании документа автоматически заполнить поле «Ответственный». В конфигурациях на БСП это обычно уже реализовано через подписку на событие ОбработкаЗаполнения, но в собственных объектах код выглядит так:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
Если Не ЗначениеЗаполнено(Ответственный) Тогда
Ответственный = Пользователи.ТекущийПользователь();
КонецЕсли;
КонецПроцедуры- 1Определите тип реквизита: строка или СправочникСсылка.Пользователи
- 2Для ссылки используйте Пользователи.ТекущийПользователь(), для строки — ИмяПользователя() или ПолноеИмяПользователя()
- 3Добавьте проверку ЗначениеЗаполнено(), чтобы не перезаписывать уже установленное значение
- 4Проверьте заполнение под пользователем с ограниченными правами
- 5Проверьте сценарий фонового задания, где пользователя сеанса может не быть
В фоновых заданиях и регламентных операциях сеанс может выполняться без интерактивного пользователя. В таком случае ИмяПользователя() вернёт пустую строку, а Пользователи.ТекущийПользователь() в БСП может вызвать исключение или вернуть незаполненную ссылку — поведение зависит от настроек. Код для фоновых заданий должен либо принимать пользователя параметром, либо обрабатывать эту ситуацию явно.
Как узнать имя пользователя без программирования
Если нужно просто посмотреть, кто работает в базе или под каким именем выполнен вход, код не требуется.
Текущий сеанс
В клиентском приложении имя текущего пользователя обычно видно в заголовке окна или в разделе настроек пользователя. В тонком и веб-клиенте сведения о текущем сеансе доступны через «О программе» — там отображается имя пользователя, режим работы и версия платформы.
Список активных пользователей
В клиент-серверном режиме администратор видит всех работающих пользователей в консоли кластера серверов 1С: ветка «Сеансы» показывает имя пользователя, компьютер, время начала и активность. В файловом режиме список активных сеансов доступен в типовых конфигурациях через обработку «Активные пользователи» (Администрирование → Обслуживание).
Журнал регистрации
Чтобы узнать, кто выполнял конкретное действие, откройте журнал регистрации (Администрирование → Обслуживание → Журнал регистрации) и отфильтруйте по событию или пользователю. В каждой записи указано имя пользователя информационной базы, под которым выполнялось действие.
Типичные ошибки и как их избежать
Отдельная группа проблем — права доступа. Чтение списка пользователей информационной базы через ПользователиИнформационнойБазы.ПолучитьПользователей() требует административных прав. В коде, который выполняется под обычным пользователем, такие вызовы нужно оборачивать в УстановитьПривилегированныйРежим(Истина) и осознанно возвращать наружу только необходимые данные.
Как проверить, что код работает правильно
Как проверить результат
Записана ссылка на справочник «Пользователи», при переименовании отображение обновляется
Записана строка, после смены ФИО в документах остаётся старое значение
Код корректно обрабатывает пустое Имя и использует идентификатор или полное имя
В сообщениях и журнале пустая строка вместо пользователя
Пользователь передан параметром или ситуация обработана, ошибок нет
Исключение или пустой ответственный в созданных фоном документах
Быстрая отладочная проверка — вывести все три значения рядом: ИмяПользователя(), ПолноеИмяПользователя() и строковое представление Пользователи.ТекущийПользователь(). Если они расходятся, значит, учётная запись и элемент справочника настроены по-разному, и для прикладных задач нужно опираться на справочник.
Что важно запомнить
Для строки имени используйте ИмяПользователя() или ПользователиИнформационнойБазы.ТекущийПользователь().Имя. Для прикладных данных в типовых конфигурациях — Пользователи.ТекущийПользователь() со ссылкой на справочник. Проверяйте пустое имя при OS-аутентификации и отсутствие пользователя в фоновых заданиях.
Частые вопросы
Чем Имя отличается от Полного имени пользователя?
Имя — это логин для входа в базу, обычно короткая строка без пробелов. Полное имя — отображаемое представление, например ФИО сотрудника. В документах и отчётах принято показывать полное имя, а в технических журналах и при поиске учётной записи — имя.
Почему ИмяПользователя() возвращает пустую строку?
Две основные причины: вход выполнен только через аутентификацию операционной системы (тогда имя не задано, используйте свойство ПользовательОС или уникальный идентификатор) либо код выполняется в сеансе фонового задания без интерактивного пользователя.
Как получить пользователя по имени, а не текущего?
Используйте ПользователиИнформационнойБазы.НайтиПоИмени("ivanov"). Метод вернёт объект пользователя или Неопределено, если такой записи нет, поэтому результат обязательно проверяйте перед обращением к свойствам. В БСП для поиска элемента справочника используйте запрос к справочнику «Пользователи».
Можно ли получить имя пользователя в запросе?
Напрямую к пользователям информационной базы из запроса обратиться нельзя — они не являются объектами метаданных. В запросах работают со справочником «Пользователи» и параметром сеанса ТекущийПользователь, который в БСП доступен как ПараметрыСеанса.ТекущийПользователь и может использоваться в условиях запроса и RLS.
Как узнать, кто изменил конкретный документ?
Откройте журнал регистрации с отбором по событию изменения данных и по нужному объекту — в записи будет указано имя пользователя. В конфигурациях с включённым версионированием объектов список версий документа показывает автора каждой версии без обращения к журналу.
Что возвращает Пользователи.ТекущийПользователь() — строку или ссылку?
Ссылку типа СправочникСсылка.Пользователи. Чтобы получить строку для сообщения, используйте Строка() над результатом или прочитайте реквизит Наименование. Присваивать результат строковой переменной с последующим сравнением строк нельзя — типы не совпадут.