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