В статье рассмотрены стандартные и добавленные в конфигурацию хранилища настроек, их предназначение и средства встроенного языка 1С для взаимодействия с хранилищами настроек.
Содержание
Что же такое хранилища настроек и для чего они нужны?
В процессе работы пользователь постоянно сталкивается с заполнением различных настроек – состав и расположение колонок в списках документов, настройки отчетов, обработок и т.д. И чтобы каждый раз не заполнять одни и те же поля, или не менять местами колонки в нужный порядок, платформа предусматривает сохранение пользовательских настроек. Хранилища настроек – как раз то самое место, где сохраняются пользовательские настройки.
Где еще хранятся настройки?
1С не была бы 1С, если бы все было так просто.
Помимо хранилищ настроек, существует еще несколько мест, где сохраняются пользовательские настройки. Это профайлы – файлы с расширением .pfl. Они располагаются в рабочем каталоге пользователя в папке AppData или Application Data, а также в таблице Files той базы данных, в которой размешена информационная база. Т.е. еще раз – часть профайлов хранится в виде файлов, и их-то как раз можно удалить при очистке кэша, а часть – в самой ИБ.
Как оно работало раньше?
Давным-давно, когда не было еще тонкого клиента и управляемых форм, появились методы для записи и чтения настроек:
СохранитьЗначение();
ВосстановитьЗначение();
Эти методы как раз и работают с таблицей Files. У каждого пользователя ИБ есть уникальный идентификатор – 32 битная строка определенного формата. В разрезе этих идентификаторов и хранятся пользовательские настройки ключ записи – <ИдентификаторПользователя>.pfl, а значение – двоичные данные, среди которых и сохраненные значения.
Однако эти два метода сохранения значений имеют ряд недостатков.
1. Мы не можем узнать весь список значений, которые сохранены в базе. Они могут быть сохранены пользователем, который уже уволен и в базе не работает. Они могут быть сохранены какой-нибудь обработкой, которую мы запустили раз в жизни и удалили, а сохраненные значения от нее остались в базе и занимают место.
2. Сохраненные значения сохраняются в памяти в течение сеанса, но записываются в базу только при закрытии сеанса. Т.е. если произошло аварийное завершение работы (через прерывание отладки или завершение сеанса в диспетчере задач, например), то сохраненные значения не сохранятся.
3. Выборочно удалить сохраненное значение средствами платформы нельзя. Можно только очистить все сохраненные настройки пользователя, в том числе и сохраненные значения.
4. Эти методы работают только в толстом клиенте. В современных типовых решениях воспользоваться ими вряд ли удастся.
Выход - хранилища настроек 1С!
Хранилища настроек – это механизм платформы для хранения и считывания разного рода пользовательских настроек, который включает в себя два вида хранилищ – стандартные и добавленные разработчиком.
К стандартным относятся следующие хранилища:
Системное хранилище – здесь хранятся настройки форм, настройки печати табличного документа, избранное, история поиска и многое другое. Системное хранилище нельзя переопределить – используется только стандартное, предусмотренное платформой. Ему соответствует свойство глобального контекста ХранилищеСистемныхНастроек.
Хранилище общих настроек – предназначено для хранения общих настроек прикладного решения, предусмотренных разработчиком. Т.е. платформа сама в это хранилище ничего не записывает – разработчик на встроенном языке должен описать сохранение и восстановление пользовательских настроек конфигурации. Например, настройки подключаемого оборудования, настройки сообщений при запуске, параметры онлайн-сервисов и т.д. Для этого используется свойство ХранилищеОбщихНастроек.
Хранилище вариантов отчетов – как понятно из названия, здесь хранятся варианты отчетов. Свойство для работы из встроенного языка – ХранилищеВариантовОтчетов.
Хранилище пользовательских настроек отчетов – также предназначено для работы с отчетами, но сохраняет не варианты, а настройки выполненные в пользовательском режиме. Свойство для этого хранилища – ХранилищеПользовательскихНастроекОтчетов.
Хранилище настроек данных форм – используется, например, для сохранения реквизитов обработок, общих форм и т.д. При этом можно указывать разные хранилища для каждого отчета или обработки. Для доступа к этому хранилищу средствами языка 1С используется свойство глобального контекста ХранилищеНастроекДанныхФорм.
Хранилище пользовательских настроек динамического списка – как ни удивительно, здесь хранятся настройки динамических списков – состав и положение колонок, оформление и др. Ему соответствует свойство ХранилищеПользовательскихНастроекДинамическихСписков.
Хранилище настроек на прокачку!
Но не всегда для реализации прикладной логики хватает стандартных возможностей платформы. Для переопределения стандартных хранилищ предусмотрены общие объекты конфигурации – хранилища настроек.
Разработчик может создать необходимое количество хранилищ, и затем указать их в свойствах конфигурации. Одно и то же хранилище настроек в 1С может использоваться в качестве нескольких хранилищ – например, одновременно хранить и варианты отчетов и общие настройки.
Кроме того, как упоминалось выше, можно переопределить стандартное хранилище для вариантов и настроек у отчетов и обработок – делается это в свойствах соответствующего отчета или обработки.
Эти хранилища целесообразно использовать, например, в таких случаях:
- Настройки требуется администрировать – разграничить права, организовать обмен настройками между пользователями
- Требуется организовать миграцию настроек при использовании распределенных БД
- Нужна особая структура хранения настроек
Как использовать хранилища настроек 1С?
Общий принцип такой – если хранилища используются вместо стандартных – они будут вызываться при сохранении или загрузке соответствующих настроек – например, при сохранении настроек динамического списка или отчета. У хранилища настроек есть возможность указать основную форму сохранения и основную форму загрузки, и уже в этих формах описать алгоритмы сохранения настроек, например, в элемент справочника.
Кроме того, разработчик может описать в нужных местах код сохранения и восстановления настроек, например, по кнопке, по определенному действию (например, при переходе на закладку формы сохранять данные предыдущей закладки), обработчику ожидания (например, сохранять настройки каждые 10 минут)
Для этого используется конструкции языка
ХранилищаНастроек.ХранилищеНастроек1.Сохранить
и
ХранилищаНастроек.ХранилищеНастроек1.Загрузить
При этом будут вызваны соответствующие обработчики модуля менеджера хранилища ОбработкаСохранения и ОбработкаЗагрузки. Тут очень важный нюанс! Если не описать соответствующий обработчик, то не будет выполнено соответствующее действие – например, без обработчика ОбработкаСохранения не будут сохранены данные.
Для интерактивного сохранения и восстановления настроек с использованием хранилищ настроек, обязательно необходимо создать формы сохранения и загрузки у соответствующего хранилища. Для программного сохранения и восстановления формы не обязательны.
На этом все, надеюсь, материал оказался вам хоть немного полезным!