Как работает механизм регистрации изменений для обмена в 1С: обязателен ли он и как им управлять?

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

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

Как устроен механизм регистрации изменений изнутри

Для того чтобы понять логику работы обмена, давайте заглянем «под капот» платформы 1С. Механизм регистрации изменений — это не просто абстрактное понятие, а физические таблицы в СУБД. Когда мы создаем в конфигураторе объект типа ПланОбмена и включаем в его состав определенные справочники, документы или регистры, платформа автоматически создает для каждого сопоставленного объекта скрытую таблицу регистрации изменений.

Проанализируем этот процесс по шагам:

  1. Фиксация изменений: При записи или удалении элемента (например, документа или контрагента) платформа делает запись в соответствующей таблице регистрации изменений для конкретного узла (базы-получателя).
  2. Минимизация трафика: При запуске синхронизации система не сканирует всю базу данных целиком. Она обращается исключительно к этим скрытым таблицам регистрации. Выгружаются только те объекты, ссылки на которые присутствуют в таблице регистрации изменений для выбранного узла. Это позволяет передавать только измененную информацию, экономя время и ресурсы сети.
  3. Очистка регистрации: Процесс обмена устроен двусторонним образом. Когда база-приемник успешно считывает файл обмена, она отправляет обратно квитанцию (подтверждение) с номерами принятых сообщений. Получив подтверждение, база-источник автоматически удаляет записи из таблиц регистрации изменений по номерам сообщений НомерОтправленного и НомерПринятого. Таким образом, очередь выгрузки очищается.

Способы регистрации изменений: автоматический и ручной

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

Рассмотрим два основных подхода к регистрации изменений в 1С:

1. Автоматическая регистрация (платформенная)

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

2. Ручная и программная регистрация

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

Посмотрим на пример кода, позволяющего программно зарегистрировать изменения объекта для конкретного узла обмена:


// Пример программной регистрации изменений для одного узла
УзелПолучатель = ПланыОбмена.СинхронизацияДанных.НайтиПоКоду("УТ");
Если ЗначениеЗаполнено(УзелПолучатель) Тогда
    СсылкаНаОбъект = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", "7700000000");
    Если Не СсылкаНаОбъект.Пустая() Тогда
        ПланыОбмена.ЗарегистрироватьИзменения(УзелПолучатель, СсылкаНаОбъект);
    КонецЕсли;
КонецЕсли;

Возможности обработки «Регистрация изменений для обмена»

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

Разберем по шагам, какие задачи мы можем решать с помощью этой обработки (в современных конфигурациях она доступна через меню «Все функции» / «Функции для технического специалиста» -> «Обработки» -> «Регистрация изменений для обмена»):

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

Рассмотрим пример кода, с помощью которого можно программно очистить регистрацию изменений для определенного типа данных, если очередь переполнена:


// Программное удаление регистрации изменений для всех документов "РеализацияТоваровУслуг"
УзелПолучатель = ПланыОбмена.СинхронизацияДанных.НайтиПоКоду("УТ");
Если ЗначениеЗаполнено(УзелПолучатель) Тогда
    ПланыОбмена.УдалитьРегистрациюИзменений(УзелПолучатель, Метаданные.Документы.РеализацияТоваровУслуг);
КонецЕсли;

Проблемы производительности и блокировок при регистрации изменений

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

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

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

Резюме

Подводя итог, ответим на вопросы автора темы:

← На главную