Как настроить обмен в РИБ с фильтрацией по организации или складу в 1С:Управление торговлей 10.3?

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

Типовой механизм распределенной информационной базы (РИБ) в конфигурации «1С:Управление торговлей 10.3» изначально ориентирован на полную репликацию всех данных информационной базы без наложения фильтров по реквизитам шапки или табличных частей. Когда перед разработчиком встает задача развернуть периферийные узлы с разделением по конкретным организациям или складам, стандартного функционала «из коробки» оказывается недостаточно. Разберем основные способы реализации фильтрации данных в РИБ, проанализируем тонкости работы с наборами записей регистров и рассмотрим возможные подводные камни.

Вариант 1. Программная фильтрация через модуль плана обмена и подписки на события

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

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

Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента)
    
    // Проверяем соответствие документа организации узла
    Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(ЭлементДанных)) Тогда
        Если ЭлементДанных.Организация <> ЭтотОбъект.Организация Тогда
            ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;
            Возврат;
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

Особенности фильтрации движений регистров без реквизита «Организация»

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

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

Вариант 2. Использование правил конвертации и регистрации данных (КД 2.x)

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

  1. Создание обычного плана обмена. Создаем план обмена без установленного флага Распределенная информационная база.
  2. Разработка правил регистрации (ПРО). В конфигурации «Конвертация данных 2.x» настраиваем фильтры выгрузки на уровне правил регистрации объектов.
  3. Обработка табличных частей. В правилах конвертации объектов (ПКО) можно программно отсекать строки табличных частей, не относящиеся к текущему узлу (складу).
  4. Проведение документов. Обратите внимание, что при не-РИБ обмене движения регистров не переносятся автоматически «как есть» — на стороне узла-приемника требуется настраивать проведение документов или явную выгрузку наборов записей.

Важные ограничения и риски при фильтрации данных

Проанализируем ключевые сложности, с которыми можно столкнуться в процессе эксплуатации фильтруемого обмена:

  1. Смена организации или склада в главном узле. Если в центральной базе у ранее выгруженного документа изменить организацию на чужую, платформа автоматически не удалит этот объект из базы филиала. Для корректной очистки потребуется программно формировать и отправлять объект УдалениеОбъекта в узел, из которого документ должен быть исключен.
  2. Нарушение ссылочной целостности («Объект не найден»). Если жестко фильтровать справочники (контрагенты, договоры, подразделения), в подчиненной базе могут появиться битые ссылки. Рекомендуется передавать справочники без фильтрации либо выгружать их по ссылке вместе с проводящимися документами.
  3. Мультискладские документы. При фильтрации по складам документы, содержащие в табличной части товары с разных складов, штатный РИБ разделить не сможет. В этом случае требуется либо запретить мультискладские операции регламентно, либо автоматически дробить такие документы перед проведением и обменом.
← На главную