Почему не передаются данные регистра через РИБ и как настроить обмен?

Программист 1С v8.3 (Управляемые формы) 1С:Розница Управленческий учет IT и автоматизация бизнеса
← На главную

При доработке конфигурации в распределенной информационной базе (РИБ) разработчики нередко сталкиваются с ситуацией: в регистр сведений добавлены новые ресурсы или реквизиты, конфигурация обновлена во всех узлах, но наборы записей упорно не выгружаются в подчиненные базы. Разберем основные причины этой проблемы и пошагово проанализируем, как корректно включить объект в обмен и настроить механизм регистрации изменений.

1. Проверка состава плана обмена и связанных объектов метаданных

Первое, на что необходимо обратить внимание при передаче данных регистра, — это состав используемого плана обмена. В распределенной информационной базе для каждого объекта задаются правила участия в обмене.

Рассмотрим порядок действий при проверке состава:

  1. Откроем ветку Планы обмена в дереве метаданных конфигуратора и найдем нужный узел.
  2. Перейдем на вкладку Состав и найдем наш регистр.
  3. Проверим свойство Авторегистрация. Если регистр должен регистрироваться автоматически при каждой записи набора, флаг должен стоять в значении Разрешить.
  4. Проанализируем все связанные объекты. Если одно из измерений регистра ссылается на справочник или документ, которого нет в составе плана обмена, подчиненная база не сможет корректно работать с записями (или вовсе откажется их создавать из-за отсутствия ссылочной целостности). Включим все зависимые справочники в состав плана обмена.

2. Особенности обновления конфигурации в РИБ

Выясним причину, почему данные могут не уходить сразу после внесения правок в метаданные. При изменении структуры объектов (например, при добавлении нового ресурса в регистр) обмен данными происходит в два этапа:

  1. В первом сеансе обмена главный узел выгружает файл сообщения, содержащий только обновление конфигурации.
  2. Подчиненный узел принимает это сообщение и блокирует дальнейший прием данных до тех пор, пока конфигурация базы данных не будет обновлена.
  3. Только после успешного обновления подчиненного узла и повторного сеанса обмена начинается передача самих данных и наборов записей.

Убедимся, что конфигурация подчиненного узла полностью обновлена и соответствует главному узлу.

3. Подчиненность регистратору и специфика наборов записей

Проанализируем тип регистра, с которым мы работаем. Механизм передачи данных принципиально отличается для независимых и подчиненных регистров:

  1. Подчиненные регистратору регистры. Движения таких регистров не передаются самостоятельно, даже если авторегистрация включена. Они выгружаются исключительно вместе с документом-регистратором. Чтобы отправить движения, необходимо зарегистрировать сам документ.
  2. Независимые регистры сведений. В обмен передается непосредственно набор записей регистра с установленным отбором.

4. Подписки на события и правила регистрации данных (ПРД)

В современных типовых конфигурациях на базе Библиотеки Стандартных Подсистем (БСП) стандартная авторегистрация объектов часто отключена, а управление выгрузкой выполняется программно через подписки на события или правила регистрации данных (ПРД).

Разберем ключевые моменты настройки таких подписок:

  1. Найдем в метаданных подписку на событие, отвечающую за регистрацию изменений для нашего плана обмена (например, подписки вида ПриЗаписиРегистра...ДляРегистрации... или ПередЗаписьюРегистраСведенийДляОбмена...).
  2. Откроем список источников подписки и убедимся, что наш регистр отмечен галочкой среди источников события.
  3. Если используется фильтрация данных (например, обмен только по определенному магазину или организации), проверим алгоритм в правилах регистрации данных. Система должна понимать, по какому измерению или реквизиту сопоставлять запись с узлом-получателем.

5. Ручная регистрация и диагностика изменений

Если структура настроена, но старые данные до изменения метаданных не были выгружены, зарегистрируем их принудительно. Для этого можно воспользоваться типовой обработкой Регистрация изменений для обмена данными либо выполнить регистрацию программно через встроенный язык 1С.

Посмотрим на пример программной регистрации всех записей регистра для конкретного узла плана обмена:


УзелОбмена = ПланыОбмена.ПоМагазинам.НайтиПоКоду("Магазин01");
Если ЗначениеЗаполнено(УзелОбмена) Тогда
    ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, Метаданные.РегистрыСведений.ЦеныНоменклатуры);
КонецЕсли;

Также можно выполнить точечную регистрацию конкретного набора записей регистра сведений по отбору:


Отбор = Новый Структура;
Отбор.Вставить("Магазин", ВыбранныйМагазин);
ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, Метаданные.РегистрыСведений.ОстаткиПоМагазинам, Отбор);

После выполнения регистрации и проведения сеанса синхронизации данные успешно поступят в подчиненную информационную базу.

← На главную