Администрирование · 9 мин
Как очистить таблицу регистрации изменений в 1С
Как очистить таблицы регистрации изменений в 1С: типовые средства, обработки, запросы. Удаление устаревших записей узлов обмена без потери данных.
Таблицы регистрации изменений в 1С накапливают записи обо всех объектах, которые должны быть выгружены в узлы планов обмена. Если обмены настроены, но реально не используются, либо узлы давно не синхронизировались, эти таблицы разрастаются до миллионов записей, замедляют проведение документов и раздувают размер базы. Очистка регистрации изменений — стандартная операция администрирования, но выполнять её нужно осознанно: удалённые записи означают, что соответствующие объекты не будут переданы в узел обмена при следующей синхронизации.
Регистрация изменений хранится в служебных таблицах вида _NodeChngR (изменения регистров) и аналогичных для каждого типа объектов. Платформа автоматически записывает туда ссылки на изменённые объекты при включённой регистрации в плане обмена. Удалить эти записи можно типовыми средствами — через настройку плана обмена или специальные обработки, а также программно через встроенный язык.
Что такое регистрация изменений и почему таблицы растут
При записи любого объекта, входящего в состав плана обмена, платформа добавляет строку в таблицу регистрации изменений для каждого узла, в который этот объект должен выгружаться. При успешной выгрузке и получении подтверждения от узла-приёмника записи удаляются автоматически. Проблема возникает, когда подтверждения не приходят: узел отключён, база-приёмник удалена, обмен настроен «в одну сторону» без обратной квитанции.
Характерные признаки разросшихся таблиц регистрации: замедление записи документов и справочников, увеличение времени регламентных операций, рост файла базы данных без видимого роста прикладных данных. В клиент-серверном варианте можно увидеть большие таблицы с именами, содержащими ChngR, в файловом — оценить рост только косвенно по размеру файла 1Cv8.1CD.
Важно понимать: записи регистрации — это не сами данные, а «очередь на отправку». Их удаление не трогает документы и справочники, но отменяет передачу накопленных изменений в узел. Если узел рабочий и ждёт эти данные, после очистки потребуется повторная полная выгрузка.
Когда очистка безопасна, а когда приведёт к рассинхронизации
Безопасные сценарии: узел обмена больше не используется (обмен отключён, база-приёмник ликвидирована), выполняется начальная настройка нового узла, где всё равно будет полная выгрузка, либо накопились записи по тестовым узлам. В этих случаях очистка только ускорит работу.
Опасный сценарий — очистка регистрации по действующему узлу, с которым идёт регулярный обмен. Приёмник не получит изменения, и базы разойдутся: в одной документ проведён, в другой — нет. Восстановление потребует полной повторной выгрузки всех данных узла, что на больших базах занимает часы.
Очистка через форму узла плана обмена
Самый простой типовой способ доступен в конфигурациях на БСП (УТ, ERP, БП и других). Откройте список узлов плана обмена: «Администрирование» → «Синхронизация данных» → настройки синхронизации. В форме узла или в контекстном меню по кнопке «Ещё» найдите команду «Удалить регистрацию изменений» (в ряде конфигураций — «Изменить номера сообщений» рядом с ней).
После выполнения команды платформа удалит все записи регистрации для выбранного узла. Операция на больших таблицах может занять заметное время — не прерывайте сеанс принудительно. Если в базе несколько узлов, очистку нужно выполнять для каждого отдельно или удалять сами узлы, если они не нужны.
- 1Сделайте резервную копию базы или выгрузку .dt
- 2Откройте Администрирование → Синхронизация данных
- 3Выберите неиспользуемый узел обмена
- 4Через меню Ещё выполните «Удалить регистрацию изменений»
- 5Дождитесь завершения и проверьте размер таблиц
- 6При ненужности узла — пометьте его на удаление
Очистка обработкой и программным способом
В типовых конфигурациях есть обработка «Регистрация изменений для обмена данными» (обычно доступна через «Все функции» или из состава инструментов разработчика). Она показывает дерево объектов с количеством зарегистрированных изменений по каждому узлу и позволяет снять регистрацию выборочно — по конкретным типам объектов, а не целиком. Это удобно, когда нужно очистить, например, только регистры сведений, оставив документы.
Программный способ — метод ПланыОбмена.УдалитьРегистрациюИзменений(Узел). Вторым параметром можно передать массив метаданных или конкретные данные для точечной очистки. Пример выполняется через консоль кода или внешнюю обработку:
Узел = ПланыОбмена.ОбменУправлениеТорговлейБухгалтерия.НайтиПоКоду("001");
ПланыОбмена.УдалитьРегистрациюИзменений(Узел);
// Точечно, только по документам:
МассивМетаданных = Новый Массив;
МассивМетаданных.Добавить(Метаданные.Документы.РеализацияТоваровУслуг);
ПланыОбмена.УдалитьРегистрациюИзменений(Узел, МассивМетаданных);Программный вариант удобен для регламентной очистки по расписанию: например, раз в месяц снимать регистрацию по устаревшим узлам. Но не запускайте такой код по активным узлам — это равносильно ручной очистке с теми же последствиями для синхронизации.
Как проверить результат и объём таблиц
После очистки убедитесь, что записи действительно удалены. В обработке «Регистрация изменений для обмена данными» количество зарегистрированных объектов по очищенному узлу должно стать нулевым. В клиент-серверном варианте администратор СУБД может сравнить размер таблиц _ChngR/_NodeChngR до и после операции.
Дополнительный признак — скорость записи объектов. Если раньше проведение документа замедлялось из-за вставки записей регистрации в десятки узлов, после очистки и удаления лишних узлов запись должна ускориться. Для файловых баз после массового удаления записей имеет смысл выполнить тестирование и исправление с реиндексацией и сжатием, иначе физический размер файла заметно не уменьшится.
Как проверить результат
Равно нулю или близко к нулю
Записи остались — очистка не выполнена или пошли новые регистрации
Таблицы ChngR заметно уменьшились
Размер прежний — записи не удалены
Проведение стало быстрее
Замедление сохраняется — искать другие причины
Типичные ошибки и ограничения
Главная профилактическая мера — удалять неиспользуемые узлы планов обмена, а не только чистить регистрацию. Пока узел существует и объекты входят в состав плана обмена, платформа продолжит записывать изменения, и таблицы снова разрастутся. Если узел нужен «на всякий случай», но обмен не выполняется, рассмотрите вариант отключения авторегистрации для части объектов в составе плана обмена.
Ещё одно ограничение: в распределённых информационных базах (РИБ) очистка регистрации по узлам, с которыми обмен идёт штатно, может нарушить механизм квитирования. Для РИБ корректнее решать проблему через восстановление обмена и обработку «Настройка узлов распределенной информационной базы», а не через массовое удаление записей.
Если обменов в базе нет вообще, а таблицы регистрации большие — проверьте, не остались ли узлы от старых интеграций или переносов данных. Часто после миграции между конфигурациями забывают удалить служебные узлы, и база годами копит ненужные записи.
Что важно запомнить
Очищайте регистрацию изменений только по неиспользуемым узлам, перед операцией делайте копию базы, а после — удаляйте сами лишние узлы, иначе записи накопятся снова. Для активных обменов очистка означает необходимость полной повторной выгрузки.
Частые вопросы
Удалятся ли документы при очистке регистрации изменений?
Нет. Удаляются только служебные записи о том, что объекты нужно выгрузить в узел обмена. Сами документы, справочники и записи регистров остаются нетронутыми.
Как очистить регистрацию сразу по всем узлам?
Программно — перебрать узлы нужного плана обмена через ПланыОбмена.<ИмяПлана>.Выбрать() и для каждого вызвать УдалитьРегистрациюИзменений. В интерфейсе типовых конфигураций очистка выполняется по одному узлу.
Почему после очистки записи появились снова?
Потому что узел обмена не удалён и объекты продолжают изменяться — платформа заново регистрирует каждое изменение. Чтобы записи не копились, удалите неиспользуемый узел или исключите объекты из состава плана обмена.
Нужно ли монопольный режим для очистки?
Нет, удаление регистрации изменений выполняется в многопользовательском режиме. Но на больших таблицах операция создаёт длительные транзакции и блокировки, поэтому лучше проводить её в период минимальной активности пользователей.
Как восстановить обмен после случайной очистки регистрации?
Выполните полную выгрузку данных для узла: в типовых конфигурациях это команда «Зарегистрировать изменения для обмена» с выбором всех объектов или повторная начальная выгрузка. Номера сообщений обмена при этом должны быть согласованы с узлом-приёмником.