К статье
Практический материал

Разработка и Конфигурация · 11 мин

Где хранить настройки обработки в 1С

Разбираем, где хранить настройки обработки 1С: хранилище значений, регистры сведений, константы, файлы и системное хранилище. Примеры кода, сравнение и ошибки.

Настройки обработки в 1С — это параметры, которые пользователь или разработчик задаёт один раз, а обработка применяет при каждом запуске: пути к файлам обмена, признаки режимов работы, выбранные организации, расписания, шаблоны выгрузки. Правильный выбор места хранения определяет, переживут ли настройки обновление конфигурации, будут ли доступны всем пользователям или только конкретному, и не потеряются ли при переносе базы.

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

Ниже разобраны все основные варианты: где физически лежат данные, как их читать и сохранять из кода, когда вариант уместен, а когда приведёт к потере настроек или конфликтам между пользователями.

Системное хранилище настроек: персональные параметры пользователя

Стандартное хранилище настроек — встроенный механизм платформы, который автоматически используется для сохранения настроек форм, отчётов и обработок. Данные хранятся в таблицах информационной базы и привязаны к конкретному пользователю. Именно сюда попадают настройки, когда вы в форме обработки включаете «Сохранять значения» для реквизитов.

Обращение к хранилищу из кода выполняется через менеджер ХранилищеСистемныхНастроек. Сохранение и чтение выглядят так:

// Сохранение

