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

Администрирование · 11 мин

Как получить пользователя информационной базы в 1С

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

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

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

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

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

В списке видны имя пользователя (логин), полное имя, признаки доступности аутентификации 1С и операционной системы, а также назначенные роли. Двойной щелчок по строке открывает карточку пользователя, где можно посмотреть и изменить пароль, роли, язык интерфейса и другие параметры. Учтите: открыть этот список может только пользователь с правом «Администрирование» или с полными правами.

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

Получение текущего пользователя сеанса

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

Типичный пример кода:

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

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

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

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

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

Поиск пользователя по имени и GUID

Когда известен логин учётной записи, применяется метод НайтиПоИмени(). Он выполняет точное сравнение без учёта регистра и возвращает объект пользователя либо Неопределено, если запись не найдена.

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

Если ПользовательИБ = Неопределено Тогда

Сообщить("Пользователь не найден");

Иначе

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

КонецЕсли;

Если известен уникальный идентификатор (например, он хранится в справочнике «Пользователи» типовой конфигурации), используйте НайтиПоУникальномуИдентификатору(). Идентификатор передаётся как объект типа УникальныйИдентификатор или как строка, которую платформа преобразует автоматически:

ГУИД = Новый УникальныйИдентификатор("a1b2c3d4-e5f6-7890-abcd-ef1234567890");

ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ГУИД);

bsl
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);
Если ПользовательИБ <> Неопределено Тогда
    Сообщить(ПользовательИБ.ПолноеИмя);
КонецЕсли;

Поиск по GUID надёжнее поиска по имени: логин администратор может переименовать, а уникальный идентификатор остаётся неизменным на протяжении всего времени существования учётной записи. Именно поэтому типовые конфигурации связывают элементы справочника «Пользователи» с учётными записями именно через GUID.

Получение полного списка пользователей программно

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

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

Для Каждого ПользовательИБ Из МассивПользователей Цикл

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

КонецЦикла;

У каждого элемента массива доступны свойства: Имя, ПолноеИмя, УникальныйИдентификатор, АутентификацияСтандартная, АутентификацияОС, ПользовательОС, Роли, ПоказыватьВСпискеВыбора, ЗапрещеноИзменятьПароль и другие. Пароль программно прочитать нельзя — платформа хранит только его хеш, и свойство Пароль доступно только для записи.

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

Порядок действий при программном получении пользователя
  1. 1
    Убедитесь, что код выполняется в контексте с административными правами или в привилегированном модуле
  2. 2
    Определите критерий поиска: имя, GUID или перебор всего списка
  3. 3
    Вызовите соответствующий метод менеджера ПользователиИнформационнойБазы
  4. 4
    Проверьте результат на Неопределено перед обращением к свойствам
  5. 5
    Выведите или обработайте полученные данные

Особенности для клиент-серверного варианта и внешних инструментов

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

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

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

Права, ограничения и типичные ошибки

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

Частая ошибка — обращение к свойствам результата поиска без проверки на Неопределено. Если пользователь с таким именем не существует, попытка прочитать, например, ПользовательИБ.Имя вызовет исключение «Значение не является значением объектного типа». Всегда проверяйте результат перед использованием.

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

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

Проверка результата и практические рекомендации

После выполнения кода убедитесь, что получен именно тот объект, который ожидался. Для разовой проверки достаточно вывести имя, полное имя и GUID через Сообщить() и сверить со списком в конфигураторе. Для массовой выгрузки полезно сравнить количество элементов массива с числом строк в окне «Пользователи» — значения должны совпадать.

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

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

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

Результат поиска
Норма

Возвращён объект, свойства Имя и ПолноеИмя заполнены

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

Результат равен Неопределено — пользователь с такими данными отсутствует

Список пользователей
Норма

Число элементов массива совпадает с количеством строк в конфигураторе

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

Массив пуст или меньше ожидаемого — проверьте, к той ли базе подключён сеанс

Права доступа
Норма

Код выполняется без исключений

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

Ошибка «Нарушение прав доступа» — нет права Администрирование, нужен привилегированный режим

Итог

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

Интерактивно пользователи открываются через Администрирование → Пользователи в конфигураторе. Программно работают три метода: ТекущийПользователь() для текущего сеанса, НайтиПоИмени() и НайтиПоУникальныйИдентификатор() для точного поиска, ПолучитьПользователей() для полного списка. Всегда проверяйте результат на Неопределено и помните про требование административных прав.

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

Можно ли программно узнать пароль пользователя информационной базы?

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

Почему НайтиПоИмени возвращает Неопределено, хотя пользователь есть в списке?

Метод ищет по свойству «Имя» (логину), а не по полному имени. Проверьте, что передаёте именно логин без лишних пробелов. Если известно только полное имя, переберите массив из ПолучитьПользователей() и сравните свойство ПолноеИмя.

Как получить пользователя, не выдавая сотруднику административные права?

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

Чем отличается ПользователиИнформационнойБазы.ТекущийПользователь() от функции Пользователи.ТекущийПользователь() в типовых?

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

Можно ли получить список пользователей из внешней программы без запуска 1С?

Штатного внешнего API для чтения учётных записей нет. Практикуемый вариант — обработка или регламентное задание внутри 1С, выгружающая список в файл или HTTP-сервис. Прямое чтение служебных таблиц СУБД не рекомендуется из-за недокументированной структуры и риска повреждения данных.