Настройка распределенной информационной базы (РИБ) в типовых решениях 1С — задача стандартная и автоматизированная. Однако, когда конфигурация подвергается доработкам (например, в популярную программу 1С:Зарплата и Управление Персоналом 3 добавляются новые документы, справочники и регистры), штатный механизм создания начального образа может давать сбои. Администраторы и разработчики часто сталкиваются со следующими системными ошибками при попытке первого запуска подчиненного узла: «Каталог обмена информацией не указан» на первых процентах загрузки и «Неправильный формат сообщения» при вызове метода ЗакончитьЧтение.
В этой статье мы подробно разберем причины возникновения этих сбоев, выясним, как правильно интегрировать новые планы обмена в экосистему Библиотеки стандартных подсистем (БСП), а также пошагово изучим альтернативный «быстрый» метод развертывания подчиненного узла РИБ без создания начального образа платформенными средствами.
---
Эта ошибка прерывает процесс инициализации периферийной базы в самом начале. Выясним причину такого поведения системы.
Современные конфигурации 1С, включая ЗУП 3, работают на базе БСП. Обмен данными в них управляется не напрямую платформой, а через служебный программный слой. Транспортные настройки (пути к сетевым папкам, адреса FTP, параметры электронной почты) хранятся в специализированных регистрах сведений, таких как НастройкиТранспортаОбменаДанными.
Когда вы создаете начальный образ стандартным платформенным методом («Создать начальный образ» в Конфигураторе или в режиме «1С:Предприятие»), настройки транспорта из центральной базы часто не переносятся в подчиненную в готовом для использования виде или сбрасываются. При первом запуске подчиненный узел пытается выполнить автоматическую синхронизацию для завершения регистрации, обращается к БСП-регистрам транспорта, видит пустые поля каталога обмена и аварийно завершает работу.
Как правильно решать эту проблему в штатном режиме:
\\Server\ExchangeFolder), обязательно убедитесь, что у пользователя операционной системы, под которым запущена служба сервера «1С:Предприятия» (для клиент-серверного варианта) или под которым работает текущий пользователь (для файловой базы), есть полные права (чтение, запись, изменение) на эту папку. В противном случае БСП выдаст ту же ошибку, не сумев прочитать путь или создать тестовый файл.---
Данная ошибка является одной из самых «маскирующих» в платформе 1С. Текст ошибки указывает на проблему XML-структуры сообщения обмена в момент выполнения метода ЗакончитьЧтение(), из-за чего разработчики начинают искать ошибки в файле выгрузки. Однако в 90% случаев формат самого XML-файла абсолютно корректен.
Проанализируем ситуацию изнутри. Чтение и запись объектов при обмене данными происходят в рамках одной большой или нескольких вложенных транзакций. Если при записи какого-либо объекта в подчиненную базу (например, вашего нового доработанного документа или записи регистра) происходит критическая ошибка, транзакция аварийно откатывается (Rollback). Ошибка может возникнуть по разным причинам: сработал код в подписке на событие, возникла ошибка в обработчиках ПередЗаписью или ПриЗаписи, нарушилась уникальность кодов или зафиксирована попытка записать «битую» ссылку.
Поскольку транзакция записи сломана, платформа при попытке корректно завершить чтение файла методом ЗакончитьЧтение() выбрасывает общую системную ошибку «Неправильный формат сообщения». Платформа просто не может закрыть поток чтения над сломанной транзакцией БД.
Как диагностировать и устранить реальную причину:
«Дублирование ключевых значений в регистре...» или «Поле объекта не обнаружено...»). Это укажет на конкретный проблемный объект./ЗапуститьОбновлениеИнформационнойБазы.---
Если вы создаете собственный план обмена «с нуля» в доработанной конфигурации, просто установить галочку «РИБ» в свойствах объекта в Конфигураторе недостаточно. БСП должна «узнать» о существовании нового плана обмена. Для этого выполните следующие действия:
Шаг 1. Регистрация плана обмена в переопределяемом модуле
Найдите в конфигурации общий модуль ОбменДаннымиПереопределяемый и добавьте ваш план обмена в список разрешенных в процедуре ПолучитьПланыОбмена:
Процедура ПолучитьПланыОбмена(ПланыОбменаПодсистемы) Экспорт
ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.ИмяВашегоНовогоПланаОбмена);
КонецПроцедуры
Шаг 2. Настройка свойств в модуле менеджера плана обмена
Откройте модуль менеджера вашего нового плана обмена и добавьте экспортную процедуру ПриПолученииНастроек, чтобы БСП понимала, как работать с этим обменом:
Процедура ПриПолученииНастроек(НастройкиПланаОбмена) Экспорт
НастройкиПланаОбмена.ЭтотПланОбменаРИБ = Истина;
НастройкиПланаОбмена.ИспользоватьРегистрСоответствияАдресовНод = Ложь;
КонецПроцедуры
Шаг 3. Состав плана обмена
Вкладка «Состав» вашего плана обмена должна включать не только ваши новые документы, но и ключевые служебные регистры БСП (например, регистр сведений СоответствияОбъектовИнформационныхБаз), иначе механизмы сопоставления объектов будут работать некорректно.
---
Если штатный механизм создания начального образа упорно выдает ошибки, а сроки поджимают, можно воспользоваться проверенным инженерным методом: развернуть подчиненный узел из полной копии центральной базы, а затем программно переназначить роли узлов. Этот метод гарантирует 100% идентичность конфигураций и данных на момент старта.
Рассмотрим этот процесс подробно по шагам.
Шаг 1. Создание узлов в Центральной базе (ЦБ)
В центральной базе зайдите в ваш план обмена и создайте два узла:
"ЦБ", Наименование — "Центральная база" (этот узел должен быть предопределенным)."ПУ", Наименование — "Подчиненный узел".Убедитесь, что номера отправленных и принятых сообщений для обоих узлов равны 0.
Шаг 2. Создание копии базы данных
Сделайте полную копию центральной информационной базы (через выгрузку файла .dt или копированием файла 1Cv8.1CD для файловых баз). Разверните эту копию на целевом компьютере или сервере периферийного узла.
Шаг 3. Программная установка главного узла в копии
Запустите копию базы в режиме «1С:Предприятие». Нам необходимо программно сообщить этой базе, что она теперь не главная, а подчиненная по отношению к центральной базе "ЦБ".
Для этого откройте внешнюю обработку (или создайте групповую обработку через функции для технического специалиста) и выполните следующий код:
// Указываем для текущей базы, кто является ее главным узлом
ГлавныйУзел = ПланыОбмена.ИмяВашегоНовогоПланаОбмена.НайтиПоКоду("ЦБ");
Если ЗначениеЗаполнено(ГлавныйУзел) Тогда
ПланыОбмена.УстановитьГлавныйУзел(ГлавныйУзел);
Сообщить("Главный узел успешно установлен!");
Иначе
Сообщить("Не удалось найти узел с кодом ЦБ!");
КонецЕсли;
После выполнения этого кода заголовок окна программы изменится — в скобках появится название вашего главного узла, а база перейдет в режим подчиненного узла РИБ.
Шаг 4. Настройка транспорта и очистка регистрации изменений
Поскольку мы скопировали базу целиком, в подчиненном узле остались «лишние» настройки. Выполним финальную очистку:
«Регистрация изменений для обмена данными» и полностью удалите (очистите) все зарегистрированные изменения для всех узлов в подчиненной базе.Теперь базы готовы к полноценному обмену. Этот метод позволяет запустить РИБ за считанные минуты даже на базах объемом в сотни гигабайт, полностью обходя долгий и нестабильный процесс генерации начального образа платформой.