При работе с распределенными информационными базами (РИБ) в среде 1С:Предприятие специалисты иногда сталкиваются с крайне неприятной и неочевидной ситуацией. Администратор вносит изменения в конфигурацию главного узла (ЦБ), выполняет обмен с подчиненными узлами, но изменения метаданных успешно приходят только в одну из периферийных баз. Во всех остальных подчиненных узлах обмен завершается успешно и без ошибок, однако сама конфигурация не обновляется, а файлы обмена для них формируются без обновленных метаданных.
В этой статье мы подробно разберем, почему возникает такое поведение, проанализируем его причины, связанные с особенностями платформы, и рассмотрим все доступные способы решения — от простых административных действий до тонких технических «хаков».
Описанное поведение не является следствием неправильных действий пользователя или архитектурной ошибки в самой конфигурации (например, в «1С:Бухгалтерия 3.0»). Это известная системная ошибка платформы 1С:Предприятие, которая наиболее остро проявилась в версиях ветки 8.3.13 (в частности, в релизах 8.3.13.1513, 8.3.13.1690) и некоторых сборках 8.3.14.
Суть ошибки заключается в сбое механизма регистрации изменений метаданных для распределенных баз:
Давайте рассмотрим пошаговые сценарии борьбы с этой проблемой и разберем, как восстановить работоспособность РИБ.
Поскольку проблема носит чисто платформенный характер, самым надежным и правильным решением будет изменение используемой версии платформы 1С:Предприятие.
Проанализируем наши действия в зависимости от инфраструктуры:
8.3.12.1714. В этой ветке механизм обмена РИБ работает без сбоев.8.3.18, 8.3.20 и старше), где этот критический баг был официально исправлен разработчиками фирмы «1С».После установки новой версии платформы на сервере и клиентах рекомендуется очистить кэш серверов приложений и локальный кэш пользователей во избежание сохранения неверных статусов обмена.
Если у вас нет возможности оперативно обновить или откатить платформу на всех серверах и рабочих станциях (например, из-за жестких регламентов или ограничений со стороны ИТ-отдела), можно прибегнуть к хитрости, которая заставит платформу принудительно перерегистрировать изменения для всех узлов.
Опытным путем установлено, что если изменять только программный код (модули документов, общие модули или формы), платформа часто «пропускает» регистрацию для последующих узлов. Но если внести изменение в структуру данных базы, алгоритм отработает иначе.
Выполним следующие действия в главном узле:
ФиктивнаяКонстантаДляРИБ с типом Булево или реквизит в какой-нибудь малоиспользуемый справочник).В процессе устранения неполадок часто возникает необходимость временно «отвязать» подчиненный узел от главного, чтобы обновить конфигурацию периферийной базы вручную (через файл конфигурации .cf), а затем вернуть её обратно в состав РИБ.
Автор темы столкнулся с проблемой: выполнение программного кода в режиме «1С:Предприятие» не привело к желаемому результату — замок на редактирование конфигурации в подчиненном узле не снялся:
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
Это происходит потому, что программный сброс ссылки на главный узел очищает признак подчиненности только в таблицах данных, но конфигуратор продолжает кэшировать монопольный статус заблокированной конфигурации поддержки.
Давайте разберем правильный и гарантированный способ отвязки узла с помощью параметров командной строки:
/ResetMasterNode. В зависимости от типа базы данных команда будет выглядеть следующим образом:Для файловой информационной базы:
"C:\Program Files\1cv8\8.3.13.1513\bin\1cv8.exe" CONFIG /F "C:\ПутьКВашейБазе" /ResetMasterNode /N "ИмяАдминистратора" /P "Пароль"
Для клиент-серверной базы данных:
"C:\Program Files\1cv8\8.3.13.1513\bin\1cv8.exe" CONFIG /S "ИмяСервера\ИмяБазы" /ResetMasterNode /N "ИмяАдминистратора" /P "Пароль"
После выполнения этой команды запустим конфигуратор подчиненной базы в обычном режиме. Мы увидим, что «замочек» с конфигурации пропал, и теперь мы можем беспрепятственно обновить ее, выгрузив предварительно файл 1cv8.cf из главного узла и загрузив его в подчиненный через меню Конфигурация — Сравнить, объединить с конфигурацией из файла или полную замену через Загрузить конфигурацию из файла.
Для того чтобы вернуть базу обратно в режим РИБ после обновления, запустим в режиме «1С:Предприятие» обработку со следующим кодом:
// Укажем ссылку на узел, который является главным для нашей базы
СсылкаНаГлавныйУзел = ПланыОбмена.ПоОрганизации.НайтиПоКоду("ЦБ"); // укажите ваш код главного узла
ПланыОбмена.УстановитьГлавныйУзел(СсылкаНаГлавныйУзел);
Рассмотрим еще один продвинутый метод, который позволяет обойти ошибку несоответствия конфигураций без полной перезаливки базы или ее пересоздания. Этот способ применяется, когда конфигурация в подчиненном узле фактически совпадает с главной (или вы обновили ее вручную через CF-файл), но платформа отказывается принимать файлы обмена, выдавая ошибку несоответствия версий.
При обмене платформа проверяет уникальные хэши конфигураций (Digest), которые прописываются в заголовке XML-файла обмена. Если они не совпадают с ожидаемыми, загрузка блокируется.
Давайте разберем, как скорректировать XML-файл обмена вручную:
Message_ПУ_ЦБ.xml). Этот файл будет содержать актуальные для периферийной базы значения Digest.<v8de:Config>:
<v8de:Config xmlns:v8de="http://v8.1c.ru/8.1/data/enterprise/current-config">
<v8de:Digest1>00000000000000000000000000000000</v8de:Digest1>
<v8de:Digest2>a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6</v8de:Digest2>
</v8de:Config>
<v8de:Digest2> подчиненного узла.Message_ЦБ_ПУ.xml).<v8de:Config> и заменим значение его тега <v8de:Digest2> на то значение, которое мы скопировали на шаге 3 из файла подчиненной базы.Благодаря этой подмене платформа решит, что конфигурации идентичны, и успешно примет все накопленные данные документов и справочников, восстановив обмен без прерывания бизнес-процессов.
Интересный практический опыт предложил автор исходного обсуждения на форуме. Выяснилось, что баг платформы 8.3.13 по-разному проявляет себя в клиент-серверном и файловом вариантах работы.
Если временно перевести базу Главного узла из клиент-серверного режима (например, под управлением PostgreSQL или MS SQL) в файловый режим работы, то выгрузка изменений конфигурации начинает корректно регистрироваться и отправляться во все без исключения периферийные базы.
Для реализации этого метода:
.dt).Мы рассмотрели все основные пути обхода и исправления критического сбоя платформы при работе с РИБ. Выберите наиболее подходящий для вашей инфраструктуры метод и помните, что своевременное обновление платформы до рекомендованных и стабильных релизов сводит вероятность возникновения подобных коллизий к минимуму.