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