Пользовательские настройки в 1С 8.3: устройство хранилищ, резервирование, чистка и код
Содержание
Хранилище настроек 1С 8.3 — это служебные таблицы внутри самой информационной базы, а не файлы на компьютере пользователя. Поэтому настройки уезжают вместе с выгрузкой .dt или резервной копией SQL, а восстановить их можно двумя путями: целиком из копии базы или выборочно, через обработку «Настройки пользователей» и программный код.
Какой путь выбрать, решает масштаб беды. Сломалась форма у одного бухгалтера — хватит очистки его настроек. Пропали настройки у всех после неудачного обновления — нужна резервная копия и перенос данных из неё. Ниже разобраны оба случая, плюс то, как работать с хранилищем из кода и не дать ему разрастись.
Как устроено хранилище настроек в 1С 8.3
Платформа не держит все настройки в одной куче. Она раскладывает их по нескольким стандартным хранилищам, у каждого своя задача и свой объект для обращения из кода.
| Хранилище | Что в нём лежит | Объект во встроенном языке |
|---|---|---|
| Общие настройки | Произвольные значения, которые сохраняет конфигурация: основная организация, флажки «больше не показывать» и т. п. | ХранилищеОбщихНастроек |
| Системные настройки | Положение и размер окон, состав панелей, история, избранное | ХранилищеСистемныхНастроек |
| Настройки данных форм | Значения реквизитов формы, которые помечены для сохранения | ХранилищеНастроекДанныхФорм |
| Варианты отчётов | Сохранённые варианты отчётов на СКД | ХранилищеВариантовОтчетов |
| Пользовательские настройки отчётов | Отборы, период, группировки, которые человек выставил в отчёте | ХранилищеПользовательскихНастроекОтчетов |
Каждая запись в хранилище определяется тремя ключами:
- 🔑 ключ объекта — к чему относится настройка (обычно полное имя формы или отчёта);
- 🏷️ ключ настроек — какая именно настройка внутри объекта;
- 👤 имя пользователя — чья это настройка.
Разработчик может подменить любое стандартное хранилище, кроме системного, своим объектом. Для этого в дереве метаданных есть ветка «Хранилища настроек», а в свойствах корня конфигурации — поля «Хранилище общих настроек», «Хранилище вариантов отчётов» и другие. Если поле заполнено, платформа вызывает обработчики из модуля менеджера этого объекта вместо стандартного механизма.
Ключевое право — «Сохранение данных пользователя». Если его нет в ролях пользователя, платформа ничего не запишет: окна, отборы и варианты будут сбрасываться при каждом входе. Это первая проверка, когда жалуются «настройки не сохраняются».
Где физически хранятся настройки и как их найти
Расположение зависит от варианта работы базы.
Файловая база. Всё лежит внутри файла 1Cv8.1CD в каталоге базы. Отдельной папки с настройками нет, открыть таблицы без платформы нельзя.
Клиент-серверная база . Каждое хранилище — отдельная таблица в СУБД:
| Таблица | Хранилище |
|---|---|
_CommonSettings | общие настройки |
_SystemSettings | системные настройки |
_FrmDtSettings | настройки данных форм |
_RepVarSettings | варианты отчётов |
_RepSettings | пользовательские настройки отчётов |
В таблицах есть колонки с пользователем, ключом объекта, ключом настроек и двоичным полем с самими данными. Прочитать двоичное поле запросом SQL не получится: формат внутренний.
А что тогда лежит в %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8 на компьютере пользователя? Там список баз, кэш конфигурации и временные файлы. Очистка этих папок (или запуск с параметром /ClearCache) не удаляет пользовательские настройки из базы. Это частая путаница: человек чистит кэш в надежде сбросить «сломанную» форму, а форма открывается так же.
Чтобы оценить объём таблиц на сервере, достаточно штатных средств СУБД:
-- MS SQL Server: размер таблицы настроек форм
EXEC sp_spaceused '_FrmDtSettings';
-- PostgreSQL: то же самое
SELECT pg_size_pretty(pg_total_relation_size('_frmdtsettings'));
Нормальный размер — десятки мегабайт. Сотни мегабайт и гигабайты обычно означают, что какая-то форма сохраняет в настройки большие таблицы значений.
Резервная копия хранилища настроек: три способа
Отдельной кнопки «выгрузить только настройки» в платформе нет. Работают три подхода.
| Способ | Что попадёт в копию | Когда выбирать |
|---|---|---|
Выгрузка .dt из конфигуратора | Вся база, включая все хранилища | Перед обновлением, перед массовой чисткой |
| Резервная копия средствами СУБД | Вся база, включая таблицы настроек | Регулярный регламент на сервере |
| Выгрузка через код в файл | Только выбранные хранилища и пользователи | Перенос настроек между базами, точечный откат |
Первые два способа знакомы любому администратору. Выгрузка .dt делается через Администрирование → Выгрузить информационную базу в конфигураторе. Для SQL — обычный полный бэкап.
Третий способ нужен реже, но выручает, когда восстанавливать всю базу нельзя: в ней уже неделя новых документов. Пример обработки, которая сохраняет общие настройки всех пользователей в файл, приведён ниже в разделе про код.
Делайте копию настроек отдельно перед заменой ролей и переименованием пользователей. Именно эти операции чаще всего приводят к тому, что человек «не узнаёт» свою базу.
Как восстановить настройки после сбоя
Порядок действий зависит от того, что именно сломалось.
Испорчены настройки одного пользователя
Типичная картина: у одного сотрудника форма документа открывается с ошибкой или пустой, у остальных всё в порядке. Решение — сбросить его настройки.
- Попросите пользователя выйти из программы.
- В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) откройте
Администрирование → Настройки пользователей и прав → Настройки пользователей. - Выберите пользователя, перейдите на вкладку с нужным видом настроек.
- Отметьте проблемную форму или отчёт и удалите его настройки. Если источник неизвестен — очистите все настройки внешнего вида.
- Пользователь заходит снова, форма открывается в стандартном виде.
Сам пользователь может сбросить внешний вид без администратора: Главное меню → Вид → Установить стандартные настройки. Это касается расположения окон и панелей, но не значений по умолчанию, которые конфигурация хранит в общих настройках.
Пропали или повреждены настройки у многих
Это бывает после восстановления базы «не из той» копии, после сбоя СУБД или после обновления, которое поменяло структуру форм.
- Разверните последнюю исправную резервную копию в отдельную базу. Рабочую не трогайте.
- В копии выгрузите нужные хранилища в файл обработкой из раздела про код.
- В рабочей базе загрузите файл той же обработкой, режим «загрузка».
- Проверьте у двух-трёх пользователей, что формы и отчёты выглядят как раньше.
Не копируйте таблицы настроек между базами средствами SQL. Внутренние идентификаторы и формат данных привязаны к конкретной базе, итог такой операции непредсказуем.
Нужно скопировать настройки от одного пользователя другому
В той же обработке «Настройки пользователей» есть команда копирования: выберите пользователя-образец, отметьте виды настроек и получателей. Удобно для нового сотрудника, который должен видеть те же отчёты и рабочий стол, что и коллега.
Ошибки, из-за которых настройки теряются или ломаются
Большинство проблем создают не сбои, а действия людей.
- 🧹 Чистка «в лоб» через SQL. Команда
TRUNCATEпо таблице настроек форм решает проблему размера, но заодно стирает настройки у всех. Если чистить, то через платформу и выборочно. - ✏️ Переименование пользователя напрямую в конфигураторе. Ключ записи в хранилище — имя пользователя. В конфигурациях на БСП меняйте имя через карточку пользователя в режиме «Предприятие»: там библиотека сама переносит настройки.
- 🗑️ Удаление пользователей без очистки. Записи удалённого сотрудника остаются в таблицах и занимают место. Перед удалением очистите его настройки той же обработкой.
- 🧩 Внешние обработки, которые пишут в общие настройки всё подряд. Одна неудачная доработка способна сохранять при каждом закрытии формы таблицу на десятки тысяч строк.
- 🔐 Урезанные роли. При настройке собственной роли легко забыть право «Сохранение данных пользователя».
Как не дать хранилищу разрастись: советы администратору
Хранилище настроек растёт незаметно. Проблема всплывает, когда формы начинают открываться с задержкой, а выгрузка .dt распухает на сотни мегабайт.
- Раз в квартал смотрите размер таблиц запросом из раздела про физическое хранение. Сравнивайте с прошлым замером.
- Ищите «тяжёлые» записи. Сгруппируйте выборку из хранилища по ключу объекта и посчитайте размер данных. Обычно виноваты 2–3 формы.
- Удаляйте настройки уволенных сотрудников до удаления самих пользователей.
- Не храните в настройках данные. Если доработке нужно запоминать списки, таблицы или файлы, для этого подходит регистр сведений
, а не
ХранилищеОбщихНастроек. - После крупного обновления проверьте формы, у которых поменялся состав реквизитов: старые настройки иногда мешают открытию. Очистка настроек одной формы безопаснее, чем очистка всех.
- Следите за тяжёлыми вариантами отчётов. Если человек сохранил вариант отчёта с периодом «за 10 лет», его открытие будет каждый раз нагружать сервер.
Массовую очистку настроек делайте в нерабочее время и предупредите пользователей: при следующем входе у всех будет стандартный вид окон и отчётов. Люди воспринимают это как «всё сломалось», если не знают заранее.
Работа с хранилищем настроек из кода
У всех стандартных хранилищ одинаковый набор основных методов: Сохранить, Загрузить, Удалить. У стандартных хранилищ есть ещё Выбрать — выборка записей с отбором. Обращение к чужим настройкам требует административных прав.
Сохранить и прочитать значение
// Запомнить основную организацию для текущего пользователя
ХранилищеОбщихНастроек.Сохранить("НастройкиУчета", "ОсновнаяОрганизация", Организация);
// Прочитать при следующем открытии
Организация = ХранилищеОбщихНастроек.Загрузить("НастройкиУчета", "ОсновнаяОрганизация");
Если Организация = Неопределено Тогда
// Настройка ещё не сохранялась — берём значение по умолчанию
КонецЕсли;
В конфигурациях на БСП удобнее вызывать обёртки ОбщегоНазначения.ХранилищеОбщихНастроекСохранить и ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить. Они учитывают право на сохранение данных пользователя и позволяют задать значение по умолчанию прямо в вызове.
Удалить настройки пользователя
// Очистить все настройки данных форм пользователя Иванов
// Неопределено в ключах означает «все ключи»
ХранилищеНастроекДанныхФорм.Удалить(Неопределено, Неопределено, "Иванов");
Код выполняется на сервере под пользователем с административными правами. Сам Иванов в этот момент должен быть вне программы, иначе при закрытии форм его клиент запишет часть настроек заново.
Выгрузить общие настройки всех пользователей в файл
Пример для серверного модуля обработки. Он обходит хранилище и сохраняет записи в массив, а затем пишет массив в файл.
&НаСервереБезКонтекста
Процедура ВыгрузитьОбщиеНастройки(ИмяФайла)
Записи = Новый Массив;
Выборка = ХранилищеОбщихНастроек.Выбрать();
Пока Выборка.Следующий() Цикл
Запись = Новый Структура;
Запись.Вставить("КлючОбъекта", Выборка.КлючОбъекта);
Запись.Вставить("КлючНастроек", Выборка.КлючНастроек);
Запись.Вставить("Пользователь", Выборка.Пользователь);
Запись.Вставить("Настройки", Выборка.Настройки);
Записи.Добавить(Запись);
КонецЦикла;
ЗначениеВФайл(ИмяФайла, Записи);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ЗагрузитьОбщиеНастройки(ИмяФайла)
Записи = ЗначениеИзФайла(ИмяФайла);
Для Каждого Запись Из Записи Цикл
ХранилищеОбщихНастроек.Сохранить(Запись.КлючОбъекта, Запись.КлючНастроек,
Запись.Настройки, , Запись.Пользователь);
КонецЦикла;
КонецПроцедуры
Чтобы выгрузить только одного пользователя, передайте в Выбрать отбор: Новый Структура("Пользователь", "Иванов"). Для других хранилищ меняется лишь имя объекта: ХранилищеНастроекДанныхФорм, ХранилищеВариантовОтчетов и так далее.
Файл пишется на сервере, поэтому путь должен быть доступен процессу сервера 1С, а не компьютеру администратора. В клиент-серверном варианте это частая причина ошибки «не удалось открыть файл».
Собственное хранилище настроек
Если стандартного механизма мало — например, настройки нужно хранить в регистре и видеть их в обычном отчёте — создайте объект в ветке «Хранилища настроек» и укажите его в свойствах конфигурации. В модуле менеджера опишите обработчики ОбработкаСохранения и ОбработкаЗагрузки: платформа будет вызывать их вместо записи в стандартную таблицу. Метод Выбрать у такого хранилища не работает
, обход записей придётся писать самому через регистр.
Такую доработку в типовой конфигурации лучше делать расширением, чтобы не снимать конфигурацию с поддержки.
Частые вопросы о хранилище настроек
Попадают ли пользовательские настройки в выгрузку .dt?
.dt и копия SQL содержат их полностью.