Каждый специалист, работающий с распределенными информационными базами (РИБ) в среде «1С:Предприятие 8.3», рано или поздно сталкивается с ситуацией, когда штатный механизм обновления конфигурации дает сбой. Сценарий обычно выглядит следующим образом: в центральной базе (ЦБ) успешно обновляется конфигурация (например, выполняется переход на новый релиз конфигурации Управление торговлей 11). Запускается синхронизация, но изменения конфигурации долетают только до одного узла — как правило, до того, который первым выполнил обмен. Остальные три, четыре или более периферийных узлов (ПБ) продолжают обмениваться только данными, а сама конфигурация на них упорно отказывается обновляться.
В этой статье мы подробно проанализируем причины возникновения этой проблемы, разберем особенности поведения платформы на различных релизах и рассмотрим несколько надежных практических способов ее решения.
Многие администраторы ошибочно полагают, что проблема кроется в зависших сеансах или открытом Конфигураторе в подчиненных базах. Однако, если Конфигуратор в подчиненном узле закрыт, а изменения все равно не регистрируются, дело в ошибке самой платформы 1С.
Рассмотрим детально внутренний механизм работы РИБ при обновлении конфигурации. Когда в центральной базе применяется обновление базы данных (клавиша F7), платформа автоматически регистрирует изменения основной конфигурации для всех узлов, входящих в соответствующий план обмена. При формировании первого же исходящего сообщения для конкретного подчиненного узла измененная конфигурация упаковывается в файл обмена.
Однако в линейках платформ 8.3.13 и 8.3.14 (включая популярный релиз 8.3.14.1565) присутствует критическая ошибка механизма регистрации изменений. Связана она с интеграцией поддержки расширений и патчей в распределенные базы:
Если мы столкнулись с ситуацией, когда конфигурация на подчиненных узлах уже «потерялась», самым простым и быстрым способом заставить платформу вспомнить о необходимости обновления является внесение фиктивного изменения в центральной базе. Давайте разберем этот процесс по шагам:
ОбщегоНазначенияУТ) или модуль менеджера какого-либо справочника и добавить в конец любого метода обычный пробел или пустую строку комментария.F7 (или меню «Конфигурация» — «Обновить конфигурацию базы данных»).Чтобы избежать этой проблемы при плановых крупных обновлениях (например, при переходе на новые релизы 1С:Управление торговлей), мы рекомендуем использовать регламентированную методику обновления РИБ с блокировкой входящего потока данных. Это гарантирует, что ни один периферийный узел не сможет «сбить» регистрацию изменений до того, как все исходящие пакеты будут сформированы.
Разберем алгоритм действий по шагам:
РегламентныеЗадания или в режиме «1С:Предприятие» в разделе администрирования./In/ в /In_temp/), чтобы ЦБ просто не находила новые файлы.Поскольку данная проблема признана официальным багом платформы 1С, наиболее правильным долгосрочным решением является обновление технологической платформы. В ветках 8.3.21, 8.3.22 и более современных версиях алгоритмы работы с кэшем метаданных и распределенными базами данных были кардинально переработаны. Ошибки автоматического затирания регистрации конфигурации при входящем обмене в них исправлены. Если у вас есть возможность, запланируйте обновление платформы на всех серверах и рабочих станциях вашей сети.
Что делать, если подчиненный узел окончательно застрял, выдает критические ошибки несоответствия версий метаданных, а стандартный обмен не может восстановить работоспособность? В этом случае нам поможет ручной перенос конфигурации с использованием временного отключения подчиненного узла от главного.
Давайте разберем эту процедуру по шагам:
.cf, например, base_update.cf).
"C:\Program Files\1cv8\8.3.14.1565\bin\1cv8.exe" config /F "ПутьКВашейБазе" /ResetMasterNode /N "Администратор" /P "Пароль"
base_update.cf).F7.
СсылкаНаГлавныйУзел = ПланыОбмена.ПоПодразделениям.НайтиПоКоду("ЦБ");
Если ЗначениеЗаполнено(СсылкаНаГлавныйУзел) Тогда
ПланыОбмена.УстановитьГлавныйУзел(СсылкаНаГлавныйУзел);
ВызватьИсключение "Связь с главным узлом РИБ успешно восстановлена!";
Иначе
Сообщить("Не удалось найти главный узел по указанному коду!");
КонецЕсли;
Используя предложенные методики, мы сможем легко диагностировать и устранять любые зависания обновлений конфигурации в распределенных базах 1С, обеспечивая бесперебойную работу всех удаленных подразделений вашего предприятия.