При разработке и сопровождении крупных конфигураций на платформе 1С, таких как 1С:Документооборот, разработчики часто сталкиваются с проблемой бесконтрольного роста таблицы dbo.SystemSettings. Это происходит из-за того, что при первом открытии форм пользователи автоматически «копируют» настройки интерфейса на себя. Возникает логичный вопрос: можно ли хранить настройки только для «эталонного» пользователя и заставлять систему подтягивать их для остальных программно, не создавая тысячи дублирующих записей в системном хранилище?
Рассмотрим подробнее, как именно работает механизм ХранилищеСистемныхНастроек. Платформа 1С спроектирована таким образом, что чтение настроек при открытии формы происходит автоматически и исключительно в разрезе текущего пользователя. Это фундаментальное ограничение: система ищет записи в базе данных, которые привязаны к конкретному идентификатору пользователя, выполнившего вход.
Если настройки для текущего пользователя отсутствуют, метод ХранилищеСистемныхНастроек.Загрузить() вернет значение Неопределено. Попытка применить настройки другого пользователя (например, «Эталона») без их предварительного сохранения в профиль текущего пользователя платформенными средствами невозможна. Платформа просто не умеет «подменять» источник настроек для формы в момент её отрисовки.
Разберем ситуацию, когда вы пытаетесь программно считать настройки эталона и передать их в форму:
АдминистрированиеДанных, либо наличие прав на работу с СохранениеДанныхПользователя.ХранилищеСистемныхНастроек для текущего пользователя, иначе при повторном открытии формы всё вернется к значениям по умолчанию.Таким образом, попытка реализовать механизм «эталонных настроек без тиражирования» является архитектурно невозможной в рамках текущей модели Управляемых форм. Настройки должны быть «привязаны» к пользователю для того, чтобы платформа могла их корректно применить в контексте сеанса.
Поскольку технически «отвязать» настройки от пользователей нельзя, сосредоточимся на методах управления размером таблицы dbo.SystemSettings. Рассмотрим способы оптимизации, которые помогут держать базу в чистоте:
Если вы хотите сбросить настройки форм для всех или конкретных пользователей, используйте метод ХранилищеСистемныхНастроек.Удалить(). Для радикальной очистки всей таблицы можно вызвать метод с неопределенными параметрами:
// Очистка всех системных настроек в базе
ХранилищеСистемныхНастроек.Удалить(Неопределено, Неопределено, Неопределено);
Важно: Данный метод удалит все настройки: размеры окон, последние выбранные фильтры, настройки отчетов и избранное для всех пользователей. Применяйте его с осторожностью в рабочей среде.
Более безопасный подход — поиск и удаление настроек по ключу объекта. Вы можете использовать ХранилищеСистемныхНастроек.Выбрать(), чтобы найти настройки конкретной формы, которая разрослась сильнее всего, и удалить их точечно, не затрагивая настройки пользователей в других разделах системы.
Помните, что логическое удаление записей через 1С — это только первый шаг. Чтобы реально освободить место на диске, необходимо выполнить обслуживание СУБД:
.1CD) необходимо выполнить Тестирование и исправление с установленной галочкой Сжатие таблиц информационной базы.DBCC SHRINKDATABASE (или через меню управления файлами данных), так как удаление данных в 1С лишь помечает страницы как свободные внутри структуры SQL-файла.Мы выяснили, что стандартными методами «подтянуть» настройки эталона без сохранения в ХранилищеСистемныхНастроек невозможно, так как платформа всегда работает в контексте текущего пользователя. Вместо попыток обойти архитектуру, лучше сосредоточиться на регулярной очистке устаревших записей и обслуживании файлов базы данных для поддержания высокой производительности вашей системы.