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