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