Почему раздувается регистр Соответствие объектов информационных баз и как очистить его регистрацию

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия
← На главную

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

Суть проблемы: накопление записей и замедление обмена

Рассмотрим типичную ситуацию: настроен обмен (часто односторонний для бизнес-логики, но технически двусторонний) между базами. В базе-приемнике (БП 3.0) в регистре СоответствиеОбъектовИнформационныхБаз скапливается огромное количество записей к регистрации (например, 87 000 из 150 000). Это приводит к тому, что процесс выгрузки данных затягивается на десятки минут, хотя фактически в файл обмена новые данные не попадают.

Почему это происходит? Проанализируем механизм: при каждой загрузке данных база-приемник создает записи в этом регистре, чтобы сопоставить внутренний идентификатор (GUID) объекта в текущей базе с идентификатором в базе-источнике. Эти записи автоматически ставятся на регистрацию для отправки обратно, чтобы база-источник тоже «узнала» о связях объектов. Если механизм подтверждения получения данных (квитирование) не срабатывает, записи будут предлагаться к выгрузке вечно.

Разберем механизм подтверждения (квитирования) сообщений

Выясним причину, по которой записи «застревают» в очереди на выгрузку. В системе обмена 1С реализован механизм очистки регистрации на основе номеров сообщений. Рассмотрим эту логику по шагам:

  1. При выгрузке из Базы А в Базу Б формируется пакет с определенным номером (например, №100).
  2. Все объекты, попавшие в этот пакет, помечаются в планах обмена номером 100.
  3. База Б принимает файл №100, успешно загружает его и запоминает, что последним принятым сообщением от Базы А был номер 100.
  4. При следующей ответной выгрузке из Базы Б в Базу А передается служебная информация: «Я приняла твой пакет №100».
  5. База А, получив это подтверждение, находит у себя в планах обмена все записи, номер сообщения которых меньше или равен 100, и удаляет их из регистрации.

Если записи в СоответствиеОбъектовИнформационныхБаз не удаляются, значит, База А (в нашем случае БП 3.0) не получает от Базы Б (БП 2.0) подтверждения, что пакет с этими данными был успешно обработан.

Проверка настроек узлов информационных баз

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

Проверьте в «Бухгалтерии предприятия 3.0» (и зеркально в 2.0) регистр сведений ОбщиеНастройкиУзловИнформационныхБаз. Обратите внимание на поля Префикс и ПрефиксКорреспондента. Если префиксы настроены неверно, система может формировать файлы с именами, которые вторая база просто «не узнает» как предназначенные ей.

Например, если внутри архива Message_БП_ВТ.zip находится файл с некорректным внутренним именем Message_БП_ВТ.xml вместо ожидаемого Message_ВТ_БП.xml, загрузка может пройти формально (без критических ошибок платформы), но бизнес-логика обмена не обновит номер принятого сообщения.

Диагностика через Журнал регистрации и номера пакетов

Чтобы понять, где именно происходит сбой, выполним следующие действия:

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

Нужно ли передавать этот регистр при одностороннем обмене?

Рассмотрим ситуацию автора темы: обмен идет только из 2.0 в 3.0. В этом случае БП 2.0 является «мастером» данных. Нужны ли ей записи о соответствии из БП 3.0?

Технический нюанс: Для самой очистки регистрации в БП 3.0 передавать записи РС СоответствиеОбъектовИнформационныхБаз в БП 2.0 не обязательно. Достаточно того, чтобы БП 2.0 просто успешно приняла технический файл (квитанцию) и отправила назад номер сообщения.

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

Как принудительно очистить очередь регистрации

Если вы выяснили, что 87 000 записей — это «мусор», который накопился из-за старых ошибок настройки, их можно удалить вручную, чтобы вернуть обмену былую скорость. Разберем, как это сделать:

Воспользуйтесь стандартной обработкой «Регистрация изменений для обмена данными» (она входит в состав БСП или доступна как внешняя «Регистрация изменений для обмена» в составе инструментов разработчика).

Пошаговый алгоритм:

  1. Выберите нужный узел плана обмена.
  2. Найдите в списке объектов регистр сведений СоответствиеОбъектовИнформационныхБаз.
  3. Нажмите правой кнопкой мыши и выберите команду «Отменить регистрацию всех объектов данного типа».

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

Пример программной очистки регистрации

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


УзелОбмена = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоКоду("ВТ");
ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, Метаданные.РегистрыСведений.СоответствиеОбъектовИнформационныхБаз);

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

Резюме

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

← На главную