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