Как сохранять настройки и параметры во внешней обработке 1С?

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

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

Ограничение платформы: почему нельзя сохранять данные внутрь файла EPF

Выясним важную техническую особенность: платформа 1С:Предприятие не позволяет программно изменять и перезаписывать структуру, реквизиты или макеты запущенного файла внешней обработки из пользовательского режима. Макеты обработки доступны исключительно для чтения. Кроме того, при работе в клиент-серверном режиме двоичные данные внешней обработки передаются на сервер во временное хранилище, и обработка может не иметь прямого доступа к исходному файлу на диске клиента.

Поэтому сохранение настроек реализуется либо в информационной базе (без изменения конфигурации), либо во внешних файлах конфигурации, либо через преднастроенные эталонные макеты.

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

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

Разберем по шагам реализацию сохранения и загрузки произвольных параметров:

  1. Формируем структуру с необходимыми настройками и сохраняем её по уникальному ключу объекта.
  2. При открытии формы считываем сохраненную структуру и заполняем реквизиты.

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


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

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


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

Вариант 2. Штатное сохранение данных в управляемой форме

Рассмотрим стандартный механизм управляемых форм, который позволяет сохранять значения реквизитов формы автоматически при закрытии и восстанавливать их при открытии:

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

Вариант 3. Хранение настроек во внешнем файле (XML или JSON)

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

Посмотрим на пример сохранения таблицы или структуры в файл JSON на стороне клиента:


&НаКлиенте
Процедура ЭкспортНастроекВФайл(ПутьКФайлу)
    Настройки = ПолучитьНастройкиДляЭкспорта();
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.ОткрытьФайл(ПутьКФайлу);
    ЗаписатьJSON(ЗаписьJSON, Настройки);
    ЗаписьJSON.Закрыть();
КонецПроцедуры

Для чтения файла используется парный объект ЧтениеJSON, после чего прочитанные структуры переносятся в реквизиты обработки.

Вариант 4. Поставка преднастроенных эталонных данных в макетах (Read-Only)

Если разработчик хочет распространять обработку с заранее заполненными базовыми классификаторами или правилами по умолчанию, эти данные зашиваются в макет обработки в Конфигураторе:

  1. Создаем в обработке макет с типом Двоичные данные или Текстовый документ.
  2. Загружаем в него заранее подготовленный файл с данными (XML, JSON или CSV).
  3. При первом запуске обработки считываем макет через метод ЭтотОбъект.ПолучитьМакет("ИмяМакета") и заполняем рабочие таблицы формы.
← На главную