К статье
Практический материал

Администрирование · 9 мин

Как снять признак распределенной базы 1С

Как снять признак распределенной информационной базы в 1С: сброс главного узла, обработки, очистка планов обмена и проверка результата.

Признак распределенной информационной базы (УРБД, а в современных конфигурациях — механизм планов обмена и РИБ) появляется, когда база участвует в обмене данными как главный или подчиненный узел. После отказа от обмена, переноса базы или восстановления из копии этот признак часто мешает: база требует регистрации изменений, отказывается работать как самостоятельная, а при загрузке выгрузки выдает сообщение «Из распределенной информационной базы нельзя загрузить данные в обычную».

Снять признак можно несколькими способами: штатным сбросом главного узла, универсальной обработкой, а в крайнем случае — правкой служебных таблиц в файловой копии. Выбор зависит от того, есть ли у вас доступ к конфигуратору, какая версия платформы используется и нужно ли сохранить настройки обмена.

Ниже разобраны все рабочие методы с условиями применения, рисками и проверкой результата. Перед любыми действиями сделайте резервную копию базы — это единственный способ откатиться, если что-то пойдет не так.

Как понять, что база имеет признак распределенной

Перед снятием признака убедитесь, что проблема именно в нем. Типичные симптомы: при загрузке файла выгрузки (.dt) появляется ошибка о невозможности загрузки в распределенную базу; при попытке изменить конфигурацию система сообщает, что база является подчиненным узлом; в журнале регистрации видны ошибки обмена с несуществующим главным узлом.

Проверить статус программно можно одной строкой в консоли кода или через «Выполнить произвольное выражение» (Ctrl+Shift+F9 в толстом клиенте):

1c
Сообщить(ПланыОбмена.ГлавныйУзел());

Если выражение возвращает ссылку на узел плана обмена — база является подчиненным узлом распределенной базы. Если возвращает Неопределено, но обмены все равно настроены, значит база — главный узел, и признак «распределенности» снимается иначе (через удаление узлов обмена).

Подготовка: резервная копия и анализ обменов

Обязательный первый шаг — выгрузка базы через конфигуратор (Администрирование → Выгрузить информационную базу) или копирование файла 1Cv8.1CD для файлового варианта. Для серверной базы сделайте выгрузку средствами СУБД или .dt. Без копии откат после снятия признака невозможен, а данные регистрации изменений будут удалены безвозвратно.

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

Способ 1. Сброс главного узла штатными средствами

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

1c
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);

После выполнения база перестает считаться подчиненным узлом: снимается блокировка на загрузку данных и изменение конфигурации. Сами планы обмена и узлы при этом не удаляются — их можно почистить отдельно, если обмен больше не нужен.

Если база — главный узел (ГлавныйУзел() возвращает Неопределено, но обмены настроены), достаточно удалить или пометить на удаление все узлы планов обмена, кроме предопределенного «Этот узел». После этого база фактически становится автономной.

Порядок действий при сбросе главного узла
  1. 1
    Сделайте выгрузку .dt или копию файла базы
  2. 2
    Откройте базу в режиме предприятия под полными правами
  3. 3
    Выполните код ПланыОбмена.УстановитьГлавныйУзел(Неопределено)
  4. 4
    Проверьте, что ПланыОбмена.ГлавныйУзел() возвращает Неопределено
  5. 5
    Удалите лишние узлы планов обмена и очистите регистрацию изменений

Способ 2. Внешние обработки для снятия признака

Если нет возможности запустить консоль кода (тонкий клиент, ограниченные права), используют готовые внешние обработки (.epf) сброса главного узла — их легко найти на профильных ресурсах по запросу «сброс главного узла РИБ». Обработка открывается через Файл → Открыть и выполняет тот же вызов УстановитьГлавныйУзел(Неопределено), иногда с дополнительной очисткой регистрации изменений.

Проверяйте обработку перед запуском: откройте ее модуль в конфигураторе и убедитесь, что она делает именно сброс узла, а не удаление данных. Сторонние обработки из непроверенных источников могут содержать произвольный код с полными правами.

Способ 3. Правка файловой базы через tool_1cd

Крайний вариант — когда база не открывается ни в предприятии, ни в конфигураторе, либо пароль администратора утерян. Для файловых баз существует утилита tool_1cd, которая читает формат 1Cv8.1CD напрямую и позволяет редактировать служебные таблицы.

Признак главного узла хранится в служебных таблицах (исторически — в таблицах вида _SystemSettings/DBSchema и связанных записях планов обмена). Методика: экспортировать нужную таблицу в XML, найти и удалить записи, ссылающиеся на главный узел, затем импортировать таблицу обратно. Точный состав таблиц зависит от версии платформы, поэтому работайте по актуальной документации к утилите.

Этот способ не поддерживается вендором и при ошибке может повредить файл базы. Работайте только с копией файла, никогда — с оригиналом. Для клиент-серверных баз прямая правка таблиц СУБД еще опаснее и на практике почти не оправдана.

Очистка регистрации изменений после снятия признака

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

Очистка выполняется программно: для каждого узла вызывается ПланыОбмена.УдалитьРегистрациюИзменений(Узел) либо узел удаляется целиком — регистрация при этом очищается автоматически. После удаления узлов имеет смысл выполнить тестирование и исправление с включенной реструктуризацией и сжатием таблиц (для файловой базы), чтобы физически уменьшить файл.

1c
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ ПланОбмена.Полный ГДЕ НЕ ЭтотУзел");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    ПланыОбмена.УдалитьРегистрациюИзменений(Выборка.Ссылка);
КонецЦикла;

Проверка результата и типичные ошибки

После снятия признака проверьте три вещи: ГлавныйУзел() возвращает Неопределено; база без ошибок загружается из .dt в пустую базу (именно эта операция раньше блокировалась); конфигуратор позволяет обновить конфигурацию базы без сообщений о подчиненном узле.

Контрольные точки

Как проверить результат

ПланыОбмена.ГлавныйУзел()
Норма

Возвращает Неопределено

Тревожный признак

Возвращает ссылку на узел — признак не снят

Загрузка .dt в пустую базу
Норма

Загрузка проходит без ошибок

Тревожный признак

Ошибка «из распределенной базы нельзя загрузить»

Список узлов планов обмена
Норма

Остался только предопределенный узел «Этот узел»

Тревожный признак

Активные узлы с зарегистрированными изменениями

Типичные ошибки
01
Снятие признака без резервной копии — при сбое откат невозможен
02
Сброс главного узла в действующем обмене — разрыв РИБ и потеря непереданных данных
03
Удаление планов обмена из конфигурации вместо сброса узла — конфигурация перестает совпадать с типовой
04
Правка 1Cv8.1CD на оригинальном файле — риск необратимого повреждения базы
05
Забытая регистрация изменений — база продолжает расти и тормозить после снятия признака

Частые вопросы

Чем отличается снятие признака УРБД от отключения обмена в РИБ?

УРБД — старый механизм распределенных баз платформы 7.7 и ранних версий 8.x; в современных конфигурациях используется РИБ на планах обмена. В обоих случаях снятие признака сводится к отвязке базы от главного узла, но в РИБ дополнительно нужно чистить узлы и регистрацию изменений.

Можно ли снять признак без конфигуратора и без полных прав?

Нет, штатные способы требуют полных прав в режиме предприятия. Если прав нет, обратитесь к администратору базы. Обход через правку файла 1Cv8.1CD возможен, но это аварийный метод с риском повреждения данных.

Что делать с ошибкой «Из распределенной базы нельзя загрузить данные»?

Она означает, что база, из которой сделана выгрузка, является подчиненным узлом. Снимите признак в исходной базе через УстановитьГлавныйУзел(Неопределено), затем повторите выгрузку — после этого .dt загрузится в обычную базу.

Потеряются ли данные при сбросе главного узла?

Сами прикладные данные (документы, справочники) не удаляются. Теряется только служебная информация об обмене: связь с главным узлом и, при очистке, зарегистрированные к отправке изменения.

Нужно ли снимать признак, если база просто переезжает на другой сервер?

Нет. Перенос файловой базы копированием или развертывание .dt на новом сервере сохраняет структуру обмена, и РИБ продолжит работать. Снимать признак нужно только при отказе от обмена или превращении копии в самостоятельную базу.

Как сделать из подчиненного узла самостоятельную рабочую базу?

Разверните копию узла, сбросьте главный узел через УстановитьГлавныйУзел(Неопределено), удалите лишние узлы планов обмена, очистите регистрацию изменений и выполните тестирование и исправление. После этого база работает автономно.

Итог

Что важно запомнить

Снятие признака распределенной базы сводится к сбросу главного узла командой ПланыОбмена.УстановитьГлавныйУзел(Неопределено) с последующей очисткой узлов и регистрации изменений. Всегда начинайте с резервной копии, а прямую правку файла базы оставляйте как последний вариант на случай, когда штатные средства недоступны.