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