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

Разработка и Конфигурация · 11 мин

Как получить код пользователя в 1С

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

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

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

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

Что именно считается «кодом пользователя» в 1С

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

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

Как посмотреть код пользователя в режиме 1С:Предприятие

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

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

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

Как посмотреть код вручную
  1. 1
    Откройте «Администрирование» → «Пользователи и права» → «Пользователи»
  2. 2
    Если колонки «Код» нет — включите её через «Ещё» → «Изменить форму»
  3. 3
    Откройте карточку нужного пользователя и найдите код в заголовке формы
  4. 4
    Для просмотра логина перейдите по ссылке настроек входа в карточке

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

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

Текущий пользователь сеанса

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

ТекущийПользователь = Пользователи.ТекущийПользователь();

КодПользователя = ТекущийПользователь.Код;

Обратите внимание: обращение ТекущийПользователь.Код выполняет запрос к базе. Если код нужен в цикле или в часто вызываемом коде, получите его один раз и сохраните в переменную.

Имя и идентификатор пользователя информационной базы

Если нужны данные учётной записи входа, а не справочника, используйте менеджер пользователей ИБ:

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

ИмяПользователя = ПользовательИБ.Имя; // логин

Идентификатор = ПользовательИБ.УникальныйИдентификатор; // GUID записи ИБ

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

Код по известному имени пользователя

Когда известен логин, элемент справочника ищут через идентификатор пользователя ИБ:

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

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

СсылкаПользователь = Справочники.Пользователи.НайтиПоРеквизиту(

"ИдентификаторПользователяИБ",

ПользовательИБ.УникальныйИдентификатор);

Если Не СсылкаПользователь.Пустая() Тогда

КодПользователя = СсылкаПользователь.Код;

КонецЕсли;

КонецЕсли;

Как получить коды всех пользователей запросом

Для отчётов и выгрузок удобнее получить список кодов одним запросом, а не перебором:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Пользователи.Код КАК Код,

| Пользователи.Наименование КАК Наименование,

| Пользователи.Ссылка КАК Ссылка

|ИЗ

| Справочник.Пользователи КАК Пользователи

|ГДЕ

| НЕ Пользователи.ПометкаУдаления";

Результат = Запрос.Выполнить().Выгрузить();

Фильтр по пометке удаления исключает неактуальные записи. Если нужен GUID ссылки для обмена, добавьте в запрос вычисление через УникальныйИдентификатор() уже на стороне кода — в языке запросов прямого представления GUID нет, его получают методом Ссылка.УникальныйИдентификатор() при обходе выборки.

Для разового просмотра без программирования подойдёт консоль запросов (внешняя обработка) или универсальный отчёт по справочнику «Пользователи» с выводом реквизита «Код».

bsl
Сообщить(Пользователи.ТекущийПользователь().Код);

Как получить GUID пользователя для обмена и интеграций

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

GUID = XMLСтрока(ТекущийПользователь.УникальныйИдентификатор());

Обратное преобразование строки в ссылку выполняется так:

НовыйGUID = Новый УникальныйИдентификатор(СтрокаGUID);

СсылкаПользователь = Справочники.Пользователи.ПолучитьСсылку(НовыйGUID);

Если СсылкаПользователь.ПолучитьОбъект() = Неопределено Тогда

// объекта с таким GUID в базе нет

КонецЕсли;

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

Какой идентификатор выбрать

Код справочника

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

GUID ссылки

Стандарт для обменов и внешних интеграций. Сложнее читается человеком, требует преобразования в строку

ИдентификаторПользователяИБ

Нужен для связи справочника с учётной записью входа и для типовых механизмов БСП. Не заполнен у пользователей без входа в программу

Имя пользователя ИБ

Удобно для логов и аудита входа. Не является ключом данных, может совпадать с наименованием не всегда

Типичные ошибки и ограничения

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

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

Третья ошибка — поиск по наименованию вместо кода или GUID. Наименования («Иванов Иван Иванович») не уникальны и редактируются пользователями с правами, поэтому поиск по ним ненадёжен.

Ограничение прав: без роли «Добавление изменение пользователей» или полных прав часть данных (настройки входа, идентификаторы ИБ) будет недоступна даже на чтение в отдельных конфигурациях.

Типичные ошибки
01
Поиск пользователя по коду справочника между разными базами — коды не совпадают, используйте GUID
02
Вызов ТекущийПользователь() в фоновом задании без проверки — получаете пустую или служебную ссылку
03
Поиск по наименованию — наименования не уникальны и редактируются
04
Обращение к реквизиту «Код» через точку в цикле — лишние запросы к базе и падение производительности
05
Путаница между GUID ссылки и ИдентификаторомПользователяИБ — это разные идентификаторы с разным назначением

Как проверить, что получен правильный код

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

Для GUID дополнительно проверьте обратное преобразование: строка должна успешно превращаться в ссылку, а ссылка — находить существующий объект, а не «битую» ссылку. Признак битой ссылки — текст вида «Объект не найден» в представлении.

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

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

Код из программы и код в карточке пользователя
Норма

Значения совпадают

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

Коды различаются — вероятно, получен код другого объекта

Обратное преобразование GUID в ссылку
Норма

Ссылка находит существующий объект

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

«Объект не найден» — GUID из другой базы или объект удалён

Работа в фоновом задании
Норма

Возвращается осмысленный пользователь

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

Пустая ссылка или служебный пользователь — задайте пользователя фонового задания явно

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

Чем код пользователя отличается от GUID?

Код — реквизит справочника, который заполняется автонумерацией и уникален только в пределах одной базы. GUID присваивается объекту при создании, не меняется и одинаков в любой копии базы, куда объект перенесён штатными средствами. Для внутреннего поиска достаточно кода, для обменов — только GUID.

Почему Пользователи.ТекущийПользователь() возвращает пустую ссылку?

Чаще всего код выполняется в контексте без аутентифицированного пользователя: фоновое задание без указания пользователя, внешнее соединение, COM-подключение. Проверьте, задан ли пользователь у фонового задания, и добавьте обработку пустой ссылки.

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

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

Можно ли изменить код пользователя вручную?

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

Где хранится код пользователя в файловой базе?

Как реквизит справочника «Пользователи» — в таблице этого справочника в файле 1Cv8.1CD. Напрямую читать файл базы сторонними средствами не следует: формат закрытый, а вмешательство повреждает данные. Используйте штатные механизмы платформы.

Как получить код пользователя через внешнюю обработку?

Создайте внешнюю обработку с формой, добавьте команду и в её обработчике вызовите Пользователи.ТекущийПользователь() с выводом кода через Сообщить() или в поле формы. Для серверного вызова в управляемой форме используйте метод с директивой «&НаСервереБезКонтекста».

Итог

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

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