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