При сопровождении распределенных информационных баз (РИБ) с высокой интенсивностью документооборота возникает типовая сложность: при обновлении конфигурации в центральном узле стандартный сеанс обмена включает в один файл как изменения метаданных, так и накопившиеся изменения данных. Если информационная база объемная, а обмены выполняются редко, формирование и передача такого файла могут занимать длительное время, парализуя работу пользователей из-за блокировок.
Разберем основные практические подходы, позволяющие оперативно передать конфигурацию в подчиненный узел без мучительного ожидания передачи гигабайтов информации.
Проанализируем типовую ошибку регламента обслуживания РИБ: если регламентный обмен выполняется редко (например, раз в неделю), к моменту обновления метаданных в таблицах регистрации изменений накапливаются миллионы записей. В результате попытка обновить подчиненный узел приводит к тому, что выгрузка конфигурации блокируется процессом сериализации огромного массива данных.
Для предотвращения этой ситуации организуем процесс следующим образом:
Рекомендация: Настройте автоматический фоновый обмен по расписанию (например, каждые 15–60 минут или ночью). Чем чаще синхронизируются данные, тем меньше размер сообщений и тем быстрее проходит передача изменений структуры метаданных.
Если сеанс обмена данными не может быть выполнен штатно или нужно экстренно обновить подчиненную базу без передачи данных, применим методику временного отключения подчиненного узла от центрального.
Разберем по шагам порядок действий:
.cf.а) Запустив конфигуратор подчиненной базы из командной строки с параметром сброса главного узла:
1cv8.exe DESIGNER /F "C:\Bases\SubBase" /ResetMasterNode
б) Либо программно во внешнем сеансе 1С:Предприятия под полными правами:
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
.cf.
СсылкаНаГлавный = ПланыОбмена.ИмяПланаОбмена.НайтиПоКоду("КодЦентральногоУзла");
ПланыОбмена.УстановитьГлавныйУзел(СсылкаНаГлавный);
Важное предостережение: Всегда используйте именно пункт Загрузить конфигурацию из файла, а не Сравнить и объединить. При объединении могут измениться внутренние уникальные идентификаторы объектов (UUID), что приведет к разрушению целостности РИБ и невозможности дальнейшей синхронизации.
Рассмотрим возможность сформировать стандартное сообщение обмена РИБ, в которое платформа поместит блок измененных метаданных, но пропустит выгрузку зарегистрированных элементов данных.
В модуле соответствующего плана обмена в обработчике события ПриОтправкеДанныхПодчиненному можно программно переопределить поведение платформы:
Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза)
// Временно игнорируем передачу любых зарегистрированных данных
ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;
КонецПроцедуры
При таком подходе формируется стандартный служебный XML-пакет обмена, содержащий дельту метаданных, при этом записи в таблицах регистрации изменений данных не сбрасываются и останутся доступными для следующей полной выгрузки.
Выясним причину исходной проблемы: часто подчиненный узел РИБ создают исключительно для того, чтобы убрать тяжелые блокировки и перенести расчет себестоимости или сложных отчетов из рабочей базы. Однако поддержка РИБ для таких задач создает избыточные накладные расходы на постоянную синхронизацию.
В современной платформе 1С:Предприятие 8.3 для этих целей рекомендуется использовать альтернативные механизмы: