Штатный механизм создания начального образа распределенной информационной базы (РИБ) в 1С:Предприятии выполняет полную последовательную выгрузку данных и структуры конфигурации в новый файл базы данных. На больших объемах информации или слабом оборудовании этот процесс может занимать много часов. Разберем альтернативный и значительно более быстрый способ — создание подчиненного узла напрямую из резервной копии центральной базы.
Проанализируем причины низкой скорости формирования начального образа:
.1CD. На стандартных жестких дисках (HDD) скорость упирается в дисковые операции ввода-вывода.Разберем по шагам, как превратить полную копию центральной информационной базы в работоспособный периферийный узел РИБ.
Создадим копию центральной базы данных и развернем ее в новой папке или на сервере периферийного узла. Важно: перед первым запуском базы-копии обязательно заблокируем выполнение регламентных и фоновых заданий (с помощью ключа запуска /ЗаблокироватьРаботуСВнешнимиРесурсами или через консоль кластера серверов 1С). Это предотвратит отправку ошибочных писем, запуск фоновых обменов и обращение к внешним сервисам из базы-клона.
Чтобы подчиненная база не пыталась выгрузить всю историю центральной базы обратно как новые данные, необходимо полностью очистить регистрацию изменений для всех узлов, а также сбросить номера сообщений обмена в обеих базах.
Посмотрим на пример программного кода для очистки регистрации и сброса счетчиков во внешней обработке:
План = ПланыОбмена.РИБПоМагазину; // Указываем используемый план обмена
Выборка = План.Выбрать();
Пока Выборка.Следующий() Цикл
УзелОбъект = Выборка.ПолучитьОбъект();
// Очищаем регистрацию изменений для узла
ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбъект.Ссылка);
// Обнуляем номера отправленных и принятых сообщений
УзелОбъект.НомерОтправленного = 0;
УзелОбъект.НомерПринятого = 0;
УзелОбъект.Записать();
КонецЦикла;
Аналогично в центральной базе для этого конкретного периферийного узла также необходимо обнулить счетчики НомерОтправленного и НомерПринятого, установив их в 0.
В центральной базе значение главного узла равно Неопределено. В новой периферийной базе нам необходимо явно указать, какой узел является главным, а также переназначить предопределенный элемент ЭтотУзел.
Выполним назначение главного узла и «зеркальную» смену кодов и наименований узлов:
// 1. Получаем ссылки на узлы
УзелЦентр = ПланыОбмена.РИБПоМагазину.НайтиПоКоду("ЦБ");
УзелМагазин = ПланыОбмена.РИБПоМагазину.НайтиПоКоду("М01");
// 2. Назначаем центральный узел главным для текущей базы
ПланыОбмена.УстановитьГлавныйУзел(УзелЦентр);
// 3. Зеркально меняем коды и наименования предопределенного и подчиненного узлов
// Предопределенный узел (ЭтотУзел) теперь должен представлять магазин
ЭтотУзелОбъект = ПланыОбмена.РИБПоМагазину.ЭтотУзел().ПолучитьОбъект();
ЭтотУзелОбъект.Код = "М01";
ЭтотУзелОбъект.Наименование = "Магазин №1";
ЭтотУзелОбъект.Записать();
// Второй узел теперь представляет центральный узел
УзелЦентрОбъект = УзелЦентр.ПолучитьОбъект();
УзелЦентрОбъект.Код = "ЦБ";
УзелЦентрОбъект.Наименование = "Центральная база";
УзелЦентрОбъект.Записать();
Поскольку 1С:Розница 2.2 разработана на базе Библиотеки стандартных подсистем (БСП), одного переключения узлов плана обмена на уровне платформы недостаточно. Разберем дополнительные параметры, которые необходимо скорректировать в интерфейсе и константах:
ПрефиксИнформационнойБазы (или ПрефиксУзла) на префикс, соответствующий данному периферийному узлу (например, М1), чтобы новые документы на узле нумеровались корректно.Рассмотрим важные нюансы, о которых следует помнить при создании узла из копии: