Рассмотрим ситуацию, с которой часто сталкиваются разработчики при настройке механизмов обмена данными. Представьте: в подписке на событие ПриЗаписи справочника вы используете метод ПланыОбмена.ЗарегистрироватьИзменения. Код выполняется без ошибок, переменные заполнены, массив узлов корректен, но в таблице изменений конкретной номенклатуры так и не появляется. Давайте вместе разберем, почему это может происходить и как правильно диагностировать такую «мистику».
Первое, что необходимо понять: регистрация изменений — это транзакционное действие. Если после вашего кода срабатывают другие механизмы, которые «отменяют» регистрацию, вы не увидите результат в очереди. Рассмотрим наиболее вероятные причины:
ПланыОбмена.УдалитьРегистрацию.Чтобы понять, в какой момент «пропадает» запись, не стоит полагаться на стандартные обработки сразу после завершения записи. Выполним следующие действия:
ПланыОбмена.ЗарегистрироватьИзменения(МассивУзлов, Объект.Ссылка).Изменения соответствующего плана обмена.ПослеЗаписи).Часто проблема кроется в том, что после основного кода записи вызываются другие механизмы. Рассмотрим, как это выглядит в коде:
// В вашей подписке:
ПланыОбмена.ЗарегистрироватьИзменения(МассивУзлов, Объект.Ссылка);
// ... выполнение кода завершается ...
Если в конфигурации есть другие подписки на событие ПриЗаписи или ПослеЗаписи, обязательно проверьте их содержимое. Ищите вызовы методов УдалитьРегистрацию или программную установку параметров обмена, которые могут приводить к сбросу очереди изменений для данного объекта.
Если вы подозреваете, что обмен «съедает» записи, попробуйте временно отключить регламентные задания по обмену. Если без них регистрация начала появляться стабильно — значит, у вас возникает конфликт параллельной работы. В этом случае необходимо настроить очереди обработки так, чтобы регистрация и выгрузка не пересекались по времени или использовать блокировки транзакций.
Если методы отладки не дают ответа, самым надежным способом будет анализ Технологического журнала (ТЖ). Настройте фильтр на события DBMSSQL (если у вас SQL-версия) или CALL для методов ПланыОбмена. Это позволит вам увидеть стек вызовов: кто и в какой момент выполнил удаление регистрации для конкретной ссылки. Это даст 100% ответ на вопрос, какой модуль конфигурации вмешивается в процесс.
Проанализировав ситуацию, можно сделать следующие выводы для решения вашей проблемы:
_DocumentChangeRxxx (или аналогичной для справочника) поможет убедиться в истинном состоянии очереди.Тестирование и исправление (ТиИ) в части «Проверка логической целостности» может устранить скрытые ошибки ссылочной целостности.Применяя этот пошаговый подход, вы сможете локализовать «виновника» пропадания данных и обеспечить корректную работу обмена данными в вашей системе.