Как настроить обмен РИБ в доработанной 1С:ЗУП 3 и обойти ошибки создания начального образа?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

Настройка распределенной информационной базы (РИБ) в типовых решениях 1С — задача стандартная и автоматизированная. Однако, когда конфигурация подвергается доработкам (например, в популярную программу 1С:Зарплата и Управление Персоналом 3 добавляются новые документы, справочники и регистры), штатный механизм создания начального образа может давать сбои. Администраторы и разработчики часто сталкиваются со следующими системными ошибками при попытке первого запуска подчиненного узла: «Каталог обмена информацией не указан» на первых процентах загрузки и «Неправильный формат сообщения» при вызове метода ЗакончитьЧтение.

В этой статье мы подробно разберем причины возникновения этих сбоев, выясним, как правильно интегрировать новые планы обмена в экосистему Библиотеки стандартных подсистем (БСП), а также пошагово изучим альтернативный «быстрый» метод развертывания подчиненного узла РИБ без создания начального образа платформенными средствами.

---

Анализ ошибки «Не указан каталог обмена информацией» (на 5% загрузки)

Эта ошибка прерывает процесс инициализации периферийной базы в самом начале. Выясним причину такого поведения системы.

Современные конфигурации 1С, включая ЗУП 3, работают на базе БСП. Обмен данными в них управляется не напрямую платформой, а через служебный программный слой. Транспортные настройки (пути к сетевым папкам, адреса FTP, параметры электронной почты) хранятся в специализированных регистрах сведений, таких как НастройкиТранспортаОбменаДанными.

Когда вы создаете начальный образ стандартным платформенным методом («Создать начальный образ» в Конфигураторе или в режиме «1С:Предприятие»), настройки транспорта из центральной базы часто не переносятся в подчиненную в готовом для использования виде или сбрасываются. При первом запуске подчиненный узел пытается выполнить автоматическую синхронизацию для завершения регистрации, обращается к БСП-регистрам транспорта, видит пустые поля каталога обмена и аварийно завершает работу.

Как правильно решать эту проблему в штатном режиме:

  1. Настраивайте параметры подключения (пути к каталогам обмена) в центральной базе до запуска процедуры создания начального образа подчиненного узла. В этом случае БСП запишет их в структуру данных, и платформа перенесет их в новую базу в процессе копирования таблиц.
  2. Если используется сетевой каталог (UNC-путь вида \\Server\ExchangeFolder), обязательно убедитесь, что у пользователя операционной системы, под которым запущена служба сервера «1С:Предприятия» (для клиент-серверного варианта) или под которым работает текущий пользователь (для файловой базы), есть полные права (чтение, запись, изменение) на эту папку. В противном случае БСП выдаст ту же ошибку, не сумев прочитать путь или создать тестовый файл.

---

Разбор критической ошибки «Неправильный формат сообщения» при вызове метода ЗакончитьЧтение (на 80% загрузки)

Данная ошибка является одной из самых «маскирующих» в платформе 1С. Текст ошибки указывает на проблему XML-структуры сообщения обмена в момент выполнения метода ЗакончитьЧтение(), из-за чего разработчики начинают искать ошибки в файле выгрузки. Однако в 90% случаев формат самого XML-файла абсолютно корректен.

Проанализируем ситуацию изнутри. Чтение и запись объектов при обмене данными происходят в рамках одной большой или нескольких вложенных транзакций. Если при записи какого-либо объекта в подчиненную базу (например, вашего нового доработанного документа или записи регистра) происходит критическая ошибка, транзакция аварийно откатывается (Rollback). Ошибка может возникнуть по разным причинам: сработал код в подписке на событие, возникла ошибка в обработчиках ПередЗаписью или ПриЗаписи, нарушилась уникальность кодов или зафиксирована попытка записать «битую» ссылку.

Поскольку транзакция записи сломана, платформа при попытке корректно завершить чтение файла методом ЗакончитьЧтение() выбрасывает общую системную ошибку «Неправильный формат сообщения». Платформа просто не может закрыть поток чтения над сломанной транзакцией БД.

Как диагностировать и устранить реальную причину:

  1. Анализ Журнала регистрации: Перед повторным запуском обмена откройте Журнал регистрации в подчиненной базе. Прямо перед строкой с ошибкой «Неправильный формат сообщения» обязательно будет зафиксировано реальное исключение базы данных (например: «Дублирование ключевых значений в регистре...» или «Поле объекта не обнаружено...»). Это укажет на конкретный проблемный объект.
  2. Включение остановки по ошибке в Конфигураторе: Запустите подчиненную базу в режиме отладки из Конфигуратора. Перейдите в меню Отладка -> Настройка отладки -> Остановка по ошибке. Добавьте остановку по всем исключениям (обязательно снимите флажок «Исключать сетевые ошибки»). Запустите обмен. Конфигуратор остановит выполнение кода именно на той строчке (часто внутри модулей ваших новых добавленных документов), которая вызывает сбой при записи.
  3. Обновление справочника «Идентификаторы объектов метаданных»: Если вы добавили новые документы или регистры в конфигурацию, но не обновили этот справочник, БСП не сможет сопоставить типы данных при чтении XML. Перед созданием РИБ выполните обновление этого справочника. В БСП для этого используется запуск базы из командной строки с параметром: /ЗапуститьОбновлениеИнформационнойБазы.
  4. Проверка версий платформы: Убедитесь, что на сервере/компьютере центральной базы и на узле подчиненной базы установлена абсолютно одинаковая версия платформы «1С:Предприятие». Разница в релизах может приводить к различиям в сериализации XML, что действительно вызовет ошибку формата.

---

Правильная интеграция нового плана обмена в экосистему БСП

Если вы создаете собственный план обмена «с нуля» в доработанной конфигурации, просто установить галочку «РИБ» в свойствах объекта в Конфигураторе недостаточно. БСП должна «узнать» о существовании нового плана обмена. Для этого выполните следующие действия:

Шаг 1. Регистрация плана обмена в переопределяемом модуле

Найдите в конфигурации общий модуль ОбменДаннымиПереопределяемый и добавьте ваш план обмена в список разрешенных в процедуре ПолучитьПланыОбмена:


Процедура ПолучитьПланыОбмена(ПланыОбменаПодсистемы) Экспорт
    ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.ИмяВашегоНовогоПланаОбмена);
КонецПроцедуры

Шаг 2. Настройка свойств в модуле менеджера плана обмена

Откройте модуль менеджера вашего нового плана обмена и добавьте экспортную процедуру ПриПолученииНастроек, чтобы БСП понимала, как работать с этим обменом:


Процедура ПриПолученииНастроек(НастройкиПланаОбмена) Экспорт
    НастройкиПланаОбмена.ЭтотПланОбменаРИБ = Истина;
    НастройкиПланаОбмена.ИспользоватьРегистрСоответствияАдресовНод = Ложь;
КонецПроцедуры

Шаг 3. Состав плана обмена

Вкладка «Состав» вашего плана обмена должна включать не только ваши новые документы, но и ключевые служебные регистры БСП (например, регистр сведений СоответствияОбъектовИнформационныхБаз), иначе механизмы сопоставления объектов будут работать некорректно.

---

Альтернативный метод: Создание подчиненного узла через копирование базы (метод УстановитьГлавныйУзел)

Если штатный механизм создания начального образа упорно выдает ошибки, а сроки поджимают, можно воспользоваться проверенным инженерным методом: развернуть подчиненный узел из полной копии центральной базы, а затем программно переназначить роли узлов. Этот метод гарантирует 100% идентичность конфигураций и данных на момент старта.

Рассмотрим этот процесс подробно по шагам.

Шаг 1. Создание узлов в Центральной базе (ЦБ)

В центральной базе зайдите в ваш план обмена и создайте два узла:

Убедитесь, что номера отправленных и принятых сообщений для обоих узлов равны 0.

Шаг 2. Создание копии базы данных

Сделайте полную копию центральной информационной базы (через выгрузку файла .dt или копированием файла 1Cv8.1CD для файловых баз). Разверните эту копию на целевом компьютере или сервере периферийного узла.

Шаг 3. Программная установка главного узла в копии

Запустите копию базы в режиме «1С:Предприятие». Нам необходимо программно сообщить этой базе, что она теперь не главная, а подчиненная по отношению к центральной базе "ЦБ".

Для этого откройте внешнюю обработку (или создайте групповую обработку через функции для технического специалиста) и выполните следующий код:


// Указываем для текущей базы, кто является ее главным узлом
ГлавныйУзел = ПланыОбмена.ИмяВашегоНовогоПланаОбмена.НайтиПоКоду("ЦБ");
Если ЗначениеЗаполнено(ГлавныйУзел) Тогда
    ПланыОбмена.УстановитьГлавныйУзел(ГлавныйУзел);
    Сообщить("Главный узел успешно установлен!");
Иначе
    Сообщить("Не удалось найти узел с кодом ЦБ!");
КонецЕсли;

После выполнения этого кода заголовок окна программы изменится — в скобках появится название вашего главного узла, а база перейдет в режим подчиненного узла РИБ.

Шаг 4. Настройка транспорта и очистка регистрации изменений

Поскольку мы скопировали базу целиком, в подчиненном узле остались «лишние» настройки. Выполним финальную очистку:

  1. В подчиненном узле зайдите в настройки синхронизации данных. Замените пути к каталогам обмена на актуальные для этого узла.
  2. Критически важно! В подчиненной базе зарегистрированы изменения объектов для других узлов, которые были актуальны в ЦБ на момент копирования. Чтобы избежать зацикливания обмена и отправки в центральную базу сотен тысяч ненужных транзакций, запустите обработку «Регистрация изменений для обмена данными» и полностью удалите (очистите) все зарегистрированные изменения для всех узлов в подчиненной базе.

Теперь базы готовы к полноценному обмену. Этот метод позволяет запустить РИБ за считанные минуты даже на базах объемом в сотни гигабайт, полностью обходя долгий и нестабильный процесс генерации начального образа платформой.

← На главную