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

Администрирование · 12 мин

Как очистить таблицу изменений в 1С

Как очистить таблицу регистрации изменений в 1С: удаление регистрации через план обмена, обработку и код. Причины роста таблиц, риски и проверка результата.

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

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

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

Что такое таблица изменений и почему она растёт

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

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

Типичные причины разрастания таблиц изменений:

  • узел обмена создан «про запас» или для разового переноса, обмен по нему не выполняется;
  • база-корреспондент выведена из эксплуатации, но узел не удалён;
  • обмен завершается с ошибкой, подтверждение приёма не приходит;
  • в план обмена включено слишком много объектов, включая редко нужные;
  • настроена авторегистрация всех объектов при большом документообороте.

Как понять, что таблицу изменений пора чистить

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

Для точной оценки в файловой базе можно посмотреть размер файла 1Cv8.1CD до и после тестирования и исправления, а в клиент-серверной — запросить размер таблиц регистрации изменений на стороне СУБД (таблицы вида _ChangeReg). Резкий рост базы без роста прикладных данных — характерный признак.

Узел обмена не используетсяОбмен не выполнялся месяцами

Дата последней синхронизации в списке узлов

База быстро растётТаблицы регистрации копят записи

Размер таблиц _ChangeReg на СУБД или рост файла 1Cv8.1CD

Обмен падает с ошибкойПодтверждение приёма не приходит

Журнал регистрации, ошибки синхронизации

Замедление записи документовПлатформа пишет регистрацию на каждый объект

Количество узлов и состав плана обмена

Подготовка: что сделать перед очисткой

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

Обязательно сделайте резервную копию базы перед любыми манипуляциями. Для файловой базы достаточно скопировать каталог с файлом 1Cv8.1CD при закрытых сеансах, для клиент-серверной — выполнить выгрузку в dt или штатный бэкап средствами СУБД.

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

Способ 1. Удаление регистрации через интерфейс плана обмена

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

Порядок действий
  1. 1
    Откройте раздел «Администрирование» → «Синхронизация данных» (или «Планы обмена»)
  2. 2
    Откройте нужный узел обмена
  3. 3
    Найдите команду «Удалить регистрацию изменений» (обычно в меню «Ещё» или на панели навигации — «Регистрация изменений»)
  4. 4
    Подтвердите удаление регистрации для всех объектов или выберите конкретные типы
  5. 5
    Дождитесь завершения операции и проверьте, что регистрация пуста

В типовых конфигурациях (УТ, ERP, БП) у узла обмена есть команда «Номера сообщений» и «Удалить регистрацию изменений». Если команды нет в интерфейсе, регистрацию можно посмотреть и очистить через «Все функции»: найдите план обмена, откройте узел и используйте стандартную команду работы с регистрацией изменений.

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

Способ 2. Программная очистка кодом

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

bsl
// Удаление регистрации по конкретному узлу
Узел = ПланыОбмена.ОбменССайтом.НайтиПоНаименованию("Обмен с сайтом");
ПланыОбмена.УдалитьРегистрациюИзменений(Узел);

// Удаление регистрации по всем узлам плана обмена
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ ПланОбмена.ОбменССайтом");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    ПланыОбмена.УдалитьРегистрациюИзменений(Выборка.Ссылка);
КонецЦикла;

Метод ПланыОбмена.УдалитьРегистрациюИзменений принимает узел и необязательный второй параметр — массив объектов метаданных или конкретных данных, если нужно очистить не всё. Без второго параметра удаляется вся регистрация по узлу.

На больших таблицах операция может занять заметное время и заблокировать таблицы регистрации. Выполняйте её в нерабочее время, а в клиент-серверной базе следите за журналом СУБД на предмет длительных транзакций.

Способ 3. Типовые и внешние обработки

Во многих типовых конфигурациях есть встроенные инструменты очистки: например, в настройках синхронизации данных может быть команда удаления устаревшей регистрации, а в БСП-конфигурациях — регламентные операции по обслуживанию обменов. Проверьте раздел «Администрирование» → «Обслуживание» и настройки конкретной синхронизации.

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

