Работа в распределенных информационных базах (РИБ) требует особой осторожности при обновлении конфигурации, особенно если используются расширения или автоматические патчи (исправления) от фирмы 1С. В данной статье мы проанализируем ситуацию, когда обновление привело к "зацикливанию" обмена, при котором центральная база (ЦБ) постоянно выгружает огромные файлы с метаданными, а подчиненный узел выдает ошибки при попытке синхронизации. Мы разберем причины возникновения таких сбоев и пошагово восстановим работоспособность системы.
Рассмотрим ситуацию: после обновления ЦБ и установки патчей (например, для поддержки формата ЭДО 5.03) подчиненный узел перестает принимать изменения. При этом каждый последующий сеанс обмена приводит к тому, что центральная база формирует сообщение огромного объема, содержащее сотни тысяч объектов справочника ИдентификаторыОбъектовМетаданных.
Проанализируем механизм контроля конфигурации. В современных версиях платформы используется параметр Digest2, который хранит контрольную сумму расширений. Если в ЦБ расширение было изменено или удалено некорректно, возникает несоответствие. Если подчиненный узел не может применить обновление (например, из-за конфликта кода в расширении), он не подтверждает получение сообщения. В результате ReceivedNo (номер принятого сообщения) в подчиненном узле не увеличивается, и при следующем обмене ЦБ снова пытается отправить те же самые данные, считая, что узел их не получил.
Одной из критических ошибок в данном процессе является следующая: «Справочник 'Идентификаторы объектов расширений' не может использоваться в информационной базе с неподтвержденной отменой главного узла». Выясним, почему она возникает.
Когда мы пытаемся "починить" базу вручную, отвязывая её от главного узла с помощью команды ПланыОбмена.УстановитьГлавныйУзел(Неопределено), база переходит в особый режим. В этом состоянии блокируются любые операции со справочниками метаданных, так как система ожидает либо окончательного превращения в автономную базу, либо восстановления связи. Попытки загрузить конфигурацию в таком режиме часто приводят к тому, что справочник идентификаторов объектов метаданных становится неконсистентным.
Разберем алгоритм действий, который поможет выйти из этого тупика и нормализовать обмен.
EF_), который не может быть применен из-за конфликта имен или структуры.EF_00_00687314_10), попробуем временно удалить его в ЦБ и выполнить обмен, чтобы узлы также получили команду на его удаление.ИдентификаторыОбъектовМетаданных и по самой конфигурации.
// Устанавливаем ссылку на главный узел (замените "ЦБ" на код вашего главного узла)
УзелГлавный = ПланыОбмена.ПоМагазину.НайтиПоКоду("ЦБ");
ПланыОбмена.УстановитьГлавныйУзел(УзелГлавный);
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина, Ложь);
Проанализируем, как правильно проводить такие обновления в будущем, чтобы не тратить часы на восстановление:
Если после всех манипуляций ЦБ все равно продолжает выгружать лишние данные, попробуем полностью очистить таблицу регистрации изменений для этого узла и выполнить "пустой" обмен (без изменений конфигурации), чтобы зафиксировать номера сообщений. Только после того, как "пустой" обмен пройдет успешно, можно приступать к повторному накатыванию необходимых патчей и расширений.