Разработка и Конфигурация · 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\");
Запись.ЗаписатьСвойство("РежимТест", Истина);
Запись.ЗаписатьКонецОбъекта();
Запись.Закрыть();
Риски файлового варианта: файл легко удалить или перезаписать, при одновременной работе нескольких пользователей с общим файлом возможны конфликты, а путь к файлу на локальном диске пользователя недоступен при работе через веб-клиент или на сервере. Поэтому файлы — дополнение к основному хранилищу в базе, а не замена ему.
Как выбрать место хранения
Практический порядок внедрения и проверка результата
Для типовой внешней обработки рабочая схема выглядит так: основные параметры сохраняются в системное хранилище автоматически (свойство «Сохранять данные в настройках» у реквизитов формы), а кнопки «Сохранить в файл» и «Загрузить из файла» дают возможность переноса. Для встроенной в конфигурацию обработки добавляется справочник или регистр сведений.
- 1Определите состав настроек и их разрез: общие или персональные
- 2Выберите механизм хранения по таблице решений выше
- 3Реализуйте сохранение при закрытии формы или по кнопке
- 4Реализуйте чтение с проверкой на Неопределено и значениями по умолчанию
- 5Проверьте сценарий первого запуска, когда настроек ещё нет
- 6Проверьте сохранность настроек после перезапуска сеанса и под другим пользователем
Отдельно протестируйте первый запуск: когда настройки ещё ни разу не сохранялись, код не должен падать с ошибкой, а обработка должна работать на значениях по умолчанию. Это самая частая ошибка — разработчик тестирует на своей базе, где настройки уже есть.
Ограничения и частые вопросы безопасности данных
Пароли, токены и ключи доступа не следует хранить в настройках открытым текстом — ни в константах, ни в регистрах, ни в файлах. Любой пользователь с правами на чтение соответствующих объектов увидит их. Минимальная мера — хранить такие данные отдельно с ограничением прав доступа, а в файлах выгрузки исключать их вовсе.
При обновлении конфигурации константы, регистры и реквизиты справочников сохраняются, если их имена не менялись. Системное хранилище настроек при обновлении не затрагивается. Потеря настроек обычно связана не с обновлением, а с переименованием объектов метаданных, файла обработки или удалением пользователя.
Что важно запомнить
Персональные параметры — в системное хранилище настроек, глобальные — в константы, разрезные — в регистр сведений, сложные структуры — в хранилище значений. Файлы используйте только для переноса. Всегда проверяйте чтение на Неопределено и не храните пароли открытым текстом.
Частые вопросы
Куда 1С сохраняет настройки формы, если включено автосохранение?
В системное хранилище настроек внутри информационной базы, с привязкой к пользователю и ключу объекта. Для внешних обработок ключ формируется от имени файла, поэтому переименование epf-файла обнуляет доступ к ранее сохранённым настройкам.
Можно ли хранить настройки внешней обработки без доработки конфигурации?
Да. Используйте ХранилищеСистемныхНастроек или автосохранение реквизитов формы — оба механизма работают для внешних обработок без изменения конфигурации. Для переноса добавьте выгрузку в JSON-файл.
Как передать настройки обработки в другую базу?
Самый надёжный способ — выгрузить настройки в файл (JSON или XML) и загрузить в целевой базе. Если настройки лежат в регистре сведений или справочнике, можно использовать стандартную выгрузку-загрузку данных, но файловый вариант проще и контролируемее.
Что произойдёт с настройками при удалении пользователя?
Записи в системном хранилище настроек, привязанные к этому пользователю, станут недоступны. Если настройки критичны, храните общие параметры в регистре сведений или константах, а не только в персональном хранилище.
Безопасно ли хранить пароль от FTP или почты в настройках обработки?
Нет, если он сохранён открытым текстом. Константы, регистры и файлы доступны для чтения пользователям с соответствующими правами. Ограничьте доступ к объекту хранения правами, а пароли исключайте из файлов выгрузки настроек.
Почему после обновления обработки настройки сбросились?
Чаще всего изменился ключ объекта: переименовали файл обработки, объект метаданных или имя настройки в коде. Системное хранилище ищет значения по точному совпадению ключа, поэтому любое переименование равносильно созданию новой настройки.