При обслуживании распределенных информационных баз (РИБ) часто возникает вопрос: обязательно ли выполнять синхронизацию с периферийными узлами после каждого промежуточного релиза или можно обновить главный узел сразу на несколько версий вперед и только потом запустить обмен? Рассмотрим технические особенности этого процесса, разберем потенциальные риски и проанализируем проверенные способы проведения такого обновления.
Платформа 1С позволяет обновить конфигурацию центрального узла до целевого релиза, пропустив промежуточные обновления конфигурации. Однако важно учитывать поведение Библиотеки Стандартных Подсистем (БСП) и обработчиков обновления данных.
При запуске базы в режиме «1С:Предприятие» система производит запуск специальных процедур обновления информационной базы. Если пропущено несколько релизов, БСП пытается последовательно выполнить обработчики данных для каждой пропущенной версии. Если в промежуточных релизах менялась структура метаданных или переносились данные из реквизитов в регистры, на подчиненных узлах могут возникнуть блокирующие ошибки.
Проанализируем основные проблемы, с которыми можно столкнуться при обновлении центрального узла на несколько релизов без промежуточных обменов:
Выясним, какие подходы позволяют успешно обновить распределенную базу сразу на несколько релизов.
Если разрыв между релизами небольшой и в конфигурации не происходило кардинальных изменений структуры данных, процесс выглядит следующим образом:
В случае возникновения ошибок с версиями подсистем в подчиненном узле иногда требуется скорректировать записи в регистре сведений ВерсииSubsystem (или ВерсииПодсистем) вручную либо с помощью специальной обработки.
При большом числе пропущенных релизов или при регулярных сбоях обмена применяется метод временного отключения подчиненного узла от главности:
/ResetMasterNode или программно:
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
.cf) целевого релиза через Конфигуратор./C ВыполнитьОбновлениеИБ) и дожидаемся полного выполнения всех обработчиков.
ГлавныйУзел = ПланыОбмена.ГлавныйУзел();
Если Не ЗначениеЗаполнено(ГлавныйУзел) Тогда
СсылкаНаГлавный = ПланыОбмена.РИБ.НайтиПоКоду("ЦБ"); // Указываем код центрального узла
ПланыОбмена.УстановитьГлавныйУзел(СсылкаНаГлавный);
КонецЕсли;
Если разрыв составляет десятки релизов или структура данных в периферийной базе повреждена, наиболее надежным решением будет обновление только главного узла и последующее пересоздание периферийной базы из нового начального образа через метод ПланыОбмена.СоздатьНачальныйОбраз().