Ситуация, когда объекты в базе-источнике остаются «висеть» в регистрации изменений даже после успешного, на первый взгляд, обмена, знакома многим специалистам. Давайте разберем, почему это происходит, как работает механизм квитирования и как исправить эту проблему, чтобы обмен работал стабильно.
Для понимания проблемы необходимо вспомнить принцип, по которому 1С понимает, что данные успешно переданы. Этот процесс называется квитированием. Разберем его по шагам:
РегистраСведений создается запись для узла обмена. Изначально в графе НомерСообщения устанавливается значение NULL.Таким образом, зависание объектов — это признак того, что источник не получил от приемника подтверждение (квитанцию) о том, что данные были успешно загружены.
Прежде чем приступать к «хирургическим» методам, проанализируем, почему цепочка подтверждения может рваться:
Рассмотрим конкретные действия, которые помогут восстановить обмен.
Иногда возникает ошибка «Номер сообщения меньше либо равен ранее принятому». Это происходит, когда базы «не понимают», кто какой пакет должен прислать следующим. Чтобы решить эту проблему, можно временно обнулить счетчики, но делать это нужно осторожно.
Рекомендуемый алгоритм действий:
Если объекты «висят» из-за того, что был создан повторный узел или произошел глобальный сбой, может потребоваться ручное вмешательство. Вы можете программно очистить записи регистрации для конкретного узла, если уверены, что все данные уже переданы и загружены.
Используйте следующий подход в консоли кода:
// ВАЖНО: Выполняйте это только после проверки целостности данных!
// Получаем узел, для которого нужно очистить регистрацию
Узел = ПланыОбмена.ВашПланОбмена.НайтиПоКоду("КодУзла");
// Очищаем регистрацию изменений для конкретного узла
ПланыОбмена.УдалитьРегистрациюИзменений(Узел);
После этой операции все объекты снова попадут в очередь на отправку. Это фактически эквивалентно «полной выгрузке» всех данных, поэтому будьте осторожны, если объем базы очень большой.
Чтобы в будущем не сталкиваться с подобными вопросами, придерживайтесь следующих правил:
ЖурналеРегистрации с уровнем «Ошибка». Часто там указана причина, по которой объект не был загружен (например, нарушение прав доступа или запрет записи объекта).ПланОбмена и что правила обмена (КД 2.0) корректно настроены для миграции этих объектов.Помните, что снятие регистрации — это процесс подтверждения успешной доставки. Если объекты остаются в регистрации, значит, база-приемник либо не смогла принять данные, либо источник до сих пор ждет от нее ответа.