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

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

В процессе работы с обменами данными в конфигурациях на базе Библиотеки стандартных подсистем (БСП), таких как 1С:ЗУП 3.1 или 1С:БП 3.0, технические специалисты часто сталкиваются с ситуацией, когда механизмы фильтрации данных работают не так, как ожидается. Рассмотрим классическую проблему: в настройках синхронизации четко указан перечень организаций, по которым должен происходить обмен, однако система продолжает регистрировать и передавать документы по "чужим" организациям. Разберем детально, почему это происходит и как восстановить корректную работу фильтров.

Механизм регистрации объектов в современных конфигурациях

Для начала проанализируем, как именно 1С "понимает", нужно ли регистрировать документ при его записи. В старых версиях платформ это решалось простым включением объекта в состав плана обмена. В современных же решениях используется сложная многоуровневая система, состоящая из:

  1. Подписок на события: При записи объекта срабатывает подписка (например, ОбменДаннымиСобытия.ЗарегистрироватьИзменениеОбъекта), которая инициирует процесс анализа.
  2. Правил регистрации объектов (ПР): Это специальные XML-схемы, которые описывают условия, при которых объект должен попасть в таблицу регистрации.
  3. Регистра сведений «Правила для обмена данными»: Именно здесь хранятся актуальные настройки и сами XML-файлы правил для каждого конкретного обмена.

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

Анализ параметров сеанса и кэша правил

Когда срабатывает программный код в модуле ОбменДаннымиСобытия, система обращается к ПараметрыСеанса.ПравилаРегистрацииОбъектов. Это хранилище в оперативной памяти содержит структуру правил, необходимых для быстрой проверки условий регистрации без постоянного обращения к базе данных.

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

Причина «слета» правил при переносе данных

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

Посмотрим на типичный код инициализации правил в подписках:


Процедура ЗарегистрироватьИзменениеОбъекта(Источник, Отказ) Экспорт
    Если Источник.ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;
    
    // Попытка получить правила из параметров сеанса
    Правила = ПараметрыСеанса.ПравилаРегистрацииОбъектов;
    
    Если Правила = Неопределено Или Правила.Количество() = 0 Тогда
        // Если правила не загружены, регистрация идет по упрощенному сценарию
        ОбменДаннымиСервер.ЗарегистрироватьВсеИзмененияПоУмолчанию(Источник);
    Иначе
        // Проверка условий фильтрации
        ОбменДаннымиСервер.ВыполнитьРегистрациюПоПравилам(Источник, Правила);
    КонецЕсли;
КонецПроцедуры

Именно отсутствие данных в регистре заставляет систему выполнять ЗарегистрироватьВсеИзмененияПоУмолчанию, что и приводит к попаданию "ИП Васькин" в обмен, предназначенный только для "ИП Пупкин".

Как восстановить правила регистрации объектов

Если вы обнаружили, что фильтры не работают, выполним следующие шаги для восстановления корректной работы синхронизации:

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

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

Диагностика с помощью встроенных инструментов

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

Почему фильтрация "на стороне приемника" — это плохая практика?

Существует заблуждение, что если объект попал в файл выгрузки, то база-приемник его "отсечет" при загрузке, так как там тоже стоят фильтры. Однако механизмы БСП настроены на максимальную доставку данных. Если документ уже пришел в файле, база-получатель, скорее всего, создаст его, считая, что отправитель прислал его не просто так.

Важно понимать: основная фильтрация должна происходить именно в момент регистрации на стороне источника. Это не только обеспечивает чистоту данных, но и критически влияет на производительность. Регистрация "всего подряд" раздувает таблицы Exchange MS, увеличивает размер файлов XML и замедляет процесс выгрузки, что в крупных базах может привести к критическим зависаниям обмена.

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

← На главную