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

Разработка и Конфигурация · 10 мин

Как определить текущего пользователя в 1С

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

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

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

Ниже разобраны практические способы: через интерфейс без программирования, средствами встроенного языка для тонкого и толстого клиента, через журнал регистрации и консоль кластера, а также типовые ошибки, которые приводят к неверным результатам.

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

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

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

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

Определение пользователя средствами встроенного языка

Для разработчика основной инструмент — объект ПользователиИнформационнойБазы. Метод ТекущийПользователь() возвращает объект ПользовательИнформационнойБазы, из которого доступны имя, полное имя, роли, язык и другие свойства.

ТекущийПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();

Сообщить("Имя: " + ТекущийПользовательИБ.Имя);

Сообщить("Полное имя: " + ТекущийПользовательИБ.ПолноеИмя);

Сообщить("Уникальный идентификатор: " + ТекущийПользовательИБ.УникальныйИдентификатор);

Если вход выполнен без аутентификации (пустой список пользователей), метод вернёт пользователя с пустым именем. Поэтому перед использованием имени в логике стоит проверять его на заполненность, особенно в коде, который может выполняться при регламентных заданиях или в фоновых процессах.

Отдельно существует функция ИмяПользователя() — она возвращает строку с именем текущего пользователя информационной базы и работает быстрее, если нужно только имя без остальных свойств. Для получения пользователя операционной системы используются другие механизмы, например чтение переменных окружения через WScript.Shell на клиенте.

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

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

ТекущийПользовательСсылка = Пользователи.ТекущийПользователь();

// или для клиентского контекста:

// ПользователиКлиент.ТекущийПользователь();

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

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

Типичные ошибки
01
Сравнение имени пользователя строкой со ссылкой справочника «Пользователи» — условие никогда не сработает, сравнивайте ссылки
02
Использование ТекущийПользователь() в фоновом задании без проверки: регламентные задания выполняются от имени пользователя, указанного в настройках задания, а не интерактивного пользователя
03
Поиск пользователя по наименованию справочника вместо идентификатора пользователя ИБ — наименования могут дублироваться или меняться

Как узнать, кто работает в базе прямо сейчас

Задача «кто сейчас в базе» решается через список активных сеансов. В клиент-серверном режиме откройте консоль кластера серверов 1С: ветка «Сеансы» покажет все подключения с именами пользователей, временем начала сеанса, приложением (толстый клиент, веб-клиент, фоновое задание) и компьютером.

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

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

Сеансы = ПолучитьСеансыИнформационнойБазы();

Для Каждого Сеанс Из Сеансы Цикл

Сообщить(Сеанс.Пользователь.Имя + " — " + Сеанс.ИмяПриложения);

КонецЦикла;

Как узнать, кто изменил документ или данные

Определить автора конкретного изменения помогает журнал регистрации: «Администрирование» → «Обслуживание» → «Журнал регистрации». Установите отбор по событию «Данные. Изменение» или по представлению конкретного объекта — в колонке «Пользователь» будет указано, кто выполнил операцию и когда.

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

Имейте в виду ограничение: журнал регистрации фиксирует факт изменения, но не всегда показывает, какие именно реквизиты менялись. Для детального аудита изменений используйте версионирование объектов или специализированные механизмы логирования.

Порядок действий: найти автора изменения
  1. 1
    Откройте «Администрирование» → «Обслуживание» → «Журнал регистрации»
  2. 2
    Нажмите «Отбор» и укажите интервал дат, когда произошло изменение
  3. 3
    Добавьте отбор по данным — укажите представление изменённого объекта
  4. 4
    В списке событий найдите «Данные. Изменение» и посмотрите колонку «Пользователь»
  5. 5
    Сверьте результат с реквизитом «Ответственный» документа для контроля

Особые случаи: фоновые задания, COM и веб-сервисы

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

При подключении через COM-соединение или веб-сервис пользователь определяется параметрами строки подключения: если в ней указаны логин и пароль, сеанс работает от этого пользователя; если нет — применяется аутентификация операционной системы или пользователь по умолчанию сервиса. Это важно при разборе ситуаций «документы создал неизвестный пользователь»: проверьте, под какой учётной записью работают интеграционные механизмы.

Для диагностики полезно сопоставить номер сеанса из журнала регистрации со списком сеансов — так можно понять, было ли действие выполнено интерактивно или фоновым процессом.

Контрольные точки

Как проверить результат

Имя пользователя в коде
Норма

Функция возвращает ожидаемое имя, совпадающее с окном «О программе»

Тревожный признак

Пустое имя — вход без аутентификации или код выполняется в фоновом задании без пользователя

Ссылка справочника «Пользователи»
Норма

Пользователи.ТекущийПользователь() возвращает заполненную ссылку

Тревожный признак

Пустая ссылка — элемент справочника не создан или потерян идентификатор пользователя ИБ

Автор изменения в журнале
Норма

Событие содержит конкретного пользователя и корректное время

Тревожный признак

Пользователь — служебная учётная запись интеграции: изменение выполнено обменом, а не человеком

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

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

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

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

Две типовые причины: в базе пустой список пользователей и вход выполняется без аутентификации, либо код выполняется в регламентном задании, у которого не задан пользователь. Проверьте список пользователей в конфигураторе и свойства фонового задания.

Как узнать пользователя Windows, запустившего клиент 1С?

На клиенте можно прочитать переменную окружения USERNAME через объект WScript.Shell или использовать имя компьютера и пользователя из свойств сеанса в консоли кластера. Штатная функция ИмяПользователя() возвращает именно пользователя информационной базы, а не ОС.

Можно ли определить пользователя в запросе или СКД?

В языке запросов нет функции текущего пользователя. Практика — передать ссылку пользователя в параметр запроса или в параметр данных СКД из кода, а в схеме использовать отбор по этому параметру. В типовых отчётах для этого есть предопределённые настройки «Текущий пользователь».

Кто отображается автором при обмене данными между базами?

При загрузке объекта обменом автором изменения в журнале регистрации будет пользователь, от имени которого выполняется сеанс обмена (пользователь плана обмена или учётная запись синхронизации), а не тот, кто редактировал документ в базе-источнике. Реквизит «Автор», если он переносится, сохранит исходное значение.

Итог

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

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