Определение активного пользователя в среде 1С:Предприятие является одной из базовых задач при разработке конфигураций любой сложности. Эта информация необходима для ведения журнала регистрации действий, персонализации интерфейса, разграничения прав доступа и автоматического заполнения реквизитов в документах. Понимание того, как система идентифицирует того, кто прямо сейчас работает за терминалом, позволяет создавать более безопасные и удобные решения для бизнеса.
В платформе 1С существует несколько способов получения этих данных, каждый из которых зависит от контекста выполнения кода и версии платформы. Разработчик может обратиться к системным свойствам сеанса, запросить данные из справочника пользователей или использовать специальные методы глобального контекста. Важно различать понятия «пользователь информационной базы» и «пользователь операционной системы», так как они не всегда совпадают.
Некорректное определение субъекта действия может привести к серьезным ошибкам в аудите безопасности или логике проведения документов. Например, если система запишет автором документа не конкретного сотрудника, а обезличенную учетную запись, в дальнейшем будет невозможно установить ответственность за ошибку. Поэтому методы получения этой информации должны быть выбраны с учетом архитектуры вашей конфигурации и требований регламента.
Использование глобального метода ТекущийПользователь
Самым распространенным и рекомендуемым способом получения идентификатора является вызов встроенной функции ТекущийПользователь(). Этот метод возвращает уникальную ссылку на объект справочника «Пользователи», который зарегистрирован в данной информационной базе. Результатом выполнения будет значение типа Ссылка на соответствующий элемент справочника.
Данный подход универсален и работает как в тонком, так и в толстом клиенте, а также в серверном контексте. Полученная ссылка позволяет сразу же обращаться к другим реквизитам пользователя, таким как ФИО, отдел или должность, без необходимости выполнять дополнительные поисковые запросы. Это делает код более производительным и читаемым.
Однако стоит учитывать, что если сеанс запущен от имени предопределенного пользователя или в фоновом задании без явной привязки, метод может вернуть специальное значение или вызвать ошибку, если пользователь не найден в списке актуальных. Всегда проверяйте полученное значение на пустоту перед дальнейшей обработкой.
⚠️ Внимание: Функция
ТекущийПользователь()возвращает ссылку на объект метаданных, а не строковое имя. Для получения текстового представления необходимо обратиться к свойствуИмяилиНаименованиеполученной ссылки.
Если вы разрабатываете расширение конфигурации, используйте этот метод с осторожностью в общих модулях с глобальным контекстом, чтобы избежать конфликтов именования с основными разработками.
Различия между именем входа и полным именем
Часто возникает путаница между техническим именем входа в систему и отображаемым именем сотрудника. В 1С эти понятия разделены: имя входа (Login) используется для аутентификации, а полное имя (Full Name) — для отображения в отчетах и документах. Получить их можно через разные свойства объекта пользователя.
Техническое имя обычно хранится в свойстве Имя ссылки на пользователя и должно быть уникальным в пределах базы. Оно часто совпадает с логином в домене Windows или кратким кодом сотрудника. Полное же имя хранится в реквизите Наименование и может содержать пробелы, специальные символы и быть не уникальным.
Для корректного отображения в печатных формах или заголовках окон всегда используйте поле Наименование. Если же вам нужно провести проверку прав доступа или записать лог для системного администратора, ориентируйтесь на уникальное Имя. Смешивание этих понятий может привести к тому, что два разных сотрудника с одинаковым ФИО будут восприниматься системой как одно лицо.
- 👤 Имя — уникальный идентификатор для входа (например,
ivanov_ii). - 📝 Наименование — отображаемое ФИО (например,
Иванов Иван Иванович). - 🔑 Аутентификация — может осуществляться по паролю 1С или через ОС.
- 📂 Хранение — данные находятся в справочнике «Пользователи».
Получение данных через объект СеансИнформации
Более глубокую информацию о текущем сеансе работы можно получить через объект СеансИнформации. Этот объект содержит не только данные о пользователе, но и сведения о компьютере, с которого выполнен вход, версии клиента и времени начала сессии. Доступ к нему осуществляется через глобальный контекст Сеанс.
Использование Сеанс.ТекущийПользователь позволяет получить те же данные, что и одноименная функция, но в составе более широкой структуры. Это особенно полезно при написании кода для обработки событий начала и конца сеанса, где контекст выполнения может отличаться от обычной работы с документами.
Вы не можете изменить имя текущего пользователя или название компьютера программно изнутри сеанса, так как эти данные формируются платформой при установлении соединения с сервером.
| Свойство | Тип данных | Описание |
|---|---|---|
Имя |
Строка | Имя пользователя в базе 1С |
Компьютер |
Строка | Имя компьютера в сети |
Приложение |
Строка | Имя запущенного приложения |
НачалоСеанса |
Дата | Время входа в систему |
Особенности работы в файловом варианте
В файловом варианте информационной базы некоторые свойства сеанса могут быть недоступны или возвращать пустые значения, так как архитектура работы с сессиями отличается от клиент-серверного варианта.
Определение пользователя в запросах и СКД
При формировании отчетов с использованием Системы Компоновки Данных (СКД) или прямых запросов к базе данных, часто требуется отфильтровать информацию по конкретному сотруднику. В языке запросов 1С для этого предусмотрена специальная псевдо-таблица или параметр, позволяющий обратиться к текущему контексту.
В тексте запроса вы можете использовать конструкцию &ТекущийПользователь как параметр, который автоматически подставляется платформой перед выполнением. Это позволяет писать универсальные отчеты, которые каждый пользователь видит только со своими данными, без необходимости передавать параметр явно из формы.
Если вы пишете сложный запрос с соединениями, убедитесь, что тип данных параметра соответствует типу ссылки на справочник пользователей. Ошибка типизации может привести к тому, что запрос вернет пустой результат, даже если пользователь корректно авторизован в системе.
ВЫБРАТЬ
Документы.РеализацияТоваровУслуг.Ссылка КАК Ссылка,
Документы.РеализацияТоваровУслуг.Ответственный КАК Ответственный
ИЗ
Документ.РеализацияТоваровУслуг КАК Документы.РеализацияТоваровУслуг
ГДЕ
Документы.РеализацияТоваровУслуг.Ответственный = &ТекущийПользователь
⚠️ Внимание: При использовании параметра
&ТекущийПользовательв запросах убедитесь, что у пользователя есть права на чтение справочника «Пользователи», иначе выполнение запроса может быть заблокировано механизмом безопасности (RLS).
Особенности работы в фоновых заданиях и веб-клиенте
Ситуация усложняется, когда код выполняется не в интерактивном режиме, а в фоновом задании или через веб-сервис. В таких сценариях понятие «текущий пользователь» может быть размыто, так как задание может быть запущено от имени администратора или системного пользователя, а не того, кто инициировал процесс.
При запуске фоновых заданий через ПланыОбмена или регламентные операции, контекст пользователя часто передается явно в параметрах запуска. Если это не сделано, система может использовать учетную запись, под которой работает сервис 1С:Предприятие на сервере. Это критично для ведения журналов регистрации.
В веб-клиенте и мобильных приложениях могут возникать особенности с определением имени компьютера. Вместо локального имени ПК может передаваться IP-адрес или идентификатор сессии браузера. Разработчику следует предусмотреть обработку таких случаев, чтобы не ломать логику, завязанную на жесткой привязке к рабочему месту.
- 🖥️ Фоновое задание — выполняется от имени пользователя, запустившего его, или системной учетки.
- 🌐 Веб-клиент — имя компьютера может подменяться на идентификатор сессии.
- 📱 Мобильная платформа — требует специальной обработки идентификаторов устройств.
- ⚙️ Регламентные операции — часто используют предопределенного пользователя «Администратор».
При разработке фоновых обработок всегда явно передавайте ссылку на пользователя-инициатора в параметрах процедуры, чтобы сохранить целостность аудита действий.
Практические примеры кода и обработка ошибок
Для закрепления материала рассмотрим конкретные примеры кода на встроенном языке 1С, демонстрирующие безопасное получение данных о пользователе. Первый пример показывает, как получить ФИО для подстановки в документ, обрабатывая ситуацию, если пользователь не найден.
Второй пример демонстрирует, как можно получить имя пользователя операционной системы, что иногда требуется для интеграции с внешними сервисами или для жесткой привязки лицензии к рабочему месту. Здесь используется объект СистемнаяИнформация.
Всегда оборачивайте критические участки кода в конструкцию Попытка..Исключение, особенно если вы обращаетесь к свойствам сеанса в нестандартных режимах работы. Это предотвратит падение всей программы при возникновении непредвиденной ситуации с правами доступа или целостностью данных справочника.
Функция ПолучитьФИОТекущегоПользователя()
Попытка
ТекущийЮзер = ТекущийПользователь();
Если ТекущийЮзер.Пустая() Тогда
Возврат "Неизвестный пользователь";
КонецЕсли;
Возврат ТекущийЮзер.Наименование;
Исключение
Возврат "Ошибка доступа к данным пользователя";
КонецПопытки;
КонецФункции
☑️ Проверка корректности определения пользователя
Что делать, если функция возвращает пустое значение?
Если ТекущийПользователь() возвращает пустую ссылку, проверьте, запущен ли сеанс в интерактивном режиме. В некоторых случаях при запуске внешних обработок без подключения к основному сеансу контекст пользователя может не инициализироваться. Также проверьте настройки прав доступа для данной роли.
Можно ли изменить текущего пользователя программно?
Нет, сменить активного пользователя в рамках одного запущенного сеанса невозможно. Для смены пользователя необходимо завершить текущий сеанс и выполнить новый вход под другой учетной записью через окно запуска 1С.
Как узнать пользователя, который создал объект в прошлом?
Для этого нужно использовать реквизиты самого документа или элемента справочника, такие как Автор или Ответственный, либо обращаться к журналу регистрации событий, где хранится история действий всех пользователей за прошлые периоды.
Влияет ли режим совместимости на работу метода?
Да, в очень старых версиях конфигураций (до 8.2) некоторые свойства сеанса могли быть недоступны или работать иначе. При поддержке legacy-кода всегда сверяйтесь с документацией по конкретной версии платформы.
Где хранится список всех пользователей системы?
Список пользователей хранится в специальном справочнике метаданных, который обычно называется «Пользователи». Доступ к нему возможен через конфигуратор или через объект метаданных в режиме предприятия при наличии соответствующих прав.