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

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

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

Выбор архитектуры хранения данных

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

Использование констант — самый простой, но наименее гибкий вариант. Константы удобны для значений, которые меняются крайне редко (раз в год или при внедрении). Однако они не поддерживают версионность и историю изменений, а также могут создавать проблемы при обновлении конфигурации, если тип данных потребует изменения. Для динамических настроек, таких как последние открытые документы или параметры отчета, константы категорически не подходят.

⚠️ Внимание: Избегайте хранения больших объемов текстовых данных или двоичных файлов в регистрах сведений, предназначенных для быстрых настроек. Это может существенно замедлить работу запросов и увеличить размер файла базы данных.

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

📊 Какой тип настроек вы чаще всего реализуете?
Пользовательские (интерфейс)
Глобальные (параметры системы)
Временные (сеансовые)
Сложные составные

Создание регистра сведений для параметров

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

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

Ресурсы регистра будут хранить сами значения. Здесь важно правильно подобрать типы данных. Если вы храните разнородные настройки (числа, строки, булевы значения), можно создать универсальный ресурс типа Строка большой длины, куда данные будут сериализоваться в формате JSON или XML. Однако такой подход усложняет анализ данных средствами запросов. Лучше создать отдельные ресурсы под каждый тип: Флаг, Число, Строка, Дата.

💡

Для хранения сложных структур данных (массивов или структур) используйте ресурс типа ХранилищеЗначения. Это позволит сохранять объекты 1С напрямую без ручного преобразования в строку.

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

Программная реализация чтения и записи

Работа с хранилищем осуществляется через объекты системы 1С:Предприятие в модулях менеджера или общих модулях. Для чтения настроек используется объект РегистрСведений.ХранилищеНастроек.Получить(). Этот метод возвращает структуру с полями ресурсов, если запись найдена, или неопределено, если настройка еще не была сохранена.

Функция ПолучитьНастройку(ИмяНастройки)

Выборка = РегистрСведений.ХранилищеНастроек.Получить(ИмяНастройки);

Если Выборка = Неопределено Тогда

Возврат Null; // Настройка не найдена, возвращаем значение по умолчанию

КонецЕсли;

Возврат Выборка.Значение;

КонецФункции

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

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

☑️ Алгоритм сохранения настройки

Выполнено: 0 / 4

Использование профилей настроек сеанса

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

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

Метод хранения Область видимости Сложность реализации Производительность
Константы Глобальная Низкая Высокая
Регистр сведений Глобальная / По пользователю Средняя Средняя
НастройкиСеанса Пользовательская Низкая Высокая
Свойства формы Локальная (форма) Низкая Высокая

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

Организация форм для управления настройками

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

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

⚠️ Внимание: Не выполняйте запись в базу данных при каждом изменении значения на форме (событие ПриИзменении). Это создаст избыточную нагрузку. Сохраняйте данные только по нажатию кнопки «Записать» или при закрытии формы, если изменения были подтверждены.

Для сложных настроек, таких как списки исключений или соответствия, используйте табличные части формы. Данные из табличной части при сохранении можно выгружать в ресурс типа ХранилищеЗначения или разворачивать в связанные регистры. Валидация введенных данных должна происходить до момента записи, чтобы избежать порчи конфигурации некорректными параметрами.

Как обработать ошибку записи?

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

Безопасность и права доступа

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

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

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

💡

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

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

Часто задаваемые вопросы

Можно ли хранить настройки в файле на диске сервера?

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

Как очистить кэш настроек на клиенте?

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

Что делать, если нужно изменить тип данных настройки?

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

Влияет ли хранение настроек на скорость работы 1С?

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

Как перенести настройки при обновлении типовой конфигурации?

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