При работе с распределенными информационными базами (РИБ) в современных конфигурациях, таких как Бухгалтерия предприятия 3.0, разработчики часто сталкиваются с ситуацией, когда стандартные механизмы фильтрации данных (например, по организации) не срабатывают для добавленных вручную объектов. Рассмотрим ситуацию: вы создали нетиповой документ, добавили в него реквизит Организация, включили его в состав плана обмена, но при создании начального образа для конкретной организации в него все равно попадают лишние документы. Разберем по шагам, почему это происходит и как настроить корректную фильтрацию.
Для начала проанализируем, как система понимает, какие данные должны попасть в конкретный узел РИБ. В старых версиях платформы достаточно было просто включить объект в состав плана обмена. В современных же конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), используется механизм Правил регистрации объектов (ПРО).
Если вы просто добавили документ в план обмена, но не прописали логику его регистрации, система ведет себя максимально «безопасно» с точки зрения целостности данных: она регистрирует объект для всех узлов без исключения. То есть наличие реквизита Организация в самом документе никак не сообщает механизму обмена о том, что по этому реквизиту нужно фильтровать данные. Механизму нужно явно указать связь между значением реквизита документа и настройкой самого узла плана обмена.
Основная причина проблемы, как правильно подсказали на форуме, заключается в отсутствии правил в составе ПРО. Эти правила представляют собой XML-файл, который описывает условия, при которых объект должен быть зарегистрирован для конкретного узла.
Рассмотрим алгоритм действий для настройки правил:
ПередОбработкой или непосредственно в настройках фильтрации укажем условие. Например, проверим соответствие организации:
// Пример логики в правилах регистрации
Если Объект.Организация <> Параметры.ОрганизацияУзла Тогда
Отказ = Истина;
КонецЕсли;
После редактирования правил их необходимо сохранить в XML и загрузить обратно в информационную базу через регистр сведений Правила регистрации объектов или обновить макет в конфигураторе (если вы планируете тиражировать это решение).
Выясним, как БСП узнает о том, что документ был изменен и его нужно проверить на соответствие правилам регистрации. Для этого в системе существуют типовые подписки на события. Проанализируем состав подписок в вашей конфигурации.
Для корректной работы нетиповой документ должен быть включен в следующие подписки:
ОбменДаннымиТиповойПередЗаписьюОбменДаннымиТиповойПередУдалениемЕсли вашего документа нет в этих подписках, автоматическая регистрация по правилам БСП просто не запустится в момент записи документа. Важный момент: проверьте, чтобы в коде этих подписок не было жестких ограничений (hardcode), которые пропускают только типовые объекты. Обычно БСП написана универсально, но при кастомизации конфигурации могли быть внесены изменения.
Посмотрим на настройки самого плана обмена в конфигураторе. У каждого объекта, входящего в состав плана обмена, есть свойство Авторегистрация. Здесь кроется распространенная ловушка:
Для корректной работы фильтрации по организации в РИБ на базе БСП рекомендуется устанавливать значение Запретить, чтобы управление регистрацией полностью перешло к программным механизмам, учитывающим правила ПРО.
Часто бывает так: вы настроили правила, подписки и авторегистрацию, но в начальный образ все равно лезут старые документы. Почему? Проанализируем состояние таблицы регистрации изменений.
Если вы сначала создали документы Организации1, а уже потом создали настройку синхронизации для Организации2, система могла автоматически пометить все существующие документы к выгрузке в момент инициализации узла. Перед созданием начального образа крайне важно убедиться, что очередь выгрузки пуста или содержит только нужные данные.
Выполним следующие действия:
Организации1, удалим эти записи из таблицы регистрации.Разберем еще одну неочевидную ситуацию. Даже если фильтры настроены верно, документ Организации1 может попасть в образ, если на него есть ссылка из объекта, который разрешен к выгрузке. Например, если у вас есть какой-то общий справочник или типовой документ, который связан с вашим нетиповым документом, система может «подтянуть» его для обеспечения ссылочной целостности.
Проанализируем структуру связей вашего нетипового документа. Если он является частью цепочки документов, убедитесь, что вся цепочка корректно фильтруется по организации. В правилах регистрации объектов (ПРО) есть специальная настройка, отвечающая за выгрузку объектов по ссылке — иногда ее стоит отключить для определенных типов данных, если их наличие в подчиненном узле критично нарушает логику бизнес-процесса.
Подводя итог, для решения проблемы выгрузки лишних документов в РИБ необходимо выполнить комплекс действий:
Авторегистрация = Запретить для документа в составе плана обмена.Организация..1cd (или выгрузкой в пустую базу).Соблюдение этих шагов гарантирует, что в начальный образ РИБ попадут только те данные, которые соответствуют заданным критериям фильтрации, что обеспечит корректную и производительную работу распределенной системы.