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

Определить учетную запись можно несколькими способами, в зависимости от того, доступ к каким именно данным вам необходим: имя входа в систему, ФИО из справочника или имя пользователя операционной системы. Разработчику важно понимать разницу между этими сущностями, чтобы избежать ошибок при написании кода.

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

Основные свойства объекта ПользовательИнформация

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

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

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

Ниже приведен пример кода, демонстрирующий получение базовой информации о текущей сессии:

Инфо = ПользовательИнформация();

Сообщить("Имя входа: " + Инфо.Имя);

Сообщить("ФИО: " + Инфо.ПолноеИмя);

Сообщить("Уникальный ID: " + Инфо.ИКПользователя);

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

⚠️ Внимание: В файловом варианте работы базы данных свойство "ПолноеИмя" может возвращать пустую строку, если пользователь не был предварительно настроен через интерфейс конфигуратора или администрирования.

Различия между клиентом и сервером при получении данных

Архитектура 1С:Предприятие строго разделяет клиентскую и серверную части, что накладывает определенные ограничения на доступ к данным о пользователе. Хотя метод ПользовательИнформация() доступен в обоих контекстах, возвращаемые им данные могут отличаться в зависимости от того, где именно выполняется код.

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

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

Рассмотрим основные различия в доступных данных в зависимости от контекста исполнения:

  • 📍 Тонкий клиент: Полный доступ ко всем свойствам объекта, включая настройки интерфейса и язык сессии.
  • 🖥️ Сервер: Доступен только идентификатор и имя, некоторые свойства интерфейса могут быть недоступны или иметь значения по умолчанию.
  • ⚙️ Фоновые задания: Пользователем может считаться тот, кто запустил задание, либо системный пользователь, в зависимости от настроек планировщика.

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

📊 В каком режиме вы чаще всего разрабатываете?
Тонкий клиент
Веб-клиент
Толстый клиент
Сервер (фоновые задания)

Получение имени пользователя операционной системы

Иногда для задач аудита или интеграции с внешними системами требуется узнать не имя пользователя в базе , а его учетную запись в операционной системе Windows или Linux. Эта информация хранится отдельно и доступна через глобальный контекст.

Для получения имени пользователя ОС используется свойство ИмяПользователяОС глобального контекста. Это значение соответствует логину, под которым запущен процесс клиента 1С:Предприятие. Оно особенно полезно при настройке единой точки входа (Single Sign-On) или при анализе журналов событий операционной системы.

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

Пример получения имени пользователя ОС:

ИмяОС = ИмяПользователяОС();

Сообщить("Пользователь Windows: " + ИмяОС);

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

💡

Используйте ИмяПользователяОС() только на клиенте для корректной идентификации физического лица. На сервере это значение будет указывать на службу запуска сервера 1С.

Сравнительная таблица методов идентификации

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

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

Метод / Свойство Контекст выполнения Возвращаемое значение Уникальность
ПользовательИнформация().Имя Клиент, Сервер Краткое имя (Login) Уникально в базе
ПользовательИнформация().ПолноеИмя Клиент, Сервер ФИО сотрудника Может повторяться
ПользовательИнформация().ИКПользователя Клиент, Сервер GUID идентификатор Абсолютно уникален
ИмяПользователяОС() Только Клиент Login Windows/Linux Зависит от домена

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

Особенности работы в веб-клиенте и тонком клиенте

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

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

Тем не менее, объект ПользовательИнформация работает корректно во всех типах клиентов. Это гарантирует, что бизнес-логика, завязанная на права доступа или персонализацию интерфейса, будет работать одинаково стабильно как в офисе, так и при удаленной работе через браузер.

Почему в веб-клиенте нет доступа к некоторым данным?

Веб-браузеры работают в "песочнице" (sandbox), которая запрещает скриптам получать доступ к системным данным компьютера пользователя, таким как имя машины или пользователя ОС, без явного разрешения.

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

Обработка ошибок и отсутствие прав доступа

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

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

Рекомендуется использовать конструкцию Попытка...Исключение при работе с критически важными данными о пользователе, особенно если логика programu зависит от наличия конкретного значения.

Попытка

Инфо = ПользовательИнформация();

Имя = Инфо.ПолноеИмя;

Исключение

Имя = "Неизвестный пользователь";

ЗаписьЖурналаРегистрации("Ошибка", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());

КонецПопытки;

⚠️ Внимание: Если пользователь работает в режиме "Предприятие" без прав на администрирование, некоторые расширенные свойства объекта ПользовательИнформация могут быть скрыты системой безопасности.

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

☑️ Проверка прав доступа

Выполнено: 0 / 4

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

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

Когда запускается регламентное задание, в качестве текущего пользователя может выступать тот, кто создал задание, либо специальный системный пользователь, если это настроено в параметрах запуска. Это влияет на то, какое имя будет записано в журнале регистрации при выполнении операции.

Для явного указания пользователя при запуске фоновой задачи можно использовать параметры метода ЗапуститьФоновоеЗадание или настройки в обработке управления заданиями. Это позволяет обеспечить прозрачность действий системы для последующего анализа администратором.

💡

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

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

Часто задаваемые вопросы (FAQ)

Почему метод ПользовательИнформация() возвращает пустое имя?

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

Можно ли изменить имя текущего пользователя программно?

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

Как получить список всех пользователей, работающих в базе прямо сейчас?

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

Отличается ли получение данных в 1С 8.2 и 1С 8.3?

Базовый механизм работы объекта ПользовательИнформация остался неизменным. Однако в версии 8.3 появились дополнительные возможности по работе с расширениями и веб-сервисами, которые могут влиять на контекст выполнения кода.

Где хранится уникальный идентификатор пользователя (ИК)?

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