Как очистить и оптимизировать таблицу системных настроек (systemsettings) в 1С

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

В процессе эксплуатации баз данных 1С:Предприятие, особенно в файловом варианте, администраторы часто сталкиваются с неконтролируемым ростом размера файла .1CD. Одной из неочевидных причин этого роста является разрастание технической таблицы systemsettings. Когда эта таблица достигает размеров в несколько гигабайт, это не только занимает дисковое пространство, но и существенно замедляет запуск программы, открытие форм и работу пользователей. Рассмотрим подробно, что это за таблица и какими методами можно привести её объем в норму.

Анализируем назначение таблицы systemsettings

Прежде чем приступать к очистке, давайте разберем, что именно хранит эта таблица. В systemsettings (Хранилище системных настроек) платформа записывает персональные предпочтения пользователей, которые не относятся к данным учета, но важны для комфортной работы. К ним относятся:

  1. Настройки форм: размеры и положение окон, примененные цветовые схемы, видимость колонок в списках, порядок полей.
  2. Настройки динамических списков: установленные пользователем отборы, группировки и условное оформление в справочниках и журналах документов.
  3. Параметры отчетов: последние введенные настройки в отчетах на базе СКД, быстрые отборы.
  4. История выбора и Избранное: данные о последних открытых объектах и ссылки, закрепленные пользователем.
  5. Системные параметры: выбранные принтеры для конкретных печатных форм, настройки масштаба и прочее.

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

Способ 1. Использование штатных инструментов БСП

Если ваша конфигурация построена на базе «Библиотеки стандартных подсистем» (а это почти все современные решения: «Розница 2.3/3.0», «Бухгалтерия предприятия 3.0», «Управление торговлей 11» и др.), в ней уже заложен механизм управления этими данными. Давайте разберем по шагам, как им воспользоваться.

Перейдем в раздел Администрирование — Обслуживание. В открывшемся окне найдем гиперссылку Управление настройками пользователей. Здесь нам доступны два основных инструмента:

  1. Очистка настроек: Позволяет прицельно удалить «мусор». Проанализируем список пользователей и выберем тех, чьи настройки мы хотим сбросить. Можно выбрать как «Все настройки», так и конкретные категории (например, только «Настройки отчетов» или «Настройки форм»).
  2. Копирование настроек: Если у одного пользователя интерфейс настроен идеально, а у остальных база «раздута» от мусора, мы можем скопировать «чистые» настройки эталонного пользователя всем остальным, тем самым затерев их проблемные записи.

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

Способ 2. Программная очистка через встроенный язык

Бывают ситуации, когда штатная обработка не справляется из-за слишком большого объема данных (просто зависает). В этом случае мы можем написать небольшой скрипт для точечной очистки. Для работы с этой таблицей используется объект ХранилищеСистемныхНастроек. Рассмотрим пример кода, который позволяет перебрать и удалить настройки по определенному ключу или пользователю.

Проанализируем ситуацию: чаще всего «раздуваются» настройки динамических списков. Попробуем найти и удалить их программно:


Выборка = ХранилищеСистемныхНастроек.Выбрать();
Пока Выборка.Следующий() Цикл
    // Проверяем ключ объекта или пользователя
    // Например, удалим настройки для конкретного пользователя "Иванов"
    Если Выборка.Пользователь = "Иванов" Тогда
        ХранилищеСистемныхНастроек.Удалить(Выборка.КлючОбъекта, Выборка.КлючНастроек, Выборка.Пользователь);
        Сообщить("Удалена настройка: " + Выборка.КлючОбъекта);
    КонецЕсли;
КонецЦикла;

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

Способ 3. Использование инструментов разработчика

Для глубокого анализа содержимого systemsettings мы рекомендуем использовать сторонние инструменты, такие как «Инструментарий разработчика» (автор tormozit). Эти обработки позволяют наглядно увидеть, какая именно запись в таблице занимает больше всего места. Выясним причину: часто это бывает одна-единственная настройка огромного списка, которая из-за ошибки в коде сохранилась в виде гигантского XML-блока.

Найдя такую запись, вы сможете удалить только её, не затрагивая полезные настройки пользователей.

Особенности файлового режима: Сжатие таблиц

Критически важный момент: Простое удаление записей из systemsettings (хоть программно, хоть через интерфейс) не уменьшит размер файла базы данных на диске. В СУБД 1С (файл .1CD) при удалении записей место просто помечается как свободное для будущих записей, но физически файл не сжимается.

Рассмотрим алгоритм действий для реального уменьшения объема базы:

  1. Выполним очистку настроек одним из способов, описанных выше.
  2. Попросим всех пользователей выйти из базы.
  3. Запустим конфигуратор.
  4. Перейдем в меню Администрирование — Тестирование и исправление.
  5. Установим флаг только на пункте «Сжатие таблиц информационной базы».
  6. Нажмем «Выполнить».

Только после завершения этой процедуры вы увидите, что размер файла базы данных на диске уменьшился. В некоторых случаях после удаления 3 ГБ данных из systemsettings база реально уменьшается на те же 3 ГБ.

Почему не стоит использовать TRUNCATE TABLE?

В среде SQL-администраторов часто звучит совет использовать команду TRUNCATE TABLE. Разберем, почему для 1С это плохая идея:

  1. Для файловой базы: Прямой доступ к таблицам через SQL-запросы невозможен без специализированных низкоуровневых утилит, использование которых может необратимо повредить структуру .1CD.
  2. Для клиент-серверной базы: Прямое удаление данных из таблиц СУБД в обход платформы может привести к нарушению логической целостности и кэширования настроек. Платформа может «не заметить» удаления и продолжать пытаться обратиться к данным в памяти.
  3. Потеря данных: Полная очистка таблицы удалит настройки печати чеков, торгового оборудования и пользовательские варианты отчетов, что приведет к остановке работы предприятия до момента повторной настройки.

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

← На главную