Синхронизация данных между конфигурациями 1С (например, УТ 11.4 и БП 3.0 КОРП) через универсальный формат (EnterpriseData) — это мощный инструмент, основанный на технологии КД 3.0. Однако при добавлении в систему нового, нетипового документа разработчики часто сталкиваются с проблемой: данные передаются корректно, но изменения состояния объекта (установка пометки на удаление или отмена проведения) игнорируются приемником. Разберем подробно, как обеспечить полную синхронизацию жизненного цикла документа. При необходимости настроить регулярное выполнение таких операций по расписанию можно использовать инструмент для автоматизации обмена данными между базами 1С.
Первым делом проанализируем структуру обмена. Поскольку мы добавили новый документ, он должен быть описан в пакете EnterpriseData. Недостаточно просто создать объект в формате. Необходимо убедиться, что система «понимает», к какому типу относится ссылка на этот объект.
Проверим и выполним следующие действия:
EnterpriseData (актуальной версии, например, 1.5.20).ЛюбаяСсылка.СсылкаНаОбъект обязательно включим наш новый документ. Если этого не сделать, механизм сопоставления ссылок может работать некорректно при попытке обработать удаление.ПометкаУдаления с типом boolean.В отличие от КД 2.0, где правила хранятся в XML, в универсальном формате логика выгрузки описывается в общем модуле МенеджерОбменаЧерезУниверсальныйФормат. Рассмотрим, какие изменения необходимо внести в код:
Найдем процедуру, отвечающую за создание правил конвертации объектов (ПКО) для нашего документа (например, ДобавитьПКО_Документ_G_ПередачаНаАффинаж). Проанализируем важный параметр:
ПравилоОбработки = ПравилаОбработки.Добавить();
ПравилоОбработки.Имя = "Документ_G_ПередачаНаАффинаж";
ПравилоОбработки.ОбъектМетаданных = Метаданные.Документы.G_ПередачаНаАффинаж;
// Важный момент для очистки данных:
ПравилоОбработки.ОчисткаДанных = Ложь;
Если для документа используется одно ПКО, параметр ОчисткаДанных обычно устанавливается в Ложь. Однако стоит проверить процедуру ПКО_Документ_G_ПередачаНаАффинаж_Карточка, где происходит сопоставление свойств. Мы должны явно указать передачу реквизита пометки удаления:
Свойство = ПравилоКонвертации.Свойства.Добавить();
Свойство.Имя = "ПометкаУдаления";
Свойство.ИмяСвойстваФормата = "DeletionMark";
Механизм синхронизации должен «узнать», что объект изменился. Для этого документ должен быть включен в соответствующие подписки на события (аналогично типовым документам, таким как ПеремещениеТоваров). Но ключевую роль играют Правила Регистрации (ПР), которые по-прежнему настраиваются через Конвертацию данных 2.0.
Разберем типичные ошибки в ПР:
ПометкаУдаления должен быть включен в поля поиска в ПКО правил регистрации. Это критично для корректной идентификации состояния объекта в приемнике.Если Не Объект.ПометкаУдаления Тогда..., то при установке пометки объект просто не попадет в план обмена.Выясним причину, по которой даже после внесения изменений в конфигуратор обмен может не работать. Многие разработчики забывают, что в современных конфигурациях 1С (УТ 11, БП 3.0) правила обмена и регистрации кэшируются в базе данных. Если в обслуживании находится несколько баз, перед обновлением правил будет полезно архивировать и протестировать информационные базы 1С в автоматическом режиме.
Даже если вы изменили макет ПравилаРегистрации внутри плана обмена СинхронизацияДанныхЧерезУниверсальныйФормат, система может продолжать использовать старую версию из регистра сведений. Для автоматизации обновления правил напрямую по протоколу HTTP можно использовать обработку для загрузки правил регистрации и конвертации из КД 2.
Выполним следующие шаги для принудительного обновления:
ПравилаДляОбменаДанными.Если после обновления правил в регистре ситуация не изменилась, проанализируем файл обмена XML. Посмотрим, появляется ли там узел нашего документа при его пометке на удаление. Если узла нет — проблема в регистрации (план обмена не видит изменений). Если узел есть, но свойство DeletionMark равно false — проблема в менеджере обмена.
Для детальной проверки можно временно включить регистрацию всех изменений для документа в обработке «Регистрация изменений для обмена» и посмотреть, как объект выгружается в файл. Помните, что для нетиповых объектов важно соблюдать версионность формата: и источник, и приемник должны работать в одном пространстве имен EnterpriseData (например, 1.5.20).
Таким образом, полноценная реализация передачи пометки удаления требует синхронной настройки в трех местах: XDTO-пакете, модуле менеджера обмена и, самое главное, в регистре правил регистрации данных внутри самой информационной базы. Для контроля результата и поиска расхождений после настройки обмена удобно автоматически сверять бухгалтерские проводки между базами 1С.