Настройка распределенных информационных баз (РИБ) — одна из ключевых задач администратора при создании распределенной ИТ-инфраструктуры на предприятии. Однако в процессе эксплуатации пользователи и разработчики часто сталкиваются с техническими сложностями: от тривиального вопроса «где искать параметры синхронизации» до критических ошибок, связанных с рассинхронизацией уникальных идентификаторов (UUID) баз данных. В этой статье мы подробно рассмотрим структуру РИБ в современных решениях на платформе 1С:Предприятие 8.3, разберем причины возникновения ошибок UUID и изучим практические методы их устранения.
В современных типовых конфигурациях 1С (таких как «Бухгалтерия предприятия», «Управление торговлей», «Зарплата и управление персоналом» и др.), разработанных на базе Библиотеки стандартных подсистем (БСП), все механизмы обмена данными унифицированы. Чтобы найти настройки РИБ, выполним следующие шаги:
Именно здесь хранятся настройки транспорта обмена (через локальный каталог, FTP, электронную почту или веб-службу), расписание автоматического запуска синхронизации и правила фильтрации выгружаемых данных.
Иногда при попытке выполнить обмен система блокирует процесс и выводит сообщение, содержащее непонятный набор символов (UUID) и указание на несоответствие идентификатора базы. Давайте разберем природу этого явления.
Каждая информационная база 1С имеет свой уникальный системный идентификатор (UUID). За его хранение отвечает специальная константа ИдентификаторИнформационнойБазы. В штатном режиме работы в центральной базе (ЦБ) и в подчиненном узле (ПБ) значения этой константы должны быть строго уникальными и различаться между собой. Это позволяет механизмам БСП корректно определять, «кто есть кто» в цепочке обменов.
Проблема возникает из-за двух основных причин:
ИдентификаторИнформационнойБазы в состав плана обмена. В результате первого же сеанса синхронизации значение UUID из центральной базы отправляется в подчиненную и перезаписывает её локальный уникальный идентификатор. Базы становятся «двойниками» с идентичными UUID, из-за чего механизмы БСП блокируют дальнейший обмен.Если мы диагностировали рассинхронизацию UUID, первым делом необходимо исключить константу ИдентификаторИнформационнойБазы из состава плана обмена в конфигураторе центральной базы, чтобы предотвратить повторение проблемы в будущем. После этого в подчиненной базе нужно программно задать новый уникальный идентификатор.
Для программного решения проблемы в подчиненной базе мы можем написать и выполнить простую обработку, запускающую генерацию нового идентификатора:
// Программная генерация и запись нового уникального идентификатора базы
НовыйИдентификатор = Новый УникальныйИдентификатор();
Константы.ИдентификаторИнформационнойБазы.Установить(НовыйИдентификатор);
ЗаписатьРегистрационныеДанныеИБ(); // служебная процедура БСП для обновления параметров связи
После выполнения данного кода база получит новый уникальный UUID, отличный от центральной базы, что позволит снять блокировку обмена со стороны БСП.
Если автоматическая синхронизация продолжает передавать нежелательные параметры, проанализируем правила регистрации объектов (ПРО). Для этого нам понадобится специализированная база 1С:Конвертация данных 2. Выполним следующие шаги:
ИдентификаторИнформационнойБазы.
// Отказ от автоматической регистрации изменений константы в узлах РИБ
Отказ = Истина;
Если проблема вызвана простым копированием или переносом базы данных, БСП выдает предупреждение при запуске. Чтобы возобновить обмен, нам не нужно писать код. Достаточно отреагировать на стандартное диалоговое окно системы:
В случаях, когда конфигурации баз сильно разошлись, или база оказалась заблокирована критической ошибкой, мешающей штатному обмену, мы можем прибегнуть к полной "отвязке" подчиненной базы от главного узла.
Рассмотрим эту процедуру по шагам:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F "C:\Put_k_baze" /ResetMasterNode
После этого база откроется как абсолютно автономная (не подчиненная РИБ). Мы сможем беспрепятственно зайти в конфигуратор, обновить конфигурацию БД напрямую из файла конфигурации центральной базы (.cf) для устранения расхождений.
Затем нам необходимо вернуть базу обратно в состав РИБ. Для этого программно назначим главный узел обратно, выполнив следующий код во внешней обработке:
// Устанавливаем связь с главным узлом заново
СсылкаНаГлавныйУзел = ПланыОбмена.НайтиПоКоду("ЦБ"); // укажите код вашего главного узла
Если НЕ СсылкаНаГлавныйУзел.Пустая() Тогда
ПланыОбмена.УстановитьГлавныйУзел(СсылкаНаГлавныйУзел);
КонецЕсли;
Иногда в обсуждениях на форумах проскальзывает упоминание старой платформы 1С 7.7 (так называемых «клюшек») и конфигурации «Зарплата и Кадры 7.7» (ЗиК). Стоит отметить, что в 1С 7.7 аналог РИБ назывался УРБД (Управление распределенными информационными базами) и поставлялся как отдельная дорогостоящая компонента.
При этом в типовой конфигурации ЗиК 7.7 поддержка УРБД изначально отсутствовала. Специфика расчета заработной платы, требующая строгой монопольной последовательности проведения документов и блокировок таблиц базы данных, делала автоматический распределенный обмен крайне сложным в реализации. Для переноса данных в ЗиК 7.7 использовались специализированные внешние обработки выгрузки/загрузки данных через XML или текстовые файлы, а не полноценный автоматический обмен конфигурацией и метаданными.