Администрирование · 11 мин
Как получить пользователя информационной базы в 1С
Как получить пользователя информационной базы в 1С: через конфигуратор, встроенный язык и СУБД. Примеры кода, проверка результата, типичные ошибки.
Задача «получить пользователя информационной базы» возникает в двух ситуациях: когда администратору нужен список учётных записей для проверки прав, и когда разработчику требуется программно определить, кто работает в системе или найти конкретную учётную запись по имени, GUID или полному имени. В 1С:Предприятии для этого существуют штатные механизмы — как интерактивные (через конфигуратор), так и программные через объект ПользователиИнформационнойБазы.
Ниже разобраны основные способы: просмотр списка пользователей в конфигураторе, получение текущего пользователя сеанса, поиск пользователя по имени и уникальному идентификатору, перебор всех учётных записей, а также особенности работы в клиент-серверном варианте. Для каждого способа приведены примеры кода, условия применения и ограничения.
Просмотр пользователей через конфигуратор
Самый простой способ получить пользователя информационной базы — открыть список учётных записей в конфигураторе. Для этого запустите 1С в режиме «Конфигуратор», выберите в главном меню пункт Администрирование → Пользователи. Откроется окно со списком всех зарегистрированных учётных записей информационной базы.
В списке видны имя пользователя (логин), полное имя, признаки доступности аутентификации 1С и операционной системы, а также назначенные роли. Двойной щелчок по строке открывает карточку пользователя, где можно посмотреть и изменить пароль, роли, язык интерфейса и другие параметры. Учтите: открыть этот список может только пользователь с правом «Администрирование» или с полными правами.
Если база файловая и в ней нет ни одного пользователя с административными правами, аутентификация при входе не запрашивается — это нормальное поведение платформы, а не признак ошибки.
Получение текущего пользователя сеанса
Для определения того, под какой учётной записью выполняется текущий сеанс, используется метод ПользователиИнформационнойБазы.ТекущийПользователь(). Он возвращает объект типа ПользовательИнформационнойБазы, из которого можно прочитать имя, полное имя, уникальный идентификатор и другие свойства.
Типичный пример кода:
ТекПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
Сообщить("Имя: " + ТекПользователь.Имя);
Сообщить("Полное имя: " + ТекПользователь.ПолноеИмя);
Сообщить("GUID: " + ТекПользователь.УникальныйИдентификатор);
Метод доступен на сервере и на толстом клиенте. Если сеанс запущен без аутентификации (например, в файловой базе без пользователей), свойство Имя вернёт пустую строку. В типовых конфигурациях вместо прямого обращения часто используют функции общего модуля Пользователи из БСП, которые возвращают уже элемент справочника «Пользователи», связанный с учётной записью.
Поиск пользователя по имени и GUID
Когда известен логин учётной записи, применяется метод НайтиПоИмени(). Он выполняет точное сравнение без учёта регистра и возвращает объект пользователя либо Неопределено, если запись не найдена.
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени("ИвановИИ");
Если ПользовательИБ = Неопределено Тогда
Сообщить("Пользователь не найден");
Иначе
Сообщить("Найден: " + ПользовательИБ.ПолноеИмя);
КонецЕсли;
Если известен уникальный идентификатор (например, он хранится в справочнике «Пользователи» типовой конфигурации), используйте НайтиПоУникальномуИдентификатору(). Идентификатор передаётся как объект типа УникальныйИдентификатор или как строка, которую платформа преобразует автоматически:
ГУИД = Новый УникальныйИдентификатор("a1b2c3d4-e5f6-7890-abcd-ef1234567890");
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ГУИД);
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);
Если ПользовательИБ <> Неопределено Тогда
Сообщить(ПользовательИБ.ПолноеИмя);
КонецЕсли;Поиск по GUID надёжнее поиска по имени: логин администратор может переименовать, а уникальный идентификатор остаётся неизменным на протяжении всего времени существования учётной записи. Именно поэтому типовые конфигурации связывают элементы справочника «Пользователи» с учётными записями именно через GUID.
Получение полного списка пользователей программно
Метод ПолучитьПользователей() возвращает массив всех учётных записей информационной базы. Он подходит для выгрузки списка, аудита прав, синхронизации со справочником пользователей и поиска записей по произвольным условиям.
МассивПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ПользовательИБ Из МассивПользователей Цикл
Сообщить(ПользовательИБ.Имя + " | " + ПользовательИБ.ПолноеИмя);
КонецЦикла;
У каждого элемента массива доступны свойства: Имя, ПолноеИмя, УникальныйИдентификатор, АутентификацияСтандартная, АутентификацияОС, ПользовательОС, Роли, ПоказыватьВСпискеВыбора, ЗапрещеноИзменятьПароль и другие. Пароль программно прочитать нельзя — платформа хранит только его хеш, и свойство Пароль доступно только для записи.
Для больших баз перебор выполняется быстро, так как данные читаются из служебной таблицы платформы, а не из объектов конфигурации. Однако сам вызов требует права «Администрирование» — без него методы менеджера вызовут исключение нарушения прав доступа.
- 1Убедитесь, что код выполняется в контексте с административными правами или в привилегированном модуле
- 2Определите критерий поиска: имя, GUID или перебор всего списка
- 3Вызовите соответствующий метод менеджера ПользователиИнформационнойБазы
- 4Проверьте результат на Неопределено перед обращением к свойствам
- 5Выведите или обработайте полученные данные
Особенности для клиент-серверного варианта и внешних инструментов
В клиент-серверной архитектуре список пользователей также виден в консоли кластера серверов 1С: в ветке конкретной информационной базы есть узел «Пользователи». Это удобно, когда конфигуратор недоступен, но есть доступ к консоли администрирования сервера. Данные там те же самые — платформа читает их из служебной таблицы базы данных.
Прямой запрос к таблицам СУБД для получения пользователей применять не рекомендуется: структура служебных таблиц платформы не документирована и может меняться между версиями, а ручное вмешательство способно повредить базу. Если нужна внешняя выгрузка, безопаснее написать обработку на встроенном языке или использовать механизм внешнего управления сеансами.
В файловых базах, опубликованных на веб-сервере, и в сервисе 1С:Фреш поведение методов то же, но в облачном сервисе часть административных функций ограничена политиками менеджера сервиса.
Права, ограничения и типичные ошибки
Все методы объекта ПользователиИнформационнойБазы требуют права «Администрирование» у текущего пользователя либо выполнения кода в привилегированном модуле (установленный признак «Привилегированный режим»). Это стандартный способ выполнять административные операции из пользовательских процедур, не выдавая сотрудникам полные права.
Частая ошибка — обращение к свойствам результата поиска без проверки на Неопределено. Если пользователь с таким именем не существует, попытка прочитать, например, ПользовательИБ.Имя вызовет исключение «Значение не является значением объектного типа». Всегда проверяйте результат перед использованием.
Вторая типичная ситуация — путаница между учётной записью информационной базы и элементом справочника «Пользователи». В типовых конфигурациях большинству прикладных задач (подстановка ответственного, отборы по автору) нужен именно элемент справочника, а не объект платформы. Связь между ними выполняется через свойство ИдентификаторПользователяИБ справочника.
Проверка результата и практические рекомендации
После выполнения кода убедитесь, что получен именно тот объект, который ожидался. Для разовой проверки достаточно вывести имя, полное имя и GUID через Сообщить() и сверить со списком в конфигураторе. Для массовой выгрузки полезно сравнить количество элементов массива с числом строк в окне «Пользователи» — значения должны совпадать.
Если обработка работает у администратора, но падает у рядового пользователя, причина почти всегда в правах. Перенесите вызов в серверную процедуру с установленным привилегированным режимом либо используйте функции БСП, которые уже решают эту задачу.
Как проверить результат
Возвращён объект, свойства Имя и ПолноеИмя заполнены
Результат равен Неопределено — пользователь с такими данными отсутствует
Число элементов массива совпадает с количеством строк в конфигураторе
Массив пуст или меньше ожидаемого — проверьте, к той ли базе подключён сеанс
Код выполняется без исключений
Ошибка «Нарушение прав доступа» — нет права Администрирование, нужен привилегированный режим
Что важно запомнить
Интерактивно пользователи открываются через Администрирование → Пользователи в конфигураторе. Программно работают три метода: ТекущийПользователь() для текущего сеанса, НайтиПоИмени() и НайтиПоУникальныйИдентификатор() для точного поиска, ПолучитьПользователей() для полного списка. Всегда проверяйте результат на Неопределено и помните про требование административных прав.
Частые вопросы
Можно ли программно узнать пароль пользователя информационной базы?
Нет. Платформа хранит только хеш пароля, свойство «Пароль» доступно исключительно для записи (установки нового значения). Восстановить забытый пароль штатными средствами нельзя — администратор может только задать новый.
Почему НайтиПоИмени возвращает Неопределено, хотя пользователь есть в списке?
Метод ищет по свойству «Имя» (логину), а не по полному имени. Проверьте, что передаёте именно логин без лишних пробелов. Если известно только полное имя, переберите массив из ПолучитьПользователей() и сравните свойство ПолноеИмя.
Как получить пользователя, не выдавая сотруднику административные права?
Поместите код в серверную процедуру общего модуля с включённым привилегированным режимом либо используйте УстановитьПривилегированныйРежим(Истина) внутри процедуры. В типовых конфигурациях для этого есть готовые функции общего модуля «Пользователи».
Чем отличается ПользователиИнформационнойБазы.ТекущийПользователь() от функции Пользователи.ТекущийПользователь() в типовых?
Первый метод платформы возвращает учётную запись информационной базы (логин, GUID, роли). Функция БСП возвращает элемент справочника «Пользователи», который используется в документах, ответственных и отборах. Для прикладной логики почти всегда нужен второй вариант.
Можно ли получить список пользователей из внешней программы без запуска 1С?
Штатного внешнего API для чтения учётных записей нет. Практикуемый вариант — обработка или регламентное задание внутри 1С, выгружающая список в файл или HTTP-сервис. Прямое чтение служебных таблиц СУБД не рекомендуется из-за недокументированной структуры и риска повреждения данных.