ХранилищеСистемныхНастроек.Сохранить("Обработка.ЗагрузкаПрайсов", "КаталогЗагрузки", "D:\Prices\");

// Чтение

Каталог = ХранилищеСистемныхНастроек.Загрузить("Обработка.ЗагрузкаПрайсов", "КаталогЗагрузки");

Если Каталог = Неопределено Тогда

Каталог = ""; // значение по умолчанию

КонецЕсли;

Главное ограничение: настройки привязаны к пользователю. Если обработкой пользуются пять сотрудников, каждый настроит её отдельно. Кроме того, при удалении пользователя его настройки теряются, а перенос между базами штатно не предусмотрен — только через копирование таблиц или выгрузку.

Константы: простые глобальные параметры

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

// Запись

Константы.КаталогОбменаОбработкой.Установить("\\server\exchange\");

// Чтение

Каталог = Константы.КаталогОбменаОбработкой.Получить();

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

Регистр сведений: настройки в разрезе пользователей и организаций

Когда настройки нужно хранить в разрезе пользователей, подразделений или организаций, стандартное решение — регистр сведений. Например, регистр «НастройкиОбработки» с измерением «Пользователь» и ресурсами «КаталогЗагрузки», «РежимВыгрузки», «ОтправлятьУведомления». Каждый пользователь получает свою строку настроек, администратор может централизованно посмотреть и поправить значения всех.

МенеджерЗаписи = РегистрыСведений.НастройкиОбработки.СоздатьМенеджерЗаписи();

МенеджерЗаписи.Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь().Имя;

МенеджерЗаписи.КаталогЗагрузки = "D:\Prices\";

МенеджерЗаписи.Записать();

Плюсы: данные видны в базе, участвуют в резервном копировании, доступны запросами и в отчётах. Минусы: требуется доработка конфигурации (для внешней обработки — создание регистра в конфигураторе), а схема «измерение-ресурс» не подходит для произвольных вложенных структур вроде таблиц сопоставления полей.

Сравнение вариантов хранения

Системное хранилище настроек

Персональные настройки формы; не требует доработок, но не переносится между базами и привязано к пользователю

Константы

Одно глобальное значение на базу; просто, но без разрезов и только примитивные типы

Регистр сведений

Настройки в разрезе пользователей/организаций; видны в базе, но нужна доработка конфигурации

Хранилище значений

Произвольные структуры (таблицы, списки, соответствия); сериализация, нельзя фильтровать запросом внутри

Файл на диске

Перенос между базами и резервная копия; не защищён от удаления и конфликтов доступа

Хранилище значений: сложные структуры настроек

Если настройка обработки — это не пара строк, а таблица значений, соответствие, структура с вложенными списками отборов, используйте тип «ХранилищеЗначения». Обычно его добавляют как реквизит справочника (например, элемента справочника «НастройкиОбработок») или ресурс регистра сведений. Внутрь сериализуется любой объект, поддерживающий сериализацию.

// Сохранение структуры настроек

Настройки = Новый Структура;

Настройки.Вставить("Каталог", "D:\Prices\");

Настройки.Вставить("СоответствиеПолей", ТаблицаСоответствий);

ОбъектНастройки = Справочники.НастройкиОбработок.НайтиПоКоду("ЗагрузкаПрайсов").ПолучитьОбъект();

ОбъектНастройки.ДанныеНастроек = Новый ХранилищеЗначения(Настройки, Новый СжатиеДанных(9));

ОбъектНастройки.Записать();

// Чтение

Сохраненные = ОбъектНастройки.ДанныеНастроек.Получить();

Если Сохраненные <> Неопределено Тогда

Каталог = Сохраненные.Каталог;

КонецЕсли;

Ключевые моменты: при чтении всегда проверяйте результат Получить() на Неопределено — в пустом хранилище вернётся именно оно, а обращение к свойству вызовет ошибку. Содержимое хранилища нельзя отфильтровать запросом напрямую — чтобы искать по настройкам, дублируйте ключевые параметры в обычных реквизитах. При изменении состава структуры в новых версиях обработки предусмотрите значения по умолчанию для отсутствующих ключей.

Файлы настроек: перенос между базами и резервные копии

Сохранение настроек во внешний файл (XML, JSON) оправдано в трёх случаях: нужно перенести настройки между базами, сделать резервную копию перед экспериментами или передать настройки коллеге. Встроенные механизмы: ЗаписьJSON/ЧтениеJSON или сериализация через СериализаторXDTO.

Запись = Новый ЗаписьJSON;

Запись.ОткрытьФайл("D:\settings\obrabotka.json");

Запись.ЗаписатьНачалоОбъекта();

Запись.ЗаписатьСвойство("Каталог", "D:\Prices\");

Запись.ЗаписатьСвойство("РежимТест", Истина);

Запись.ЗаписатьКонецОбъекта();

Запись.Закрыть();

Риски файлового варианта: файл легко удалить или перезаписать, при одновременной работе нескольких пользователей с общим файлом возможны конфликты, а путь к файлу на локальном диске пользователя недоступен при работе через веб-клиент или на сервере. Поэтому файлы — дополнение к основному хранилищу в базе, а не замена ему.

Маршрут решения

Как выбрать место хранения

Настройки индивидуальны для каждого пользователя и меняются редкоИспользуйте ХранилищеСистемныхНастроек или автосохранение реквизитов формы
Одно-два глобальных параметра на всю базуСоздайте константы и форму настроек
Настройки различаются по пользователям или организациям и их должен видеть администраторСоздайте регистр сведений с нужными измерениями
Настройки — сложная структура (таблицы соответствий, списки отборов)Храните в реквизите типа ХранилищеЗначения справочника настроек
Нужен перенос настроек между базами или резервная копияДобавьте выгрузку/загрузку в JSON-файл как дополнительную функцию

Практический порядок внедрения и проверка результата

Для типовой внешней обработки рабочая схема выглядит так: основные параметры сохраняются в системное хранилище автоматически (свойство «Сохранять данные в настройках» у реквизитов формы), а кнопки «Сохранить в файл» и «Загрузить из файла» дают возможность переноса. Для встроенной в конфигурацию обработки добавляется справочник или регистр сведений.

Порядок действий
  1. 1
    Определите состав настроек и их разрез: общие или персональные
  2. 2
    Выберите механизм хранения по таблице решений выше
  3. 3
    Реализуйте сохранение при закрытии формы или по кнопке
  4. 4
    Реализуйте чтение с проверкой на Неопределено и значениями по умолчанию
  5. 5
    Проверьте сценарий первого запуска, когда настроек ещё нет
  6. 6
    Проверьте сохранность настроек после перезапуска сеанса и под другим пользователем

Отдельно протестируйте первый запуск: когда настройки ещё ни разу не сохранялись, код не должен падать с ошибкой, а обработка должна работать на значениях по умолчанию. Это самая частая ошибка — разработчик тестирует на своей базе, где настройки уже есть.

Типичные ошибки
01
Хранение общих настроек в системном хранилище — у каждого пользователя оказываются свои значения, и поведение обработки различается
02
Отсутствие проверки на Неопределено при чтении — ошибка при первом запуске у нового пользователя
03
Хранение ссылок на объекты базы в сериализованных настройках — битые ссылки после переноса или удаления объектов
04
Сохранение настроек в файл на локальном диске при серверном режиме работы — файл недоступен другим пользователям и веб-клиенту
05
Переименование файла внешней обработки — потеря накопленных настроек в системном хранилище

Ограничения и частые вопросы безопасности данных

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

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

Итог

Что важно запомнить

Персональные параметры — в системное хранилище настроек, глобальные — в константы, разрезные — в регистр сведений, сложные структуры — в хранилище значений. Файлы используйте только для переноса. Всегда проверяйте чтение на Неопределено и не храните пароли открытым текстом.

Частые вопросы

Куда 1С сохраняет настройки формы, если включено автосохранение?

В системное хранилище настроек внутри информационной базы, с привязкой к пользователю и ключу объекта. Для внешних обработок ключ формируется от имени файла, поэтому переименование epf-файла обнуляет доступ к ранее сохранённым настройкам.

Можно ли хранить настройки внешней обработки без доработки конфигурации?

Да. Используйте ХранилищеСистемныхНастроек или автосохранение реквизитов формы — оба механизма работают для внешних обработок без изменения конфигурации. Для переноса добавьте выгрузку в JSON-файл.

Как передать настройки обработки в другую базу?

Самый надёжный способ — выгрузить настройки в файл (JSON или XML) и загрузить в целевой базе. Если настройки лежат в регистре сведений или справочнике, можно использовать стандартную выгрузку-загрузку данных, но файловый вариант проще и контролируемее.

Что произойдёт с настройками при удалении пользователя?

Записи в системном хранилище настроек, привязанные к этому пользователю, станут недоступны. Если настройки критичны, храните общие параметры в регистре сведений или константах, а не только в персональном хранилище.

Безопасно ли хранить пароль от FTP или почты в настройках обработки?

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

Почему после обновления обработки настройки сбросились?

Чаще всего изменился ключ объекта: переименовали файл обработки, объект метаданных или имя настройки в коде. Системное хранилище ищет значения по точному совпадению ключа, поэтому любое переименование равносильно созданию новой настройки.