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

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

Как получить настройки текущего пользователя 1С

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

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

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

Что понимать под «настройками текущего пользователя»

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

Прежде чем писать код, определите, какая из этих сущностей вам нужна. Для проверки прав достаточно учётной записи. Для подстановки подразделения или склада в документ нужен элемент справочника. Для чтения сохранённых пользователем значений — хранилище настроек.

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

Базовый способ — метод менеджера ПользователиИнформационнойБазы. Он работает на сервере и на толстом клиенте и возвращает объект с полным описанием учётной записи.

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

ИмяПользователя = ТекущийПользовательИБ.Имя;

ПолноеИмя = ТекущийПользовательИБ.ПолноеИмя;

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

Роли = ТекущийПользовательИБ.Роли;

Если сеанс запущен без аутентификации (например, фоновое задание или веб-сервис с анонимным доступом), метод вернёт Неопределено. Всегда проверяйте это перед обращением к свойствам, иначе получите ошибку «Поле объекта не обнаружено».

Для проверки роли удобнее использовать встроенную функцию РольДоступна("ПолныеПрава") — она не требует получения объекта пользователя и работает быстрее.

Как получить пользователя из справочника в типовой конфигурации

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

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

// Вернёт ссылку на элемент справочника "Пользователи"

Подразделение = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(

ПользовательСсылка, "Подразделение");

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

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

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

"ВЫБРАТЬ ПЕРВЫЕ 1

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

|ИЗ

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

|ГДЕ

| Пользователи.ИдентификаторПользователяИБ = &Идентификатор";

Запрос.УстановитьПараметр("Идентификатор",

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

Учтите, что в справочнике могут существовать элементы без связанной учётной записи (служебные или отключённые пользователи), а один идентификатор должен встречаться только у одного элемента.

Как прочитать сохранённые настройки пользователя

Для чтения персональных настроек платформа предоставляет хранилища: ХранилищеОбщихНастроек, ХранилищеПользовательскихНастроекОтчетов, ХранилищеНастроекДанныхФорм и другие. Чаще всего нужно именно общее хранилище.

ЗначениеНастройки = ХранилищеОбщихНастроек.Загрузить(

"МоиНастройки", // ключ объекта

"ОсновнаяОрганизация", // ключ настройки

, // значение по умолчанию

ИмяПользователя()); // имя пользователя ИБ

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

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

Порядок чтения настройки текущего пользователя
  1. 1
    Определите ключ объекта и ключ настройки — посмотрите, где конфигурация сохраняет значение (обычно это видно в коде записи настройки)
  2. 2
    Получите имя пользователя через ИмяПользователя()
  3. 3
    Вызовите ХранилищеОбщихНастроек.Загрузить() с указанием ключей и имени пользователя
  4. 4
    Проверьте результат на Неопределено и подставьте значение по умолчанию
  5. 5
    Выполните код под нужным пользователем и убедитесь, что вернулось ожидаемое значение

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

Многие конфигурации при входе пользователя заполняют параметры сеанса — например, «ТекущийПользователь», «ТекущаяОрганизация». Это самый быстрый способ доступа: значение вычисляется один раз при старте сеанса и хранится в памяти.

ТекущийПользователь = ПараметрыСеанса.ТекущийПользователь;

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

Какой способ выбрать

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

Подходит для проверки ролей, имени и аутентификации. Не даёт доступа к прикладным данным справочника

ПараметрыСеанса

Самый быстрый доступ, но работает только с параметрами, предусмотренными конфигурацией, и заполняется при старте сеанса

Справочник Пользователи (БСП)

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

ХранилищеОбщихНастроек

Единственный способ прочитать сохранённые пользователем значения настроек. Требует знать ключи объекта и настройки

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

Самый надёжный способ проверки — выполнить код в консоли кода (внешней обработке) под тем пользователем, для которого пишется логика. Результат, полученный под администратором, часто отличается: у администратора больше ролей, другие настройки и другое заполнение параметров сеанса.

Для диагностики выведите промежуточные значения через Сообщить() или запись в журнал регистрации: имя пользователя, наличие объекта, возвращаемое значение настройки. Если настройка не читается, проверьте, что она вообще была сохранена — метод ХранилищеОбщихНастроек.Сохранить() должен был вызваться с теми же ключами.

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

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

Объект текущего пользователя
Норма

Метод вернул объект с заполненным именем

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

Возвращено Неопределено — сеанс без аутентификации

Чтение настройки
Норма

Загрузить() вернул ожидаемое значение

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

Возвращено Неопределено — неверные ключи или настройка не сохранялась

Ссылка справочника
Норма

Получена ссылка, реквизиты читаются

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

Пустая ссылка — нет элемента с таким идентификатором ИБ

Параметр сеанса
Норма

Значение заполнено сразу после входа

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

Пусто — ошибка в модуле установки параметров сеанса

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

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

Третья группа проблем связана с правами. Чтение чужих настроек и списка пользователей информационной базы требует соответствующих прав; код, работающий у администратора, у рядового пользователя может молча вернуть пустой результат или выдать ошибку доступа. Тестируйте права отдельно.

Типичные ошибки
01
Обращение к свойствам объекта пользователя без проверки на Неопределено — ошибка в фоновых заданиях
02
Поиск настроек по наименованию элемента справочника вместо имени пользователя ИБ — настройка не находится
03
Использование Пользователи.ТекущийПользователь() в конфигурации без БСП — метод не существует
04
Отладка только под администратором — у обычного пользователя другие права и настройки
05
Чтение настройки до того, как она была хоть раз сохранена, без значения по умолчанию

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

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

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

Почему ХранилищеОбщихНастроек.Загрузить() возвращает Неопределено?

Чаще всего не совпадают ключи объекта или настройки с теми, что использовались при сохранении, либо настройка сохранялась под другим именем пользователя. Проверьте код записи и убедитесь, что передаёте то же имя, что возвращает ИмяПользователя().

Можно ли получить настройки другого пользователя, а не текущего?

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

Чем отличается ТекущийПользователь() от ИмяПользователя()?

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

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

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

Что делать, если в конфигурации нет справочника «Пользователи»?

Работайте напрямую с учётной записью через ПользователиИнформационнойБазы, а дополнительные данные храните в своём регистре сведений с измерением по идентификатору или имени пользователя либо в хранилище общих настроек.

Итог

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

Учётная запись, элемент справочника и пользовательские настройки — три разные сущности с разными методами доступа. Получайте пользователя через ПользователиИнформационнойБазы или функции БСП, настройки — через хранилища по имени пользователя, всегда проверяйте результат на Неопределено и тестируйте код под целевой ролью.