При сопровождении распределенных информационных баз (РИБ) в «1С:Розница 2.2» нередко возникает критическая ситуация: центральный узел успешно обновлен на новый релиз, а в периферийной базе при попытке принять пакет с изменениями конфигурации процесс завершается ошибкой либо падает при запуске обработчиков обновления. В результате обмен останавливается, периферийная база блокируется или рассинхронизируется с центром.
Разберем подробный регламент действий, который позволяет восстановить работоспособность периферийного узла, корректно обновить его структуру метаданных вручную через файл .cf и возобновить штатный обмен данными.
Причины сбоя синхронизации при обновлении
Проанализируем основные факторы, приводящие к блокировке обмена в РИБ:
Зависание или ошибка передачи структуры конфигурации. Центральный узел регистрирует изменение метаданных и отправляет образ конфигурации в сообщении обмена. Если файл обмена велик или в процессе чтения возник сбой, периферийный узел не может применить обновление штатным механизмом.
Незавершенные процедуры обновления БСП. После обновления метаданных должны отработать фоновые и отложенные обработчики обновления информационной базы. Если запустить обмен до их завершения, возникает конфликт версий подсистем.
Сбой счетчиков номеров сообщений. Если периферийную базу восстанавливали из резервной копии, номера принятых и отправленных пакетов перестают совпадать, из-за чего обе базы отвергают входящие файлы.
Повторная регистрация конфигурации в центре. Если периферийный узел уже обновлен вручную, а в центральной базе осталась висеть регистрация изменений конфигурации, центр при каждом обмене будет пытаться перезаписать метаданные периферии.
Пошаговый алгоритм ручного обновления периферийной базы через CF-файл
Если штатное обновление через файл обмена падает с ошибками, наиболее надежным решением является временное отключение признака подчиненного узла РИБ, прямое обновление конфигурации из файла и повторная привязка к центральному узлу.
Рассмотрим по шагам выполнение этой процедуры:
Выгрузка файла конфигурации из центрального узла. В центральной базе открываем конфигуратор и сохраняем актуальную конфигурацию в файл через меню Конфигурация -> Сохранить конфигурацию в файл... (получаем файл .cf).
Отключение главного узла в периферийной базе. Запускаем периферийную базу в режиме «1С:Предприятие». С помощью внешней обработки или через групповую обработку выполняем команду снятия главного узла:
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
После выполнения этого кода база перестает быть подчиненным узлом РИБ и становится автономной.
Загрузка конфигурации в конфигураторе. Закрываем пользовательский сеанс периферийной базы и открываем её в конфигураторе. Выполняем команду Конфигурация -> Загрузить конфигурацию из файла... (выбираем полученный ранее .cf из центра) и применяем изменения структуры базы данных по клавише F7. Важно: необходимо использовать именно «Загрузить конфигурацию из файла», а не «Сравнить и объединить».
Запуск пользовательского режима и выполнение обработчиков обновления. Запускаем периферийную базу в режиме «1С:Предприятие» под учетной записью с правами администратора. Дожидаемся полного завершения работы обработчиков обновления версии программы в подсистеме БСП.
Восстановление связи с главным узлом. Не создавая новых элементов в плане обмена, привязываем существующий узел центральной базы в качестве главного. Выполняем следующий код:
УзелЦентр = ПланыОбмена.ПоМагазину.НайтиПоКоду("КодЦентральногоУзла");
Если ЗначениеЗаполнено(УзелЦентр) Тогда
ПланыОбмена.УстановитьГлавныйУзел(УзелЦентр);
КонецЕсли;
Снятие регистрации изменений конфигурации в центральной базе. Чтобы центральный узел не отправлял повторно конфигурацию в периферию, в центральной базе очищаем регистрацию метаданных для проблемного узла:
Рассмотрим типовые ошибки, которые могут возникнуть в процессе настройки и первого запуска синхронизации:
Ошибка несоответствия префикса узла. Если программа выдает предупреждение о несовпадении префиксов, проверяем соответствие реквизита Префикс у предопределенного (текущего) узла плана обмена в периферии значению константы ПрефиксУзлаРаспределеннойИнформационнойБазы (или ПрефиксИнформационнойБазы). Коды узлов и префиксы в обеих базах должны строго совпадать.
Нарушение нумерации сообщений. Если пакеты отклоняются из-за неверного номера сообщения, открываем узлы плана обмена в обеих базах и вручную выравниваем счетчики: в свойствах узла устанавливаем НомерОтправленного = 0 и НомерПринятого = 0. После этого выполняем полную выгрузку данных из центра в периферию.
Кэш конфигурации. Если после обновления метаданных справочников возникают нетипичные ошибки обращения к полям, необходимо закрыть сеансы и удалить локальные каталоги кэша пользователя в AppData\Local\1C и AppData\Roaming\1C.
Выполнение описанного алгоритма гарантирует восстановление структуры метаданных и сохранение целостности идентификаторов объектов без необходимости полного пересоздания начального образа узла.