Почему не работают правила регистрации изменений в БСП и как настроить обмен данными через Конвертацию данных

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

При организации обмена данными между типовыми конфигурациями (например, 1С:Бухгалтерия предприятия КОРП) и нетиповыми решениями на базе Библиотеки стандартных подсистем (БСП) разработчики часто сталкиваются с ситуацией: правила конвертации (ПКД) и правила регистрации объектов (ПРО) созданы в конфигурации «Конвертация данных 2.1», загружены в план обмена или регистр сведений, автоматическая регистрация в составе плана обмена отключена, но изменения объектов всё равно не регистрируются. Разберем по шагам внутреннюю логику подсистемы обмена данными БСП, выясним причины сбоев и рассмотрим правильные варианты настройки.

1. Проверка наличия и состава типовых подписок на события

Механизм регистрации изменений в БСП не работает автоматически сам по себе только лишь на основании наличия макета с ПРО в плане обмена. Для перехвата записи и удаления объектов платформа использует подписки на события. Если в нетиповой конфигурации или новом плане обмена отсутствуют стандартные подписки, БСП просто не получает управление в момент изменения данных.

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

  1. Перед записью: обработчик события вызывает процедуру общего модуля ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередЗаписью. На этом этапе подсистема фиксирует исходное состояние объекта из базы данных для последующего анализа модифицированности.
  2. При записи: обработчик вызывает процедуру ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПриЗаписи. Здесь вычисляются правила регистрации, проверяются отборы и при выполнении условий создаются записи в таблице изменений узлов плана обмена.
  3. Перед удалением: обработчик вызывает процедуру ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередУдалением. Это критически важно для регистрации физического удаления объектов. Если объект удаляется без этой подписки, в узлах обмена не останется информации о необходимости удалять объект в базе-приемнике.

Кроме подписок, проверим интеграцию плана обмена в саму БСП: имя нового плана обмена должно быть добавлено в процедуру ПолучитьПланыОбмена общего модуля ОбменДаннымиПереопределяемый, а также включено в соответствующий определяемый тип подсистемы (например, ПланОбменаВключаемыйВСоставОбменаДанными).

2. Зависимость регистрации от структуры правил конвертации (ПКС и ПВД)

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

Рассмотрим, как работает данный механизм:

  1. Если в правилах выгрузки данных (ПВД) выбран «Произвольный алгоритм» и объект выгружается через программное заполнение коллекции ВыборкаДанных, а в правилах конвертации свойств (ПКС) источника поля оставлены пустыми, БСП не может определить состав отслеживаемых реквизитов.
  2. При записи объекта процедура анализа модифицированности сравнивает текущие значения с реквизитами источника, указанными в правилах. Не обнаружив описанных реквизитов источника, алгоритм делает вывод, что значимые данные не изменились, и отменяет регистрацию изменений.

Для исправления этой проблемы применим один из двух подходов:

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

Регистрация = Истина;

Это переопределит автоматический анализ модифицированности и заставит подсистему записать изменение в узел плана обмена.

3. Особенности выгрузки физически удаленных объектов

При тестировании удаления часто возникает ситуация: объект помечается на удаление, затем удаляется непосредственным удалением (через операцию удаления помеченных объектов). В таблице регистрации изменений плана обмена появляется запись с битой ссылкой вида УдалениеОбъекта, но при выгрузке данных удаление в базу-приемник не передается.

Выясним причину такого поведения:

  1. Стандартная внешняя обработка V8Exchan83.epf предназначена преимущественно для ручной выгрузки данных и не всегда корректно обрабатывает выборку записей об удалении без полного описания структуры метаданных в ПКО.
  2. В типовых решениях обработкой зарегистрированных удалений занимается фоновый механизм обмена БСП (обработка Конвертация объектов информационных баз).
  3. Для формирования пакета <УдалениеОбъекта> в правилах конвертации обязательно должно присутствовать ПКО для соответствующего типа метаданных с включенным флагом выгрузки удаления.

После настройки штатного двухстороннего обмена (через прямое COM-соединение или сетевой каталог) с использованием процедур БСП зарегистрированные битые ссылки корректно транслируются в XML-сообщения обмена, и объекты физически удаляются на стороне приемника.

4. Сброс кэша правил регистрации

Обратите внимание на кэширование правил в БСП. Простой перезаписи макета плана обмена в конфигураторе часто бывает недостаточно, так как скомпилированные правила регистрации кэшируются в служебных структурах базы данных. После внесения изменений в XML-макет ПРО выполним перечитывание правил через форму настройки правил в режиме «1С:Предприятие» (раздел «Синхронизация данных») или программно обновим кэш подсистемы обмена данными.

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

ПланыОбмена.ЗарегистрироватьИзменения(УзлыОбмена, Источник);

Однако использование штатных алгоритмов БСП с соблюдением требований к ПКС, ПВД и подпискам позволяет сохранить гибкость отборов и оптимизацию объема передаваемых данных.

← На главную