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