Развертывание распределенных информационных баз (РИБ) — это проверенный и надежный способ масштабирования систем на платформе 1С:Предприятие 8.3. Однако при использовании РИБ с фильтрами (например, с отбором по конкретной организации, складу или подразделению) администраторы и разработчики часто сталкиваются с неочевидными системными сбоями. Одна из самых распространенных и неприятных проблем в конфигурациях на базе Библиотеки стандартных подсистем (БСП), таких как Управление торговлей 11.4, — это сбой инициализации справочника Идентификаторы объектов метаданных при первом запуске нового подчиненного узла.
В этой статье мы подробно разберем причины возникновения этой ошибки, рассмотрим пошаговые инструкции по ее устранению, проанализируем сопутствующие проблемы (например, ошибку «Нельзя организовать обмен данными с текущим узлом») и изучим практический лайфхак по быстрой генерации отфильтрованного узла в обход стандартного, медленного механизма создания начального образа.
При первом запуске нового подчиненного узла система выполняет базовые процедуры инициализации и сопоставляет реальную структуру конфигурации с записями в справочнике Идентификаторы объектов метаданных. Если это сопоставление завершается ошибкой, запуск аварийно блокируется, и платформа выдает критическое исключение в модуле менеджера регистра сведений ПараметрыРаботыПрограммы.
Проанализируем три главные причины, почему это происходит именно в РИБ с фильтрами:
Идентификаторы объектов метаданных или связанные записи регистра сведений Параметры работы программы не попадают под жесткие критерии отбора, подчиненный узел создается «пустым» в части критически важной системной информации.Самый правильный и безопасный путь решения проблемы — это подготовка корректных данных в центральной базе перед созданием начального образа. Разберем по шагам, какие действия необходимо выполнить в главном узле:
/C ЗапуститьОбновлениеИнформационнойБазы.
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина, Истина);
Истина, Истина указывают системе на необходимость полной перезаписи всех существующих элементов справочника и очистки устаревших записей, включая данные подключенных расширений.
Идентификаторы объектов метаданных и зарегистрируем абсолютно все его элементы для выгрузки в данный узел. Только после этого запустим создание начального образа заново.Если начальный образ уже создан, а тратить время на повторную генерацию (которая в крупных базах с фильтрами может занимать до нескольких десятков часов) нет возможности, можно применить обходной маневр. Мы можем временно «отвязать» подчиненную базу от главного узла, провести в ней все необходимые технические процедуры и «привязать» обратно.
Рассмотрим этот алгоритм детально:
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
УзелГлавногоОфиса = ПланыОбмена.НайтиПоКоду("КодГлавногоУзла");
Если ЗначениеЗаполнено(УзелГлавногоОфиса) Тогда
ПланыОбмена.УстановитьГлавныйУзел(УзелГлавногоОфиса);
КонецЕсли;
Часто после ручного отключения и обратного подключения подчиненного узла (как описано в Способе 2) администраторы сталкиваются со следующей ошибкой: Нельзя организовать обмен данными с текущим узлом информационной базы. Выясним причину этой неполадки.
Эта ошибка указывает на то, что в подчиненной базе сбилась идентификация «Этого узла» и «Главного узла» в плане обмена. Каждый узел РИБ должен четко понимать свою роль: узел, в котором мы находимся, должен быть помечен как «Этот узел» (зеленый кружок или специальный значок в списке), а узел центрального офиса должен быть обычным элементом списка с соответствующим кодом. Если при ручной привязке коды узлов были перепутаны, стерты или задвоены, система попытается выполнить обмен «сама с собой», что заблокирует процесс.
Выполним следующие шаги для исправления ситуации:
Создание начального образа для крупных баз УТ 11.4 с установленными фильтрами — это крайне ресурсоемкий процесс. База данных вынуждена «на лету» рассчитывать правила регистрации для миллионов строк документов и регистров, что часто приводит к зависаниям или ошибкам СУБД.
Рассмотрим альтернативный, значительно более быстрый метод развертывания подчиненного узла:
УзелЦентра = ПланыОбмена.НайтиПоКоду("ЦБ"); // укажите код вашего главного узла
Если ЗначениеЗаполнено(УзелЦентра) Тогда
ПланыОбмена.УстановитьГлавныйУзел(УзелЦентра);
КонецЕсли;
Идентификаторы объектов метаданных в ней гарантированно заполнен и на 100% совпадает с главным узлом!Применяя описанные методики, мы сможем оперативно решать любые сложные ситуации, возникающие при администрировании и программировании распределенных информационных систем на платформе 1С:Предприятие 8.3.