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

Администрирование · 11 мин

1С: как найти текущего пользователя

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

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

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

Как посмотреть текущего пользователя через интерфейс

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

В этой таблице вы видите не только себя, но и всех остальных подключённых пользователей. Свой сеанс обычно помечен или его можно определить по имени компьютера и времени начала. Если конфигурация не типовая и пункта меню нет, тот же список доступен через консоль кластера серверов 1С или через конфигуратор.

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

Как найти себя в списке активных пользователей
  1. 1
    Откройте «Администрирование» → «Обслуживание» → «Активные пользователи»
  2. 2
    Найдите строку со своим именем пользователя и именем своего компьютера
  3. 3
    Проверьте время начала сеанса — оно должно совпадать с моментом вашего входа
  4. 4
    Убедитесь, что режим клиента соответствует вашему (тонкий, толстый или веб-клиент)

Как получить текущего пользователя программно

Для разработчиков и при работе во внешних обработках основной способ — встроенный язык. Есть несколько уровней получения данных, и выбор зависит от того, что именно нужно: имя учётной записи или ссылка на элемент справочника.

Имя учётной записи информационной базы

Глобальный контекст предоставляет функцию ИмяПользователя(), которая возвращает строку — имя текущей учётной записи. Если аутентификация не выполнялась (например, код работает в фоновом задании без указания пользователя), функция вернёт пустую строку.

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

bsl
// Простое имя учётной записи
ИмяТекущего = ИмяПользователя();

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

Ссылка на справочник «Пользователи» в типовых конфигурациях

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

bsl
// Серверный вызов в типовой конфигурации
ТекПользователь = Пользователи.ТекущийПользователь();

// Напрямую из параметра сеанса (работает быстрее)
ТекПользователь = ПараметрыСеанса.ТекущийПользователь;

// Пример использования в условии
Если ТекПользователь = Справочники.Пользователи.НайтиПоНаименованию("Иванов И.И.") Тогда
	// логика для конкретного пользователя
КонецЕсли;

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

Как узнать пользователя через конфигуратор и журнал регистрации

Если нужно выяснить, кто работал в базе в конкретный момент или кто выполнил определённое действие, используют журнал регистрации. В режиме предприятия: «Администрирование» → «Обслуживание» → «Журнал регистрации». В конфигураторе: меню «Администрирование» → «Журнал регистрации».

В журнале каждая запись содержит колонку «Пользователь». Отфильтруйте события по периоду, типу события (например, «Данные. Изменение») или по конкретному пользователю. Так можно установить, кто изменил документ, кто входил в базу ночью или под какой учётной записью выполнялось регламентное задание.

В файловом варианте базы список пользователей и текущие подключения видны и через конфигуратор: «Администрирование» → «Активные пользователи». В клиент-серверном варианте ту же информацию даёт консоль кластера: ветка «Сеансы» показывает все подключения с именами пользователей, приложениями и временем активности.

Кто сейчас в базеАктивные пользователи

Администрирование → Обслуживание → Активные пользователи

Кто что изменилЖурнал регистрации

Фильтр по событию «Данные. Изменение» и периоду

Имя учётной записи в кодеИмяПользователя()

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

Ссылка на справочникПараметрыСеанса.ТекущийПользователь

Только в конфигурациях с подсистемой «Пользователи» БСП

Особенности работы в фоновых заданиях и сеансах без пользователя

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

Если регламентному заданию в конфигураторе назначен конкретный пользователь (поле «Имя пользователя» в свойствах задания), то в его сеансе функции вернут именно его. Это стандартный приём: для регламентных заданий заводят отдельную служебную учётную запись, чтобы в журнале регистрации было видно, кто выполнял операции.

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

Проверка прав и ролей текущего пользователя

Часто задача «найти текущего пользователя» на самом деле означает «проверить, есть ли у него нужные права». Для этого вместо сравнения пользователя с конкретным именем правильнее использовать встроенные механизмы ролей.

Функция РольДоступна(\"ИмяРоли\") возвращает Истина, если текущему пользователю назначена указанная роль. Для объектных проверок в БСП есть Пользователи.ЭтоПолноправныйПользователь() — она учитывает и административные права, и режим работы. Проверка через роли устойчива к переименованиям и замене сотрудников.

bsl
Если РольДоступна("ПолныеПрава") Тогда
	// пользователь обладает полными правами
КонецЕсли;

// В типовых конфигурациях
Если Пользователи.ЭтоПолноправныйПользователь() Тогда
	// полный доступ с учётом настроек БСП
КонецЕсли;
Типичные ошибки
01
Сравнение строки ИмяПользователя() со ссылкой справочника — условие никогда не выполняется
02
Отсутствие проверки на пустое значение в фоновых заданиях — код падает или работает с пустым пользователем
03
Жёсткая привязка логики к имени пользователя — при переименовании учётной записи механизм ломается
04
Поиск пользователя справочника по наименованию вместо связи по УникальныйИдентификатор — дубли и ложные совпадения
05
Путаница между сеансом и соединением в кластере — один пользователь может иметь несколько активных сеансов

Как связать учётную запись и элемент справочника

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

Если нужно программно найти элемент справочника по учётной записи, используйте методы БСП: Пользователи.НайтиПоИдентификатору() или получите идентификатор из объекта ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор и выполните поиск по реквизиту. Поиск по наименованию ненадёжен: два сотрудника могут быть тёзками, а наименование можно переименовать.

Если элемент справочника потерял связь с учётной записью (например, после восстановления базы или переноса пользователей), исправить это можно в карточке пользователя: в разделе «Администрирование» → «Пользователи и права» → «Пользователи» откройте элемент и проверьте поле входа в программу. Типовая обработка обычно предлагает перепривязать учётную запись автоматически.

Маршрут решения

Как выбрать способ

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

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

Почему ИмяПользователя() возвращает пустую строку?

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

Чем отличается пользователь информационной базы от пользователя справочника?

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

Может ли один пользователь иметь несколько активных сеансов?

Да. Один и тот же пользователь может войти с нескольких компьютеров, через веб-клиент и тонкий клиент одновременно, плюс под его именем могут работать фоновые задания. В списке активных пользователей каждый сеанс отображается отдельной строкой.

Как узнать, под каким пользователем выполняется регламентное задание?

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

Как найти пользователя, если вход выполнен через Windows-аутентификацию?

Функции ИмяПользователя() и ПользователиИнформационнойБазы.ТекущийПользователь() работают так же — они возвращают учётную запись 1С, сопоставленную доменной учётной записи. У объекта пользователя ИБ можно дополнительно прочитать свойство «ПользовательОС», где указана доменная учётная запись вида \\ДОМЕН\Имя.

Итог

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

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