В механизме распределенных информационных баз (РИБ) платформы 1С:Предприятие ошибка «Конфигурация узла распределенной ИБ не соответствует ожидаемой» традиционно возникает в подчиненных узлах при рассинхронизации структуры метаданных. Однако на практике возможна куда более коварная ситуация: сообщение об ошибке формируется в главном (центральном) узле при приеме файла обмена от подчиненной базы, причем ошибка проявляется плавающим образом — возникает пару раз в день и затем исчезает сама по себе.
Разберем детально, как устроена проверка целостности конфигураций в заголовках сообщений обмена, почему контрольные суммы метаданных могут не совпадать и как устранить данную неполадку.
Рассмотрим структуру XML-пакета, который формируется подчиненным узлом при выгрузке данных в центральный узел:
<v8msg:Header>
<v8msg:ExchangePlan>ПоМагазину</v8msg:ExchangePlan>
<v8msg:To>дд</v8msg:To>
<v8msg:From>бо</v8msg:From>
<v8msg:MessageNo>1373</v8msg:MessageNo>
<v8msg:ReceivedNo>1525</v8msg:ReceivedNo>
</v8msg:Header>
<v8msg:Body>
<v8de:Changes xmlns:v8="http://v8.1c.ru/data" xmlns:v8de="http://v8.1c.ru/dataexchange/2005/02">
<v8de:Signature>083db94f-d53a-493f-b85e-e9bb9b18d864</v8de:Signature>
<v8de:Config xmlns:v8md="http://v8.1c.ru/metadata/2005/08">
<v8de:Version>216.0</v8de:Version>
<v8de:Digest1>00000000000000000000000000000000</v8de:Digest1>
<v8de:Digest2 v2="1883fd09d48778053832d043152fce85">a645a0ddf22d9b29acf73b0c515f4e84</v8de:Digest2>
</v8de:Config>
Проанализируем ключевые элементы блока Config:
v8de:Digest1 — контрольная сумма конфигурации до применения изменений. В исходящих сообщениях от подчиненных узлов этот тег всегда заполнен нулями (00000000000000000000000000000000), так как подчиненный узел не может передавать изменения конфигурации в центр.v8de:Digest2 — хэш-сумма текущей конфигурации базы данных, выгрузившей пакет.v2 внутри Digest2 — это алгоритмический хэш структуры метаданных, рассчитываемый платформой «на лету» в момент выгрузки. Именно он сопоставляется центральным узлом с ожидаемым значением. Если атрибут v2 в одном сеансе имеет значение 1883fd09d48778053832d043152fce85, а через некоторое время — 490478325d9db6322ebaa66796df8b3a, центральный узел отвергает файл с ошибкой несовпадения конфигурации.Выясним, из-за чего хэш метаданных v2 может непредсказуемо меняться в файлах обмена:
rphost). Если база функционирует в клиент-серверном варианте с несколькими рабочими процессами, а ранее выполнялось динамическое обновление («демоническое обновление»), в оперативной памяти разных процессов rphost может оставаться старый кэш метаданных. Задание на выгрузку, попадая на разные процессы, будет вычислять разный хэш.v2.Config в СУБД. Наличие фантомных записей и рассинхронизация внутренних идентификаторов объектов после сбоев динамического обновления.Первым делом проверим гипотезу о несанкционированной выгрузке из сторонней копии базы. Выполним следующие действия:
MessageNo 1373). Обратим внимание на имя компьютера, пользователя, версию приложения и идентификатор сеанса, сформировавшего проблемный файл.Для исключения влияния застрявшего кэша рабочих процессов кластера серверов выполним полную перезагрузку службы:
ragent).srvinfo) и удалим содержимое папок контекста сеансов (каталоги вида snccntx*).AppData\Local\Temp).ragent заново.Если смена каталогов и очистка кэша не помогли, необходимо устранить внутренние расхождения структуры метаданных между центром и подчиненным узлом. Разберем пошаговый алгоритм «лечения» узла РИБ:
ПланОбменаУзел = ПланыОбмена.ПоМагазину.ЭтотУзел().ПолучитьОбъект();
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
ПланОбменаУзел.Записать();
.cf. Применим изменения клавишей F7.
ГлавныйУзел = ПланыОбмена.ПоМагазину.НайтиПоКоду("дд");
Если ЗначениеЗаполнено(ГлавныйУзел) Тогда
ПланыОбмена.УстановитьГлавныйУзел(ГлавныйУзел);
КонецЕсли;
Регистрация изменений для обмена и проверим, нет ли зарегистрированных изменений конфигурации для данного подчиненного узла. Если они присутствуют — снимем регистрацию изменений метаданных, чтобы центр не требовал обновления структуры.Выполнение этих шагов гарантированно устраняет расхождения в расчетных хэшах Digest2 v2 и обеспечивает стабильный обмен данными в распределенной информационной базе.