Где удобнее всего хранить настройки для регламентных заданий и обменов в 1С?

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

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

Разберем основные практические варианты хранения настроек в платформе 1С:Предприятие 8.3, их плюсы, минусы и примеры реализации.

Вариант 1. Использование объекта метаданных «Константа» с типом ХранилищеЗначения или Строка (JSON)

Создание константы — один из самых простых, наглядных и надежных способов сохранения настроек в информационной базе. Константа добавляет минимум сущностей в структуру метаданных, легко выводится на общую форму настроек и кэшируется платформой.

Для хранения набора параметров создадим константу, например НастройкиПодключенияFTP. Для типа значения выберем ХранилищеЗначения либо Строка неограниченной длины (для сериализации в JSON).

Посмотрим на пример сохранения и чтения параметров через ХранилищеЗначения:


// Сохранение настроек из формы
Настройки = Новый Структура;
Настройки.Вставить("Сервер", "ftp.example.com");
Настройки.Вставить("Порт", 21);
Настройки.Вставить("Пользователь", "ftp_user");
Настройки.Вставить("КаталогВыгрузки", "/upload/");

Константы.НастройкиПодключенияFTP.Установить(Новый ХранилищеЗначения(Настройки));

Теперь разберем чтение этих настроек в коде регламентного задания:


// Чтение настроек в регламентном задании
Хранилище = Константы.НастройкиПодключенияFTP.Получить();
Если Хранилище <> Неопределено Тогда
    Настройки = Хранилище.Получить();
    Если ТипЗнч(Настройки) = Тип("Структура") Тогда
        Сервер = Настройки.Сервер;
        Порт = Настройки.Порт;
        // Дальнейшая логика подключения к FTP
    КонецЕсли;
КонецЕсли;

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

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

Механизм доступен на сервере и позволяет читать и записывать произвольные сериализуемые структуры данных. Проанализируем пример работы с общими настройками:


// Запись настроек из формы
КлючОбъекта = "ИнтеграцияСФТП";
КлючНастроек = "ПараметрыПодключения";

Настройки = Новый Структура;
Настройки.Вставить("Сервер", "ftp.example.com");
Настройки.Вставить("Порт", 21);
Настройки.Вставить("Пользователь", "ftp_user");

ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройки);

Чтение параметров в контексте регламентного или фонового задания выполняется так:


// Чтение настроек в фоновом задании
КлючОбъекта = "ИнтеграцияСФТП";
КлючНастроек = "ПараметрыПодключения";

Настройки = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастроек);
Если Настройки <> Неопределено Тогда
    Сервер = Настройки.Сервер;
    // Работа с полученными параметрами
КонецЕсли;

Вариант 3. Передача настроек через параметры регламентного задания

В объекте РегламентноеЗадание предусмотрено свойство Параметры (тип Массив). Если настройки привязаны исключительно к конкретному регламентному заданию, их можно передавать непосредственно в момент его запуска.

Разберем программную настройку регламентного задания:


// Поиск и установка параметров задания
МассивЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания(
    Новый Структура("Метаданные", Метаданные.РегламентныеЗадания.ВыгрузкаНаFTP)
);

Если МассивЗаданий.Количество() > 0 Тогда
    Задание = МассивЗаданий[0];
    
    ПараметрыЗадания = Новый Массив;
    ПараметрыЗадания.Добавить("ftp.example.com"); // 1-й параметр процедуры
    ПараметрыЗадания.Добавить(21);                // 2-й параметр
    
    Задание.Параметры = ПараметрыЗадания;
    Задание.Записать();
КонецЕсли;

В модуле регламентного задания процедура обработчика принимает эти значения в виде входных аргументов.

Важные нюансы и безопасность при работе с настройками

При выборе способа хранения параметров подключений обратим внимание на следующие правила:

  1. Безопасность паролей: Хранить открытые пароли в общих настройках или открытых строках небезопасно. Если конфигурация использует Библиотеку стандартных подсистем (БСП), рекомендуется использовать механизм безопасного хранения данных (регистр сведений БезопасноеХранилищеДанных или соответствующие функции БСП), где пароли шифруются платформенными средствами.
  2. Контекст регламентного задания: Фоновые задания выполняются без интерактивного пользователя. Хранилища настроек, привязанные к текущему пользователю (например, ХранилищеНастроекДанныхФорм), для фоновых сеансов недоступны. Использовать следует именно ХранилищеОбщихНастроек или константы.
  3. Сериализуемость объектов: При сохранении параметров в ХранилищеЗначения или через системные хранилища убедимся, что все вложенные элементы структуры являются сериализуемыми типами (Строка, Число, Булево, Дата, Структура, Соответствие, Массив). Ссылки на динамические формы или COM-объекты сохранять нельзя.
  4. Кэширование и блокировки: Читать настройки из констант или хранилищ внутри фонового задания можно свободно, однако сохранять изменения следует только из формы настройки по действию пользователя, чтобы исключить ненужный сброс системного кэша и блокировки таблиц во время выполнения регламентных процедур.
← На главную