При работе с распределенными информационными базами (РИБ) разработчики нередко сталкиваются с ситуацией, когда после изменения программного кода или объектов метаданных в центральном узле (ЦУ) и выполнения сеанса синхронизации в подчиненном узле (ПУ) изменения так и не появляются. При этом клавиша обновления конфигурации базы данных (F7) в подчиненном узле остается неактивной, а сообщения об ошибках в журнале регистрации отсутствуют.
Проанализируем причины возникновения этой проблемы и разберем по шагам надежные способы доставки изменений метаданных в периферийную базу.
Причины отсутствия изменений конфигурации в узле-приемнике
Для понимания механизма передачи метаданных выясним, как платформа 1С отслеживает изменения в РИБ:
Очистка регистрации при встречном обмене. Если в ЦУ была обновлена конфигурация, но до момента выгрузки исходящего сообщения был принят входящий пакет данных из ПУ, платформа может ошибочно посчитать состояние узлов согласованным и сбросить признак необходимости передачи конфигурации.
Специфика обновления («демоническое» обновление). Динамическое обновление конфигурации базы данных или повреждение локального кэша могут приводить к тому, что конфигурация базы данных и основная конфигурация начинают различаться некорректно, а механизм фиксации изменений метаданных для узлов планов обмена не срабатывает.
Ограничения встроенного языка. Важно помнить, что метод ПланыОбмена.ЗарегистрироватьИзменения() предназначен исключительно для данных (документов, справочников, регистров). Передать в него метаданные конфигурации напрямую программным путем невозможно — за регистрацию метаданных отвечает ядро платформы при обновлении конфигурации БД.
Способ 1. Проверка структуры файла обмена
Прежде чем приступать к исправлению, проверим, попали ли изменения метаданных в исходящий файл обмена из центрального узла. Для этого выполним выгрузку в XML-файл и откроем его любым текстовым редактором.
В начале структуры выгруженного XML-сообщения сразу за заголовком найдем блок между тегами </v8de:Config> и <v8de:Data>. При наличии переносимых изменений метаданных в файле присутствует секция <v8md:Metadata> с закодированным бинарным содержимым. Если этой секции нет, значит, центральный узел не зарегистрировал изменения конфигурации для данного узла.
Способ 2. Повторная инициализация регистрации изменений в ЦУ
Если файл обмена не содержит блок <v8md:Metadata>, выполним принудительное обновление метаданных в центральной базе:
Откроем конфигуратор центрального узла (ЦУ).
Внесем любое незначительное изменение в свойства самой конфигурации (например, добавим символ в поле комментария или изменим версию) либо внесем микроправку в любой общий модуль (поставим и удалим пробел).
Выполним обновление конфигурации базы данных (клавиша F7).
Важно: сразу же сформируем файл обмена или выполним сеанс синхронизации для подчиненного узла, временно заблокировав регламентные задания и прием входящих пакетов из других баз, чтобы избежать встречного сброса регистрации.
Зайдем в подчиненный узел и применим полученные изменения. Если сообщение обмена принимается в режиме «1С:Предприятие», после завершения загрузки платформа предложит перезапустить сеанс или открыть конфигуратор для нажатия клавиши F7.
Способ 3. Ручная загрузка конфигурации через отключение главного узла
Если платформа упорно не формирует пакет метаданных через стандартный механизм РИБ, воспользуемся штатной процедурой ручной синхронизации конфигураций:
В центральном узле выгрузим конфигурацию в файл через меню: Конфигурация -> Сохранить конфигурацию в файл... (получаем файл с расширением .cf).
В подчиненном узле временно отключим связь с главным узлом. Для этого выполним в режиме «1С:Предприятие» следующий программный код:
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
Либо запустим конфигуратор подчиненного узла из командной строки с ключом /ResetMasterNode.
В открытом конфигураторе подчиненного узла (где возможность редактирования теперь разблокирована) загрузим файл конфигурации: Конфигурация -> Загрузить конфигурацию из файла... и выберем ранее сохраненный .cf-файл.
Применим изменения конфигурации базы данных клавишей F7 или через меню Конфигурация -> Обновить конфигурацию базы данных.
Восстановим признак подчиненности узла, выполнив в режиме «1С:Предприятие» подчиненной базы код: