При доработке конфигурации в распределенной информационной базе (РИБ) разработчики нередко сталкиваются с ситуацией: в регистр сведений добавлены новые ресурсы или реквизиты, конфигурация обновлена во всех узлах, но наборы записей упорно не выгружаются в подчиненные базы. Разберем основные причины этой проблемы и пошагово проанализируем, как корректно включить объект в обмен и настроить механизм регистрации изменений.
Первое, на что необходимо обратить внимание при передаче данных регистра, — это состав используемого плана обмена. В распределенной информационной базе для каждого объекта задаются правила участия в обмене.
Рассмотрим порядок действий при проверке состава:
Разрешить.Выясним причину, почему данные могут не уходить сразу после внесения правок в метаданные. При изменении структуры объектов (например, при добавлении нового ресурса в регистр) обмен данными происходит в два этапа:
Убедимся, что конфигурация подчиненного узла полностью обновлена и соответствует главному узлу.
Проанализируем тип регистра, с которым мы работаем. Механизм передачи данных принципиально отличается для независимых и подчиненных регистров:
В современных типовых конфигурациях на базе Библиотеки Стандартных Подсистем (БСП) стандартная авторегистрация объектов часто отключена, а управление выгрузкой выполняется программно через подписки на события или правила регистрации данных (ПРД).
Разберем ключевые моменты настройки таких подписок:
ПриЗаписиРегистра...ДляРегистрации... или ПередЗаписьюРегистраСведенийДляОбмена...).Если структура настроена, но старые данные до изменения метаданных не были выгружены, зарегистрируем их принудительно. Для этого можно воспользоваться типовой обработкой Регистрация изменений для обмена данными либо выполнить регистрацию программно через встроенный язык 1С.
Посмотрим на пример программной регистрации всех записей регистра для конкретного узла плана обмена:
УзелОбмена = ПланыОбмена.ПоМагазинам.НайтиПоКоду("Магазин01");
Если ЗначениеЗаполнено(УзелОбмена) Тогда
ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, Метаданные.РегистрыСведений.ЦеныНоменклатуры);
КонецЕсли;
Также можно выполнить точечную регистрацию конкретного набора записей регистра сведений по отбору:
Отбор = Новый Структура;
Отбор.Вставить("Магазин", ВыбранныйМагазин);
ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, Метаданные.РегистрыСведений.ОстаткиПоМагазинам, Отбор);
После выполнения регистрации и проведения сеанса синхронизации данные успешно поступят в подчиненную информационную базу.