Где хранить общие настройки для внешних обработок в 1С:Бухгалтерия 3.0 КОРП?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При разработке и внедрении дополнительных (внешних) обработок в типовую конфигурацию 1С:Бухгалтерия предприятия КОРП 3.0 часто возникает задача сохранения пользовательских настроек. Нам необходимо, чтобы при нажатии кнопки «Настройка» пользователь мог задать параметры, которые будут действовать для всей базы и для всех пользователей единовременно, при этом база должна оставаться полностью типовой без изменения структуры метаданных.

Рассмотрим подробнее доступные механизмы платформы 1С и Библиотеки Стандартных Подсистем (БСП), которые позволяют реализовать подобную функциональность, а также проанализируем ограничения каждого подхода.

Способ 1. Использование Хранилища Общих Настроек с фиксированным идентификатором

Разберем классический способ платформы 1С: использование системного объекта ХранилищеОбщихНастроек. Стандартный метод Сохранить() принимает параметр ИмяПользователя. Если передавать туда конкретную фиксированную строку (например, имя виртуального пользователя), платформа сохранит эти данные под указанным именем в системной таблице настроек, делая их доступными для чтения всем сеансам.

Посмотрим на пример кода сохранения и чтения данных:


// Сохранение общих настроек
СтруктураНастроек = Новый Структура;
СтруктураНастроек.Вставить("Организация", Объект.Организация);
СтруктураНастроек.Вставить("КаталогВыгрузки", Объект.КаталогВыгрузки);

ХранилищеОбщихНастроек.Сохранить("ВнешняяОбработка_Имя", "ОбщиеНастройки", СтруктураНастроек, , "ВиртуальныйПользовательНастроек");

Для загрузки сохраненной структуры из любого пользовательского сеанса используем следующий код:


// Чтение общих настроек
Настройки = ХранилищеОбщихНастроек.Загрузить("ВнешняяОбработка_Имя", "ОбщиеНастройки", , "ВиртуальныйПользовательНастроек");
Если ТипЗнч(Настройки) = Тип("Структура") Тогда
    ЗаполнитьЗначенияСвойств(Объект, Настройки);
КонецЕсли;

Важное ограничение: Вызов методов ХранилищеОбщихНастроек с указанием стороннего имени пользователя требует наличия у текущего сеанса права АдминистрированиеДанных. Если у рядового пользователя этого права нет, платформа сгенерирует ошибку доступа. При этом вызов УстановитьПривилегированныйРежим(Истина) во внешней обработке, запущенной в безопасном режиме, не сработает.

Способ 2. Использование Хранилища Настроек Данных Форм

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


// Сохранение настроек
ХранилищеНастроекДанныхФорм.Сохранить("ВнешняяОбработка_Имя", "КлючНастроек", СтруктураНастроек);

// Загрузка настроек
Настройки = ХранилищеНастроекДанныхФорм.Загрузить("ВнешняяОбработка_Имя", "КлючНастроек");

Особенность: Объект ХранилищеНастроекДанныхФорм строго привязан к текущему пользователю ИБ. По умолчанию этот метод подходит только для сохранения персональных настроек текущего сеанса. Если перед нами стоит задача сделать настройки одинаковыми для всех пользователей базы, этот вариант использовать напрямую нельзя.

Способ 3. Использование справочника «Дополнительные отчеты и обработки» и регистра дополнительных сведений

Проанализируем возможности типовых подсистем БСП в 1С:Бухгалтерия КОРП 3.0. Любая внешняя обработка регистрируется в справочнике ДополнительныеОтчетыИОбработки.

Для сохранения общих настроек обработке можно использовать механизм дополнительных сведений:

  1. Подключаем к элементу справочника ДополнительныеОтчетыИОбработки новое дополнительное сведение через стандартный интерфейс БСП.
  2. Значения настроек будут храниться в типовом регистре сведений ДополнительныеСведения.
  3. Запись и чтение сведений производятся с помощью программного интерфейса БСП (модуль УправлениеСвойствами).

Этот способ безопасен с точки зрения прав доступа, так как типовые роли БСП позволяют пользователям работать со сведениями без необходимости предоставления административных прав.

Способ 4. Использование служебных файлов БСП

Ещё один практичный вариант без изменения основной конфигурации — использование справочника Файлы, входящего в подсистему работы с файлами БСП:

  1. При первом открытии формы настройки программно проверяется наличие служебного элемента в справочнике Файлы (например, с именем "Настройки_[ИмяОбработки]").
  2. Данные настроек сериализуются в структуру или текстовый файл (JSON/XML) и записываются в хранилище значений элемента справочника или связанного регистра двоичных данных.
  3. Все пользователи базы с правами на чтение служебных файлов получают доступ к актуальным настройкам.

Способ 5. Использование расширения конфигурации (.cfe)

Если внешняя обработка является крупным решением и используется на постоянной основе, наиболее надежным подходом будет создание легкого расширения конфигурации:

  1. В расширение добавляется специальный регистр сведений (например, СохраняемыеНастройкиОбщие) с измерениями КлючНастройки и ресурсом ЗначениеНастройки (тип ХранилищеЗначения).
  2. Основная конфигурация остается полностью типовой и не снимается с поддержки.
  3. Обработка свободно считывает и записывает данные через регистр сведений без проблем с безопасным режимом и правами администратора.

Итоги и рекомендации

Выяснив особенности каждого метода, подведем итог:

  1. Если все пользователи имеют административные права — проще всего использовать ХранилищеОбщихНастроек с указанием фиксированного имени виртуального пользователя.
  2. Если пользователи имеют ограниченные права и обработка работает в стандартном режиме БСП — оптимальным решением станет сохранение данных через регистр ДополнительныеСведения или служебный файл подсистемы Файлы.
  3. Для масштабных проектов и гарантированной стабильности рекомендуется выносить хранение настроек в отдельное расширение конфигурации.
← На главную