При настройке нетипового обмена данными между конфигурациями на платформе 1С:Предприятие часто возникает задача исключить выгрузку служебных данных. Одним из таких объектов является регистр сведений СоответствияОбъектовИнформационныхБаз. Однако простое исключение регистра из состава плана обмена в метаданных приводит к ошибкам при загрузке данных. Рассмотрим причины такого поведения подсистемы БСП и разберем корректные способы исключения регистра из обмена без вмешательства в типовой код конфигурации.
В конфигурациях, использующих Библиотеку стандартных подсистем (БСП), механизм синхронизации данных тесно связан с сопоставлением объектов. Выясним причину ошибки:
СоответствияОбъектовИнформационныхБаз в событии ПередЗаписью выполняется добавление узлов плана обмена в список получателей с помощью метода ОбменДанными.Получатели.Добавить(...).По этой причине регистр обязан присутствовать в составе плана обмена, но фактическую регистрацию и выгрузку данных по нему можно корректно подавить.
Проанализируем наиболее правильный и системный вариант решения. Он позволяет избежать накопления лишних записей в таблицах регистрации изменений СУБД (_ChangeRec).
Разберем по шагам порядок настройки:
СоответствияОбъектовИнформационныхБаз.
Отказ = Истина;
При таком подходе изменения регистра просто не будут регистрироваться на узлах плана обмена, что полностью исключит их из пакетов синхронизации.
Если обмен настраивается через правила конвертации данных (КД 2.x), а менять правила регистрации не планируется, рассмотрим вариант подавления выгрузки непосредственно в обработчиках конвертации.
Для этого в конфигурации «Конвертация данных» переходим в правила конвертации объектов:
СоответствияОбъектовИнформационныхБаз.
Отказ = Истина;
В этом случае платформа считывает зарегистрированные изменения, но сам объект в результирующий XML-файл или сообщение обмена не помещается.
Рассмотрим вариант, когда необходимо очистить очередь изменений перед началом формирования сообщения обмена. Этот код можно поместить в глобальный обработчик правил конвертации Перед выгрузкой данных.
Посмотрим на пример кода:
ВыборкаУзлов = ПланыОбмена.Обмен_УХ.Выбрать();
Пока ВыборкаУзлов.Следующий() Цикл
Если ВыборкаУзлов.Ссылка <> ПланыОбмена.Обмен_УХ.ЭтотУзел() Тогда
ПланыОбмена.УдалитьРегистрациюИзменений(
ВыборкаУзлов.Ссылка,
Метаданные.РегистрыСведений.СоответствияОбъектовИнформационныхБаз
);
КонецЕсли;
КонецЦикла;
Разберем логику работы кода: перед стартом выгрузки процедура ПланыОбмена.УдалитьРегистрациюИзменений() полностью очищает зарегистрированные записи регистра по всем узлам, кроме предопределенного узла ЭтотУзел(), поэтому в пакет обмена данные регистра не попадают.
Если метаданные конфигурации доступны для изменения, рассмотрим настройку на уровне дерева объектов конфигурации:
СоответствияОбъектовИнформационныхБаз.Запретить.Это сохранит совместимость структуры метаданных для БСП, но исключит платформенную фиксацию изменений на узлах плана обмена при записи наборов регистра.
Обратите внимание на особенности работы подсистемы сопоставления БСП:
ОбъектВыгруженПоСсылке в данном регистре помогает БСП избегать повторной полной выгрузки связанных объектов. При отключении синхронизации регистра связанные объекты могут каждый раз выгружаться целиком вместо передачи только ссылок.