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