Сравнение способов очистки

Интерфейс плана обмена

Подходит для разовой очистки по одному узлу; безопасно, но неудобно при большом числе узлов

Код через УдалитьРегистрациюИзменений

Гибко, можно автоматизировать и чистить выборочно; требует навыков и осторожности

Внешние обработки

Наглядно показывают объёмы регистрации; риск зависит от качества обработки, проверять на копии

Удаление узла обмена

Самый радикальный вариант, если обмен больше не нужен; необратим для настройки обмена

Как предотвратить повторный рост таблиц

Очистка решает симптом, но не причину. Чтобы таблицы не разрастались снова, разберитесь с источником накопления. Удалите или отключите неиспользуемые узлы обмена — даже «забытый» узел тестового обмена заставляет платформу писать регистрацию на каждое изменение каждого объекта из состава плана.

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

Настройте мониторинг: периодически проверяйте даты последних успешных синхронизаций и размер таблиц регистрации. Для клиент-серверных баз полезен регламентный контроль размера таблиц _ChangeReg — рост без активного обмена сразу покажет проблемный узел.

Типичные ошибки
01
Очистка регистрации по рабочему узлу без предварительного обмена — изменения теряются, базы расходятся
02
Удаление узла, который ждёт корреспондент, — обмен в другой базе начинает падать с ошибкой
03
Очистка без резервной копии — при ошибке восстановить регистрацию невозможно
04
Чистка таблиц напрямую средствами СУБД — нарушение целостности и риск повреждения базы
05
Игнорирование причины роста — через месяц таблицы раздуваются снова

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

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

Дополнительно сравните размер базы: в файловом варианте выполните тестирование и исправление с сжатием (оно физически уменьшит файл после удаления записей), в клиент-серверном — запустите шринк таблиц средствами СУБД, если это предусмотрено вашей политикой обслуживания. Само по себе удаление записей не всегда сразу уменьшает физический размер файлов.

Контрольные точки

Как проверить результат

Список регистрации у узла
Норма

Пуст или содержит только новые записи

Тревожный признак

По-прежнему тысячи старых записей

Работа обмена
Норма

Синхронизация проходит без ошибок

Тревожный признак

Ошибки «узел не найден» или рассинхронизация данных

Размер базы
Норма

После сжатия размер уменьшился

Тревожный признак

Размер не меняется — записи не удалены или сжатие не выполнено

Скорость записи документов
Норма

Запись идёт как обычно

Тревожный признак

Замедление сохраняется — ищите другие причины

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

Можно ли очистить таблицу изменений, не останавливая работу пользователей?

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

Что будет, если очистить регистрацию по рабочему узлу обмена?

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

Можно ли чистить таблицы регистрации напрямую в SQL?

Нет. Прямое удаление записей из таблиц _ChangeReg средствами СУБД нарушает логику работы платформы и может повредить базу. Используйте только штатные средства: интерфейс узла, метод УдалитьРегистрациюИзменений или проверенные обработки.

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

Удалённые записи лишь помечаются как свободное место внутри файла. Для файловой базы выполните тестирование и исправление с включённым сжатием, для клиент-серверной — процедуру сжатия таблиц средствами СУБД.

Как узнать, по какому узлу накопилось больше всего записей?

Откройте каждый узел и посмотрите список зарегистрированных изменений по типам объектов, либо используйте обработку, показывающую количество записей регистрации по узлам. В клиент-серверной базе объём можно оценить по размеру таблиц регистрации на стороне СУБД.

Нужно ли очищать таблицу изменений, если обмен работает штатно?

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

Итог

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

Таблица изменений растёт из-за неработающих узлов обмена и отсутствия подтверждений приёма. Очищайте регистрацию штатными средствами — через узел плана обмена или метод УдалитьРегистрациюИзменений, предварительно сделав бэкап и убедившись, что накопленные изменения не нужны. После очистки устраните причину накопления и выполните сжатие базы.