При обслуживании распределенных информационных баз (РИБ) нередко возникает критическая ситуация: центральный узел успешно обновляется сразу через несколько релизов, после чего инициируется обмен с точкой. При запуске периферийного узла в режиме «1С:Предприятие» система аварийно завершает работу с сообщением: «Обновление на текущую версию допустимо только с версии X и выше. (Недопустимая попытка обновления с версии Y). Необходимо восстановить информационную базу из резервной копии...». Если резервной копии на точке перед синхронизацией сделано не было, стандартный откат становится невозможным.
Проанализируем природу этой ошибки и разберем по шагам проверенные способы восстановления работоспособности узла с сохранением накопленных данных.
Механизм распределенных информационных баз на уровне платформы передает только финальное состояние конфигурации (разницу между метаданными узлов на момент формирования пакета). Если в центральной базе последовательно применили несколько обновлений без выполнения промежуточных сеансов обмена с периферией, в подчиненный узел прилетит сразу итоговая структура метаданных.
Однако прикладные конфигурации на базе Библиотеки стандартных подсистем (БСП) управляют данными иначе. В коде конфигурации прописаны строгие цепочки обработчиков обновления. В регистре сведений ВерсииПодсистем периферийной базы зафиксирован старый номер релиза, а в коде пришедшей конфигурации заложено ограничение: процедуры конвертации данных умеют стартовать только с определенной промежуточной версии. В результате платформа уже изменила таблицы базы данных под новый релиз, а процедуры миграции данных БСП блокируют запуск предприятия из-за разрыва версий.
Важное предостережение: не пытайтесь решить проблему простой правкой номера версии в регистре ВерсииПодсистем. Искусственное изменение записи снимет блокировку запуска, но база пропустит критически важные обработчики переноса данных. Это приведет к незаполненным служебным реквизитам, неверным остаткам в новых регистрах и сбоям при проведении документов.
Это наиболее надежный вариант, позволяющий корректно выполнить все обработчики БСП и не потерять локальные данные на точке. Разберем алгоритм по шагам.
Создание физической резервной копии: перед началом любых манипуляций скопируйте текущий файл базы 1Cv8.1CD (или сделайте бэкап средствами СУБД) в отдельный каталог. Даже поврежденная база — это единственный источник несохраненных данных с точки.
Отключение узла от распределенной базы: запустите Конфигуратор на точке. Чтобы снять блокировку изменения конфигурации подчиненного узла, необходимо программно очистить главный узел. Откройте внешнюю обработку или вызовите окно «Произвольный алгоритм» и выполните код:
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
После выполнения данного метода периферийная база станет автономной.
Подготовка промежуточных файлов конфигурации: из дистрибутивов обновлений или из промежуточных копий центральной базы сохраните файл конфигурации промежуточного релиза (в нашем случае — файл .cf версии 11.5.27.41) и файл .cf финального релиза.
Загрузка промежуточной конфигурации: в Конфигураторе автономной базы откройте меню Конфигурация → Загрузить конфигурацию из файла и выберите файл промежуточного релиза 11.5.27.41. Примените изменения по клавише F7. Платформа предупредит об удалении некоторых объектов метаданных, появившихся в более старшей версии — соглашаемся, так как реальных данных в этих новых объектах на точке еще не появлялось.
Внимание: используйте именно команду полной загрузки конфигурации (CF), а не сравнение/объединение, чтобы не нарушить внутренние идентификаторы метаданных справочника ИдентификаторыОбъектовМетаданных.
Запуск процедур обновления промежуточного релиза: запустите базу в пользовательском режиме «1С:Предприятие». Система обнаружит штатный переход с версии 11.5.26.103 на 11.5.27.41 и без ошибок выполнит все регламентные обработчики обновления данных, перезаписав регистр ВерсииПодсистем.
Накатывание финальной конфигурации: снова закройте предприятие, откройте Конфигуратор и через меню Конфигурация → Загрузить конфигурацию из файла загрузите актуальный .cf финального релиза. Нажмите F7, примените изменения и запустите «1С:Предприятие». Дождитесь завершения оставшихся процедур обновления БСП.
Восстановление привязки к РИБ: после успешного завершения всех обработчиков верните базе статус подчиненного узла РИБ. Выполните программный код:
ГлавныйУзел = ПланыОбмена.ПоПредопределенномуЗначению("ПланОбмена.УдалениеПредопределенных.ЭтотУзел").ПланОбмена;
// Либо найдите ссылку на узел центральной базы по коду или наименованию:
СсылкаНаЦентр = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду("ЦБ");
ПланыОбмена.УстановитьГлавныйУзел(СсылкаНаЦентр);
Синхронизация счетчиков сообщений: при отвязке и привязке узла значения номеров принятых и отправленных сообщений могут сбиться. Если при первом сеансе обмена платформа выдаст ошибку о недопустимом номере сообщения, выровняйте реквизиты НомерПринятого и НомерОтправленного в свойствах узлов обмена обеих баз.
Если найти промежуточные релизы конфигурации не удается, либо пошаговая конвертация вызывает фатальные ошибки структуры данных, используем метод пересоздания периферийного узла с переносом оперативных данных.
Рассмотрим порядок действий:
Отвяжите аварийную базу от РИБ с помощью вызова ПланыОбмена.УстановитьГлавныйУзел(Неопределено); в Конфигураторе.
Чтобы зайти в базу предприятия и выгрузить накопившиеся документы (например, розничные чеки за смену, отчеты о продажах), временно обойдите проверку БСП. Для этого подключитесь к базе через внешнее COM-соединение, либо создайте расширение конфигурации, перехватывающее процедуру проверки версий подсистем при старте, либо воспользуйтесь обработкой прямого чтения таблиц информационной базы.
С помощью универсальной обработки выгрузки и загрузки данных в формате XML выгрузите документы, созданные на точке в период отсутствия связи.
В обновленной центральной базе создайте новый начальный образ для данного периферийного узла.
Разверните новый образ на точке и загрузите в него ранее спасенные оперативные документы через ту же обработку XML.
Данные подходы позволяют полностью исключить потерю данных учета даже в условиях отсутствия бэкапа и восстановить штатную работу распределенной базы 1С.