diamond АШ Tlg

Способ хранения пользовательских и общих настроек для расширений 1С 8.3

Хранение настроек в базе 1С без реструктуризации таблиц СУБД.

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

  • при создании регистров происходит реструктуризация таблиц СУБД, что иногда нежелательно или затруднительно выполнить, особенно на высоконагруженных системах;
  • данные настроек уничтожаются при случайном или вынужденном удалении расширения;
  • требуется написать относительно много кода для работы с регистрами.

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

Процедура ЗаписатьНастройку(Ключ, Значение) Экспорт
    
    ХранилищеОбщихНастроек.Сохранить("РазработкаВасяна", Ключ, Значение,, "#ФейковыйЮзерНеСуществует");

КонецПроцедуры

Функция ПолучитьНастройку(Ключ) Экспорт
    
    УстановитьПривилегированныйРежим(Истина);
    Возврат ХранилищеОбщихНастроек.Загрузить("РазработкаВасяна", Ключ,, "#ФейковыйЮзерНеСуществует");
    
КонецФункции

Пояснение: настройки в виде любого произвольного значения записываются для пользователя #ФейковыйЮзерНеСуществует, из наименования которого следует что такого пользователя создавать не нужно. Это текстовый параметр функций "Загрузить" и "Сохранить" и трюк состоит в том, что платформа не производит проверку существования такого пользователя.

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