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

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

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

Использование системного объекта «ХранилищеОбщихНастроек»

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

Разберем программный код, который позволяет автоматизировать процесс сохранения и восстановления реквизитов формы. Для этого мы создадим две вспомогательные процедуры. Обратите внимание, что для работы с настройками на стороне сервера нам потребуется контекст выполнения.

Проанализируем пример кода для сохранения настроек:


&НаСервере
Процедура СохранитьНастройкуФормы(ИмяНастройки)
    // В качестве первого параметра передаем уникальный идентификатор нашей обработки
    // В качестве второго — имя конкретного параметра
    // В качестве третьего — само значение реквизита
    ХранилищеОбщихНастроек.Сохранить("МояВнешняяОбработка_Настройки", ИмяНастройки, ЭтаФорма[ИмяНастройки]);
КонецПроцедуры

И код для их восстановления при открытии формы:


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

Важный нюанс: Метод ХранилищеОбщихНастроек.Сохранить имеет четвертый необязательный параметр — Пользователь. Если его не указывать, настройка сохраняется только для текущего пользователя. Чтобы сделать настройки общими для всех, необходимо в этот параметр передать пустую строку или специальное имя, однако это требует наличия у пользователей прав на «Сохранение данных конфигурации».

Автоматизация через события формы

Чтобы пользователю не приходилось нажимать кнопку «Сохранить», мы можем привязать вызов процедур к событиям изменения реквизитов на клиенте. Рассмотрим пошагово, как это реализовать:

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

Посмотрим на пример реализации клиентской части:


&НаКлиенте
Процедура СерверИППриИзменении(Элемент)
    СохранитьНастройкуФормы("СерверИП");
КонецПроцедуры

&НаКлиенте
Процедура ПортПриИзменении(Элемент)
    СохранитьНастройкуФормы("Порт");
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ВосстановитьНастройкуФормы("СерверИП");
    ВосстановитьНастройкуФормы("Порт");
КонецПроцедуры

В данном примере мы использовали обращение к реквизиту через ЭтаФорма[ИмяРеквизита]. Это позволяет сделать код универсальным и не переписывать его под каждое новое поле.

Использование механизмов БСП (Библиотеки стандартных подсистем)

Если ваша конфигурация построена на базе БСП (что справедливо для большинства современных типовых решений), рекомендуется использовать штатные средства подсистемы «Варианты отчетов» или «Дополнительные отчеты и обработки». Рассмотрим подробнее ситуацию с внешними обработками, зарегистрированными в справочнике ДополнительныеОтчетыИОбработки.

В типовых решениях настройки внешних обработок часто сохраняются в реквизит самого справочника ДополнительныеОтчетыИОбработки, который имеет тип ХранилищеЗначения. Это позволяет настройкам «путешествовать» вместе с объектом при выгрузке/загрузке в другие базы.

Также стоит обратить внимание на механизм Безопасного хранилища данных БСП. Если ваша обработка хранит пароли (например, от SSH или FTP), сохранять их через обычное ХранилищеОбщихНастроек в открытом виде — плохая практика с точки зрения безопасности. Проанализируем, как использовать безопасное хранилище:

Альтернативный метод: Хранение в файлах JSON или XML

В базовых версиях программ 1С иногда удобнее хранить настройки не в базе данных, а в локальном файле рядом с самой обработкой. Это особенно актуально, если вы хотите, чтобы настройки сохранялись даже при запуске обработки в другой копии базы данных.

Рассмотрим, как реализовать сохранение в JSON:


&НаСервере
Процедура СохранитьВФайл()
    СтруктураНастроек = Новый Структура;
    СтруктураНастроек.Вставить("СерверИП", СерверИП);
    СтруктураНастроек.Вставить("Логин", Логин);
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.ОткрытьФайл("C:\Settings\my_setup.json");
    ЗаписатьJSON(ЗаписьJSON, СтруктураНастроек);
    ЗаписьJSON.Закрыть();
КонецПроцедуры

Такой подход позволяет легко редактировать настройки даже без запуска 1С, просто открыв файл в текстовом редакторе. Однако помните о путях доступа: в веб-клиенте или при работе в облаке (1С:Фреш) прямая работа с файловой системой будет ограничена требованиями безопасности.

Стандартные возможности управляемых форм

Не стоит забывать, что платформа 1С предоставляет встроенный механизм автоматического сохранения данных формы. Если мы откроем свойства формы в конфигураторе (или программно в обработке), мы увидим раздел «Данные настроек».

Выясним, как использовать этот функционал без написания лишнего кода:

  1. У формы установите свойство АвтоматическоеСохранениеДанныхВНастройках в значение «Использовать».
  2. В свойстве СохраняемыеДанные выберите те реквизиты формы, которые должны запоминаться платформой.
  3. В свойстве ХранилищеНастроек можно выбрать, куда именно платформа будет писать эти данные (по умолчанию используется ХранилищеОбщихНастроек).

Этот метод является самым «чистым» и предпочтительным для типовых задач, так как он полностью поддерживается платформой и не требует ручного вызова процедур сохранения при изменении каждого поля.

Заключение

Мы проанализировали различные подходы к сохранению настроек внешних обработок. Для быстрой разработки в простых условиях отлично подходит прямое использование ХранилищеОбщихНастроек. Для профессиональных тиражных решений лучше опираться на механизмы БСП или встроенные возможности управляемых форм. Выбор конкретного метода всегда зависит от ваших требований к безопасности и того, насколько универсальной должна быть ваша обработка.

← На главную