При обновлении типовых конфигураций 1С (в частности, 1С:Бухгалтерия предприятия 3.0 КОРП) в распределенных информационных базах (РИБ) иногда возникает сбой передачи обновленной конфигурации в периферийный узел. Распространенным способом решения этой проблемы является временное отключение главного узла, обновление конфигурации базы-приемника вручную из файла .cf и последующая привязка главного узла обратно.
Однако после выполнения этих действий разработчики и администраторы часто сталкиваются со следующими проблемами:
Для состава плана обмена Удалить... не указана регистрация объекта...Не удалось провести синхронизацию.Рассмотрим подробно причины возникновения данных ошибок и разберем по шагам варианты их исправления.
В процессе развития типовых конфигураций фирмой «1С» разработчики часто меняют архитектуру обмена данными. Прежние планы обмена переименовываются путем добавления префикса Удалить (например, plan обмена ПоОрганизации переименовывается в УдалитьПоОрганизации), а для активного обмена создается новый план обмена или задействуются подсистемы БСП.
Если при повторной установке главного узла программно указать узел из устаревшего плана обмена Удалить..., подписки на события продолжат срабатывать при проведении документов. Попытка зарегистрировать изменения для объекта в плане обмена, из состава которого этот объект уже исключен, приводит к фатальной ошибке:
{ОбщийМодуль.ОбменДаннымиСобытия.Модуль(102)}: Для состава плана обмена УдалитьПоОрганизации не указана регистрация объекта Документ.СписаниеСРасчетногоСчета
ВызватьИсключение СтрокаСообщения;
Решение: Проанализируем состав планов обмена в конфигурации. При назначении главного узла необходимо выбирать узел актуального (действующего) плана обмена, а не устаревшего с префиксом Удалить.
Код отвязки и корректного восстановления главного узла выглядит следующим образом:
// 1. Отвязать главный узел в подчиненной базе:
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
// 2. После загрузки актуального CF в режиме Конфигуратора,
// устанавливаем в качестве главного узла элемент актуального плана обмена:
ГлавныйУзел = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоКоду("ЦБ"); // Укажите актуальный план обмена и код узла
ПланыОбмена.УстановитьГлавныйУзел(ГлавныйУзел);
Когда мы обновляем подчиненный узел вручную через файл .cf, в центральном узле РИБ остается запись о том, что для данного периферийного узла зарегистрированы изменения конфигурации. При первом же сеансе связи центральная база пытается передать служебный блок изменений метаданных. Так как конфигурация на периферии уже изменена ручным путем, платформа 1С блокирует стандартный процесс приемки и выдает ошибку синхронизации.
Разберем алгоритм решения этой проблемы по шагам:
.cf), процесс не изменит структуры данных, но сформирует корректное ответное сообщение обмена.Если запустить штатный обмен не удается, можно принудительно очистить регистрацию изменений конфигурации в центральной базе. Для этого выполним в центральном узле следующий код или воспользуемся стандартной обработкой Регистрация изменений для обмена данными:
// Выполняется в Центральном узле
УзелПериферии = ПланыОбмена.ПоОрганизации.НайтиПоКоду("ПБ"); // Укажите узел подчиненной базы
// Снимаем регистрацию изменений конфигурации для узла
ПланыОбмена.УдалитьРегистрациюИзменений(УзелПериферии, Неопределено);
При использовании подсистемы обмена данными Библиотеки Стандартных Подсистем (БСП) в подчиненном узле могут зависать внутренние флаги состояния обмена. Если программа продолжает требовать повторную загрузку сообщения обмена перед запуском, проанализируем состояние констант в режиме «1С:Предприятие» (через меню Функции для специалиста):
ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском необходимо установить в значение Ложь.НастройкаПодчиненногоУзлаЗавершена должна иметь значение Истина.Выполнение этих шагов позволяет полностью восстановить корректную работу РИБ без потери данных и повторного пересоздания начального образа подчиненного узла.