← На главную
При работе с распределенными информационными базами (РИБ) после обновления конфигурации центрального узла можно столкнуться с неприятной ситуацией. При попытке синхронизации данных подчиненный узел не может принять изменения и выдает ошибку: "Ошибка преобразования данных XML". Обычно это происходит из-за того, что файл сообщения обмена, содержащий изменения конфигурации, имеет очень большой размер или содержит некорректные данные, которые не могут быть правильно обработаны (распарсены) на стороне получателя.
Проанализируем типичный сценарий: вы обновили конфигурацию, например, "Управление торговлей 11", в центральной базе. Запускаете обмен, и в подчиненной базе видите сообщение вида:
Ошибка чтения файла сообщения обмена: {Обработка.КонвертацияОбъектовРаспределенныхИнформационныхБаз.МодульОбъекта(196)}: Ошибка при вызове метода контекста (ПрочитатьИзменения): Ошибка преобразования данных XML...
Это означает, что механизм обмена не смог прочитать и применить изменения. Рассмотрим несколько проверенных способов решения этой проблемы, от самых простых к более сложным.
Решение 1: Самый простой и быстрый способ — "освежить" конфигурацию
Этот метод является наиболее предпочтительным для начала, так как он минимально инвазивен и часто решает проблему. Идея заключается в том, чтобы заставить центральный узел заново сформировать пакет обновления конфигурации для подчиненных узлов, который, как правило, получается корректным и заменяет собой "битый" пакет из предыдущей выгрузки.
Разберем по шагам:
- Откройте конфигуратор центральной базы (главного узла РИБ).
- Внесите любое незначительное изменение в конфигурацию. Цель — просто изменить состояние конфигурации, чтобы система зафиксировала необходимость обновления. Например, можно открыть модуль любого объекта (справочника, документа) и добавить пустой комментарий:
// Тест.
- Сохраните конфигурацию.
- Выполните обновление конфигурации базы данных (клавиша F7 или меню "Конфигурация" -> "Обновить конфигурацию базы данных").
- Важный шаг: после обновления запустите центральную базу в режиме "1С:Предприятие" со специальным параметром запуска. Это нужно, чтобы принудительно запустить все процедуры обновления данных после изменения конфигурации. Для этого в окне запуска базы выберите нужную базу, нажмите "Изменить" и в поле "Дополнительные параметры запуска" впишите:
/ЗапуститьОбновлениеИнформационнойБазы
- Дождитесь, пока система выполнит все процедуры обновления. После этого можно удалить параметр запуска.
- Запустите синхронизацию данных с проблемным подчиненным узлом. С большой вероятностью обмен пройдет успешно, так как будет сформирован новый, корректный файл сообщения.
Этот метод помог большинству пользователей, столкнувшихся с данной проблемой, и должен быть первым в списке ваших действий.
Решение 2: Ручное обновление конфигурации подчиненного узла
Если первый способ не помог, значит, проблема может быть глубже, и требуется более серьезное вмешательство. Этот метод предполагает, что мы вручную приведем конфигурацию подчиненного узла в полное соответствие с центральным, а затем восстановим связь РИБ.
Порядок действий:
- В центральной базе сохраните актуальную конфигурацию в файл. Для этого в конфигураторе выберите меню "Конфигурация" -> "Сохранить конфигурацию в файл..." и сохраните ее с расширением
.cf.
- Теперь нужно "отвязать" подчиненный узел от главного, чтобы получить возможность изменять его конфигурацию. Для этого запустите подчиненную базу с параметром командной строки
/ResetMasterNode. База данных не запустится в режиме предприятия, но команда будет выполнена, и узел станет автономным.
- Уберите параметр
/ResetMasterNode из строки запуска.
- Запустите конфигуратор подчиненной базы. Так как узел теперь не является подчиненным, его конфигурация будет открыта для редактирования.
- Загрузите в него сохраненный ранее файл
.cf из центральной базы через меню "Конфигурация" -> "Загрузить конфигурацию из файла...".
- Обновите конфигурацию базы данных (F7). Дождитесь завершения процесса.
- Закройте конфигуратор и запустите подчиненную базу в режиме "1С:Предприятие". Система обнаружит, что эта база ранее была частью РИБ, и предложит "Восстановить связь с главным узлом". Согласитесь с этим предложением.
- После восстановления связи попробуйте выполнить обмен данными. Теперь конфигурации идентичны, и обмен данными должен пройти без ошибок, связанных с метаданными.
Возможная проблема: Иногда после таких манипуляций могут сбиться номера сообщений обмена. Если это произошло, можно воспользоваться стандартной обработкой с диска ИТС "Регистрация изменений для обмена", чтобы скорректировать номера вручную.
Решение 3: Отмена регистрации проблемных объектов
Иногда ошибка кроется не в самой структуре конфигурации, а в данных конкретного объекта, которые выгружаются в XML. Некорректные символы, "битые" ссылки или нарушение структуры данных одного элемента могут приводить к сбою всего процесса обмена.
Как действовать в этом случае:
- В центральной базе перейдите к настройкам планов обмена (например, через "Все функции" -> "Планы обмена").
- Найдите план обмена, соответствующий вашей РИБ, и откройте настройки для проблемного подчиненного узла.
- В форме настроек узла найдите и откройте список зарегистрированных к обмену изменений.
- Проанализируйте список. Если вы знаете, какие данные менялись последними перед возникновением ошибки, попробуйте отменить их регистрацию. Например, если проблема началась после ввода определенного документа, найдите его в списке и снимите регистрацию.
- Если выявить конкретный проблемный объект не удается, можно пойти на крайнюю меру — отменить регистрацию всех изменений для данного узла. Это безопасно, так как данные не удаляются, а лишь временно исключаются из следующего обмена.
- После отмены регистрации запустите синхронизацию. В этом случае в подчиненный узел отправится только сообщение с обновлением конфигурации. Если оно пройдет успешно, значит, проблема действительно была в данных.
- После успешного обновления конфигурации можно снова зарегистрировать все необходимые данные к обмену (система сделает это автоматически при их следующем изменении, либо можно использовать специальные обработки для принудительной регистрации).
Решение 4: Полное пересоздание узла РИБ
Это самый радикальный метод, который следует применять, если ничего из вышеперечисленного не помогло. Он гарантирует "чистый старт" для подчиненного узла, но требует больше времени и может повлечь необходимость ручного переноса несинхронизированных данных.
Порядок действий:
- Выполните ручное обновление конфигурации подчиненного узла, как описано в Решении 2 (шаги 1-6).
- При запуске подчиненной базы в режиме предприятия, когда система предложит восстановить связь, откажитесь от этого предложения.
- В центральной базе полностью удалите из плана обмена проблемный узел.
- Создайте для него начальный образ заново, как если бы вы создавали новый узел РИБ с нуля.
- Разверните этот начальный образ в качестве новой подчиненной базы.
- Если в "старой" подчиненной базе были созданы документы, которые не успели синхронизироваться, их придется перенести в новую базу вручную. Для этого можно использовать стандартную обработку
Выгрузка и загрузка данных XML.
Этот способ является последним средством, но он надежно решает проблемы, связанные с накопленными ошибками в механизме обмена.