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