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