Где 1С хранит пользовательские настройки и как до них добраться
Содержание
Настройки пользователя в 1С 8.3 хранятся не в файлах на компьютере, а внутри самой информационной базы, в пяти системных хранилищах. Получить их можно тремя путями: обработкой Администрирование → Настройки пользователей и прав → Настройки пользователей в типовых конфигурациях на БСП, кодом через ХранилищеОбщихНастроек.ПолучитьВыборку() и родственные методы, либо выгрузкой базы целиком.
Чаще всего настройки нужны в трёх ситуациях: у бухгалтера «поехал» интерфейс, новому сотруднику надо дать такой же рабочий стол, как у коллеги, или базу переносят и не хочется заново настраивать отчёты двадцати пользователям. Способ зависит от задачи и от того, есть ли в конфигурации БСП.
Что относится к настройкам пользователя и где они хранятся
Под «настройками пользователя» в 1С понимают две разные вещи. Путаница между ними — главная причина, почему поиск в Конфигураторе ничего не даёт.
Параметры учётной записи — то, что задаёт администратор:
- 👤 имя и полное имя пользователя;
- 🔑 способ входа: пароль 1С, аутентификация ОС, OpenID;
- 🛡️ список ролей;
- 🖥️ основной интерфейс, язык, режим запуска (управляемое или обычное приложение).
Пользовательские настройки — то, что человек меняет сам в процессе работы: состав и порядок панелей, рабочий стол, видимость колонок в списках, отборы, варианты отчётов, значения по умолчанию.
Вторые платформа складывает в системные хранилища. У каждого своя задача:
| Хранилище | Что в нём лежит |
|---|---|
ХранилищеСистемныхНастроек | Расположение панелей, рабочий стол, размеры и положение окон, настройки форм |
ХранилищеОбщихНастроек | Произвольные настройки, которые сохраняет код конфигурации: основная организация, склад по умолчанию и т. п. |
ХранилищеНастроекДанныхФорм | Отборы, сортировки, сохранённые значения реквизитов форм |
ХранилищеПользовательскихНастроекОтчетов | Пользовательские настройки отчётов: отборы, группировки, периоды |
ХранилищеВариантовОтчетов | Сохранённые варианты отчётов |
Каждая запись в хранилище определяется тремя ключами: ключ объекта (обычно полное имя формы или отчёта), ключ настроек и имя пользователя. Именно по имени, а не по идентификатору: это пригодится при переносе.
Право, без которого настройки не сохраняются
Запись в хранилища зависит от права «Сохранение данных пользователя» в ролях. Если его нет, человек может двигать панели и менять отборы, но после перезапуска всё вернётся к стандартному виду.
Это частая причина жалоб «программа не запоминает мои настройки». Проверьте роли пользователя: в типовых конфигурациях право входит в базовые роли, но в самописных профилях его иногда забывают.
В свойствах конфигурации любое из этих хранилищ можно переопределить на собственное. В типовых решениях на БСП так сделано с вариантами отчётов: они живут в справочнике «Варианты отчётов», а не в стандартном хранилище.
Что видно о пользователе в Конфигураторе
Откройте базу в Конфигураторе и выберите Администрирование → Пользователи. Появится список учётных записей. Двойной щелчок по строке открывает окно свойств с двумя вкладками:
- Основные — имя, полное имя, флаги «Аутентификация 1С:Предприятия», «Аутентификация операционной системы», пароль, признак «Показывать в списке выбора».
- Прочие — роли, основной интерфейс, язык, режим запуска.
Это всё, что Конфигуратор показывает о конкретном пользователе. Содержимое пользовательских настроек — панели, отборы, отчёты — в Конфигураторе не просматривается: отдельного окна для этого в платформе нет.
Что ещё можно посмотреть в Конфигураторе:
- 🔧 в корне дерева метаданных откройте свойства конфигурации и найдите группу свойств хранилищ. Там видно, какие хранилища переопределены и чем;
- 📄 через
Администрирование → Выгрузить информационную базуполучить файл.dt. Он содержит все настройки всех пользователей и пригодится для отката.
Список пользователей в Конфигураторе и справочник «Пользователи» в режиме 1С:Предприятие — разные сущности. В конфигурациях на БСП заводите и меняйте пользователей через справочник, иначе связь между ними собьётся.
Как получить настройки пользователя программно
Для чтения хранилищ у стандартных менеджеров есть три метода: Загрузить() для одной записи, ПолучитьВыборку() для перебора и Удалить(). ПолучитьВыборку() работает только на сервере. Чтобы читать чужие настройки, нужны административные права.
Перечень всех настроек конкретного пользователя
Процедура проходит по четырём стандартным хранилищам и выводит ключи всех записей, найденных у пользователя. Запустите её из внешней обработки с формой, где есть кнопка и поле для имени.
&НаСервереБезКонтекста
Процедура ПоказатьНастройкиНаСервере(ИмяПользователя)
Хранилища = Новый Структура;
Хранилища.Вставить("Системные", ХранилищеСистемныхНастроек);
Хранилища.Вставить("Общие", ХранилищеОбщихНастроек);
Хранилища.Вставить("ДанныеФорм", ХранилищеНастроекДанныхФорм);
Хранилища.Вставить("Отчеты", ХранилищеПользовательскихНастроекОтчетов);
Отбор = Новый Структура("Пользователь", ИмяПользователя);
Для Каждого Элемент Из Хранилища Цикл
Выборка = Элемент.Значение.ПолучитьВыборку(Отбор);
Пока Выборка.Следующий() Цикл
Сообщить(Элемент.Ключ + " | " + Выборка.КлючОбъекта
+ " | " + Выборка.КлючНастроек + " | " + Выборка.Представление);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Если какое-то хранилище в конфигурации переопределено, у него может не оказаться метода ПолучитьВыборку(). Тогда уберите его из структуры.
Чтение одной настройки
Когда ключи известны, проще загрузить конкретное значение:
Значение = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастроек, , "Иванова");
Пустой третий параметр — это описание настроек, оно здесь не нужно. Если запись не найдена, метод вернёт Неопределено.
В конфигурациях на БСП для того же есть обёртка с безопасной проверкой прав:
Значение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(КлючОбъекта, КлючНастроек, Неопределено);
Третий параметр — значение по умолчанию на случай, если записи нет.
Поиск настройки одной формы у всех пользователей
Бывает нужно обратное: выяснить, у кого из сотрудников сохранены настройки конкретного отчёта или списка. Тогда в отборе указывают ключ объекта, а имя пользователя не задают:
Отбор = Новый Структура("КлючОбъекта", КлючОбъекта);
Выборка = ХранилищеПользовательскихНастроекОтчетов.ПолучитьВыборку(Отбор);
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Пользователь + " | " + Выборка.КлючНастроек);
КонецЦикла;
Точное значение ключа объекта удобно взять из вывода первой процедуры: найдите строку с нужным отчётом и скопируйте его.
Параметры учётной записи
Свойства самой учётной записи читаются через менеджер ПользователиИнформационнойБазы:
&НаСервереБезКонтекста
Процедура ПоказатьУчетнуюЗапись(ИмяПользователя)
Пользователь = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);
Если Пользователь = Неопределено Тогда
Сообщить("Пользователь не найден: " + ИмяПользователя);
Возврат;
КонецЕсли;
Сообщить("Полное имя: " + Пользователь.ПолноеИмя);
Сообщить("Вход по паролю 1С: " + Пользователь.АутентификацияСтандартная);
Сообщить("Вход через ОС: " + Пользователь.АутентификацияОС);
Для Каждого Роль Из Пользователь.Роли Цикл
Сообщить("Роль: " + Роль.Имя);
КонецЦикла;
КонецПроцедуры
Для текущего сеанса вместо НайтиПоИмени() используйте ПользователиИнформационнойБазы.ТекущийПользователь().
Что лежит на диске и в таблицах базы
Распространённое заблуждение — искать настройки 8.3 в папке профиля Windows. Начиная с 8.2 их там нет: всё сохраняется в базе.
Из этого следует полезное практическое правило. Если сотрудник заходит в ту же базу с другого компьютера, через терминальный сервер или из браузера, он видит свои панели, отборы и варианты отчётов. Переносить что-то вручную при замене ноутбука не нужно, достаточно добавить базу в список.
Файловая база. Настройки записаны внутри файла 1Cv8.1CD вместе с данными. Отдельно скопировать их файлом нельзя.
Клиент-серверная база . В СУБД каждому хранилищу соответствует таблица:
| Таблица СУБД | Хранилище |
|---|---|
_SystemSettings | системные настройки |
_CommonSettings | общие настройки |
_FrmDtSettings | настройки данных форм |
_RepSettings | пользовательские настройки отчётов |
_RepVarSettings | варианты отчётов |
Сами значения в них хранятся в сжатом двоичном виде.
Не меняйте и не удаляйте записи в этих таблицах средствами СУБД. Лицензионное соглашение 1С запрещает прямую правку таблиц, а платформа кеширует данные и может не увидеть изменений или выдать ошибку при входе пользователя. Всё, что нужно, делается методами хранилищ.
Компьютер пользователя. В профиле Windows остаются только данные, которые относятся к рабочему месту, а не к человеку в базе:
- 📁
%APPDATA%\1C\1CEStart\ibases.v8i— список баз в окне запуска; - 📁
%APPDATA%\1C\1cv8\и%LOCALAPPDATA%\1C\1cv8\— папки с кешем конфигураций, по подпапке на каждую базу; - 📄 файл
def.usrв папке базы — имя пользователя, который входил последним.
Удаление этих папок или запуск с ключом /ClearCache чистит кеш. На панели, отборы и отчёты это не влияет.
Как сбросить и восстановить настройки пользователя
Сброс нужен, когда у человека пропали панели, форма открывается за пределами экрана или отчёт «зависает» на тяжёлом отборе.
Сброс одной формы самим пользователем
В нужной форме нажмите Еще → Изменить форму. В окне настройки формы откройте меню «Ещё» и выберите «Установить стандартные настройки». Сбросится только эта форма, остальное останется.
Для отчёта аналогично: в форме отчёта через «Ещё» есть команда возврата к стандартным настройкам.
Сброс через обработку БСП
- Откройте
Администрирование → Настройки пользователей и прав. - Перейдите по ссылке «Настройки пользователей».
- Выберите пользователя.
- На вкладках «Внешний вид», «Настройки отчетов» и «Прочие настройки» отметьте лишнее или выделите всё.
- Нажмите «Очистить».
Пользователь должен перезайти в программу, иначе часть настроек останется в памяти его сеанса и запишется обратно при выходе.
Сброс кодом
Когда типовой обработки нет, удалите записи методом Удалить(). Значение Неопределено в первых двух параметрах означает «все ключи»:
ХранилищеСистемныхНастроек.Удалить(Неопределено, Неопределено, "Иванова");
Делайте это, когда пользователь не работает в базе. Если он в сеансе, при выходе платформа сохранит настройки из памяти, и сброс не сработает.
Восстановление
Вернуть стёртые настройки штатно нельзя. Единственный способ — развернуть копию базы
из .dt или резервной копии СУБД в отдельную базу и перенести настройки оттуда способом из следующего раздела. Поэтому перед массовой очисткой сделайте выгрузку.
Как скопировать и перенести настройки между пользователями и базами
Внутри одной базы
В обработке «Настройки пользователей» выберите пользователя-образец, отметьте нужные настройки и нажмите «Копировать». Обработка предложит выбрать получателей: одного, нескольких или всех. Удобно, когда в отделе десять бухгалтеров и всем нужен одинаковый набор отчётов.
В другую базу
Если новая база — копия старой через .dt, настройки переезжают автоматически. В остальных случаях выгрузите их в файл и загрузите на стороне приёмника.
Выгрузка общих настроек пользователя:
&НаСервереБезКонтекста
Процедура ВыгрузитьНастройки(ИмяПользователя, ИмяФайла)
Данные = Новый Массив;
Отбор = Новый Структура("Пользователь", ИмяПользователя);
Выборка = ХранилищеОбщихНастроек.ПолучитьВыборку(Отбор);
Пока Выборка.Следующий() Цикл
Запись = Новый Структура("КлючОбъекта, КлючНастроек, Представление, Настройки",
Выборка.КлючОбъекта, Выборка.КлючНастроек, Выборка.Представление, Выборка.Настройки);
Данные.Добавить(Запись);
КонецЦикла;
ЗначениеВФайл(ИмяФайла, Данные);
КонецПроцедуры
Загрузка в базе-приёмнике, в том числе под другим именем пользователя:
&НаСервереБезКонтекста
Процедура ЗагрузитьНастройки(ИмяФайла, НовоеИмяПользователя)
Данные = ЗначениеИзФайла(ИмяФайла);
Для Каждого Запись Из Данные Цикл
Описание = Новый ОписаниеНастроек;
Описание.Представление = Запись.Представление;
ХранилищеОбщихНастроек.Сохранить(Запись.КлючОбъекта, Запись.КлючНастроек,
Запись.Настройки, Описание, НовоеИмяПользователя);
КонецЦикла;
КонецПроцедуры
Путь к файлу задаётся на стороне сервера 1С. Для остальных хранилищ код тот же, меняется только имя менеджера.
Ограничения, о которых стоит знать заранее:
- 🔗 Ссылки на данные. Если в настройке сохранена организация или склад, а в приёмнике у этого элемента другой уникальный идентификатор, после загрузки поле окажется пустым или битым.
- 🧩 Состав метаданных. Настройка формы или отчёта, которого нет в приёмнике, просто не применится.
- 👤 Имя пользователя. Настройки привязаны к строке имени. Если в новой базе пользователь заведён как
Иванова А.С., а неИванова, загружайте под точным новым именем.