Разработка и Конфигурация · 11 мин
Как получить настройки пользователя 1С программно
Способы программного получения настроек пользователя в 1С: ХранилищеОбщихНастроек, пользователи информационной базы, примеры кода и типичные ошибки.
В 1С существует несколько разных механизмов хранения пользовательских настроек, и выбор способа программного доступа зависит от того, какие именно настройки нужны: параметры отчётов, настройки форм, персональные предпочтения пользователя или служебные данные вроде имени пользователя информационной базы. Путаница между этими механизмами — главная причина ошибок, когда код «не находит» настройку, которая на самом деле хранится в другом месте.
Основной инструмент для работы с пользовательскими настройками — объект ХранилищеОбщихНастроек, доступный через глобальный контекст. Он предназначен для сохранения и загрузки произвольных значений, привязанных к конкретному пользователю: отборов, параметров печати, значений по умолчанию. Дополнительно существуют системные хранилища настроек форм и отчётов, а также объектная модель пользователей информационной базы.
Ниже разобраны основные способы получения настроек с примерами кода, особенности работы в клиент-серверном режиме, ограничения прав доступа и типичные ошибки при обращении к хранилищам.
Какие виды настроек пользователя существуют в 1С
Прежде чем писать код, нужно определить, где физически хранится нужная настройка. Платформа разделяет несколько независимых хранилищ, и универсального метода «получить всё про пользователя» не существует.
Общие настройки — произвольные значения, которые прикладной код сохраняет через ХранилищеОбщихНастроек: последний выбранный склад, признак «не показывать подсказку», параметры обмена. Настройки форм — состав и порядок колонок таблиц, размеры окон, которые платформа сохраняет автоматически. Пользовательские настройки отчётов — варианты отборов и параметров СКД, сохранённые пользователем. Отдельно стоят свойства учётной записи: имя, полное имя, роли, язык, аутентификация.
Сравнение вариантов
Подходит для произвольных прикладных настроек, привязанных к пользователю. Ограничение: структуру ключей разработчик задаёт сам, единого реестра нет.
Только для настроек вариантов отчётов на СКД. Не подходит для произвольных данных.
Свойства учётной записи и аутентификации. Требует права Администрирование для чтения чужих пользователей.
Получение настроек через ХранилищеОбщихНастроек
Базовый метод — ХранилищеОбщихНастроек.Загрузить(). Он принимает ключ объекта, ключ настроек, значение по умолчанию (необязательно) и имя пользователя. Если пользователь не указан, настройка читается для текущего пользователя сеанса.
// Настройка текущего пользователя
СкладПоУмолчанию = ХранилищеОбщихНастроек.Загрузить(
"Обработка.ПодборТоваров", // ключ объекта
"ОсновнойСклад", // ключ настройки
Неопределено); // значение по умолчанию
// Настройка другого пользователя
НастройкаИванова = ХранилищеОбщихНастроек.Загрузить(
"Обработка.ПодборТоваров",
"ОсновнойСклад",
,
"ИвановИИ"); // имя пользователя ИБ
Сохранение выполняется симметрично методом Сохранить(). Важно следить за согласованностью ключей: если при сохранении использовался один ключ объекта, а при загрузке другой, метод вернёт значение по умолчанию без какой-либо ошибки. Это самая частая причина «пропавших» настроек.
ХранилищеОбщихНастроек.Сохранить(
"Обработка.ПодборТоваров",
"ОсновнойСклад",
ВыбранныйСклад);
Значение = ХранилищеОбщихНастроек.Загрузить("КлючОбъекта", "КлючНастройки", ЗначениеПоУмолчанию, ИмяПользователя);Как получить список всех настроек пользователя
Метод Загрузить() требует точного знания ключей. Если нужно перебрать все сохранённые настройки пользователя — например, для переноса на другую базу или диагностики — используется метод ПолучитьСписок(). Он возвращает список значений с ключами объектов или настроек.
СписокНастроек = ХранилищеОбщихНастроек.ПолучитьСписок(
"", // ключ объекта — пусто, значит все объекты
"ИвановИИ"); // пользователь
Для Каждого Элемент Из СписокНастроек Цикл
Сообщить(Элемент.Значение); // ключ объекта настроек
КонецЦикла;
Для полной выгрузки удобно использовать метод ВыгрузитьНастройки(), который возвращает структуру со всеми настройками указанного пользователя. Это удобно при миграции пользователей между базами, но помните: выгруженные значения могут содержать ссылки на объекты, которые в другой базе не существуют, — такие ссылки станут битыми.
Получение данных учётной записи пользователя
Если под «настройками пользователя» понимаются свойства учётной записи — имя, полное имя, роли, язык, способы аутентификации — используется менеджер ПользователиИнформационнойБазы.
// Текущий пользователь сеанса
ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
ИмяПользователя = ТекущийПользователь.Имя;
ПолноеИмя = ТекущийПользователь.ПолноеИмя;
// Поиск произвольного пользователя
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени("ИвановИИ");
Если ПользовательИБ <> Неопределено Тогда
Для Каждого Роль Из ПользовательИБ.Роли Цикл
Сообщить(Роль.Имя);
КонецЦикла;
КонецЕсли;
Обратите внимание на ограничение прав: чтение данных других пользователей требует права Администрирование. Без него доступен только текущий пользователь сеанса, а вызов НайтиПоИмени() для чужой учётной записи вызовет исключение. В типовых конфигурациях с подсистемой БСП вместо прямой работы с ПользователиИнформационнойБазы обычно используют функции общего модуля Пользователи — например, Пользователи.ТекущийПользователь() возвращает ссылку на элемент справочника, а не объект учётной записи.
Настройки отчётов и форм
Пользовательские настройки вариантов отчётов на СКД хранятся в отдельном хранилище — ХранилищеПользовательскихНастроекОтчетов. Работа с ним аналогична общему хранилищу: те же методы Загрузить, Сохранить, ПолучитьСписок, но ключи формирует платформа по ключу варианта отчёта.
СписокНастроек = ХранилищеПользовательскихНастроекОтчетов.ПолучитьСписок(
"Отчет.Продажи/КлючВарианта",
"ИвановИИ");
Настройки форм (ширина колонок, видимость) платформа сохраняет автоматически в системное хранилище, и напрямую читать их прикладным кодом обычно не требуется. Для очистки таких настроек у пользователя в файловом режиме достаточно удалить служебные файлы настроек, а в клиент-серверном — использовать очистку через администрирование или методы хранилища настроек форм. Программная очистка всех настроек пользователя выполняется методом Удалить() соответствующего хранилища с пустыми ключами.
Проверка результата и типичные ошибки
После загрузки настройки всегда проверяйте, что вернулось именно ожидаемое значение, а не значение по умолчанию. Если метод вернул Неопределено или переданное значение по умолчанию — настройки с такими ключами у этого пользователя нет, либо ключи не совпадают с теми, что использовались при сохранении.
Для диагностики полезно временно вывести полный список настроек пользователя через ПолучитьСписок() и сравнить фактические ключи с теми, что использует код. Также проверьте, под каким именем пользователь фактически входит в базу: имя учётной записи может отличаться от представления в справочнике.
Как проверить результат
Ожидаемое сохранённое значение
Значение по умолчанию при уверенности, что настройка сохранялась — проверяйте ключи
ИмяПользователя() совпадает с владельцем настройки
Код выполняется под другой учётной записью, например в фоновом задании
Чтение чужих настроек работает без исключений
Ошибка нарушения прав доступа — нужно право Администрирование или выполнение в привилегированном режиме
Особенности фоновых заданий и веб-клиента
В фоновом задании «текущий пользователь» — это пользователь, от имени которого задание запущено, а не инициатор интерактивного действия. Если фоновое задание должно работать с настройками конкретного сотрудника, имя пользователя нужно явно передать в задание параметром и указывать в методах хранилища.
В веб-клиенте и при работе через тонкий клиент механика хранилищ идентична — настройки хранятся на сервере, поэтому пользователь видит одни и те же настройки с разных рабочих мест. Это одно из преимуществ перед локальным хранением параметров в файлах или реестре, которое иногда встречается в старых доработках.
Что важно запомнить
Прикладные настройки читаются через ХранилищеОбщихНастроек.Загрузить() с точными ключами, учётные записи — через ПользователиИнформационнойБазы, настройки отчётов — через отдельное хранилище. Всегда проверяйте ключи, имя пользователя и права доступа: большинство проблем связано именно с ними.
Частые вопросы
Как узнать, какие настройки вообще сохранены у пользователя?
Вызовите ХранилищеОбщихНастроек.ПолучитьСписок("", "ИмяПользователя") — метод вернёт список ключей объектов, по которым есть сохранённые данные. Для полной выгрузки всех значений используйте ВыгрузитьНастройки().
Почему Загрузить() возвращает Неопределено, хотя настройка сохранялась?
Чаще всего не совпадают ключи объекта или настройки между Сохранить() и Загрузить(). Также проверьте, что чтение выполняется для того же пользователя, и что сохранение вообще отработало — например, не было прервано исключением.
Можно ли получить настройки другого пользователя без прав администратора?
Чтение хранилища настроек для другого пользователя и доступ к чужим учётным записям требуют права Администрирование. Альтернатива — выполнить код в привилегированном модуле на сервере, где проверка прав не выполняется, но делать это нужно осознанно и только в доверенном коде.
Чем отличается справочник «Пользователи» от пользователя информационной базы?
Пользователь ИБ — объект платформы для аутентификации и ролей. Справочник «Пользователи» в типовых конфигурациях — прикладной объект с дополнительными данными (подразделение, физлицо). Они связаны через идентификатор пользователя ИБ, и настройки хранилищ привязаны именно к имени пользователя ИБ.
Как программно удалить все настройки пользователя?
Используйте метод Удалить() нужного хранилища с пустыми ключами объекта и настройки и указанием имени пользователя — это удалит все его настройки в данном хранилище. Операция необратима, поэтому перед очисткой имеет смысл сделать выгрузку настроек.
Работают ли сохранённые настройки после переноса базы на другой сервер?
Да, если переносилась вся база целиком: хранилища настроек — часть информационной базы и переносятся вместе с ней. Проблемы возникают только при выборочной выгрузке данных или при переносе настроек между разными конфигурациями.