Как исключить ненужные документы и справочники из обмена между БП и УТ?

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

Синхронизация данных между конфигурациями «Бухгалтерия предприятия» (БП 3.0) и «Управление торговлей» (УТ 11) является одной из самых распространенных задач. Однако типовой механизм часто настроен так, что в обмен попадает избыточное количество объектов. Например, документы могут мигрировать из БП в УТ, хотя по логике бизнес-процесса они должны двигаться только в обратном направлении. В этой статье мы подробно разберем, как и где вмешаться в типовой код или настройки, чтобы ограничить передачу данных, используя расширения и штатные инструменты.

Способ 1: Редактирование правил регистрации объектов (ПР)

Наиболее корректным с точки зрения архитектуры системы «1С:Предприятие» является изменение Правил регистрации объектов. Несмотря на то что современные обмены между БП и УТ базируются на технологии Enterprise Data (КД 3.0), сами правила регистрации по-прежнему хранятся и редактируются в формате Конвертации данных 2.1.

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

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

В коде правил регистрации это выглядит примерно так:


// В обработчике "Перед обработкой" правила регистрации
Если Объект.Организация.Инн <> "1234567890" Тогда
    Отказ = Истина;
КонецЕсли;

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

Способ 2: Вмешательство в регистрацию через расширение (подписки на события)

Если вы предпочитаете работать исключительно с кодом и использовать механизм расширений, мы можем вмешаться в процесс регистрации изменений «на лету». Все типовые регистрации происходят в подписках на события, которые вызывают методы БСП.

Разберем, как реализовать фильтрацию в расширении. Нам необходимо создать подписку на событие ПередЗаписью (или использовать существующую типовую, добавив в нее свой обработчик с типом &После или &Вместо).

Проанализируем пример кода, который предотвращает регистрацию объекта в конкретном плане обмена:


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

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

Способ 3: Программная очистка регистрации перед выгрузкой

Рассмотрим еще одну ситуацию: объекты уже зарегистрированы в плане обмена, но мы хотим отсечь их непосредственно в момент начала синхронизации. Этот метод хорош тем, что он «железобетонно» гарантирует отсутствие данных в пакете выгрузки.

Выясним, где это лучше сделать. В планах обмена существует обработчик ПриОтправкеДанных. Мы можем создать расширение для модуля менеджера плана обмена и добавить туда свою логику. Если установить параметр Игнорировать = Истина, объект не попадет в XML-файл обмена.

Пример реализации в расширении модуля менеджера:


&Вместо("ПриОтправкеДанных")
Процедура Расш1_ПриОтправкеДанных(ЭлементДанных, ОтправкаЭлемента)
    
    // Если объект — документ, который не должен уходить
    Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.ПоступлениеТоваровУслуг") Тогда
        ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;
    КонецЕсли;
    
КонецПроцедуры

Этот способ крайне эффективен, так как он срабатывает даже в тех случаях, когда объект выгружается «по ссылке» (вместе с другими связанными объектами). В формате Enterprise Data это частая проблема: вы запретили регистрацию справочника Номенклатура, но она все равно улетает, так как на нее ссылается документ Реализация.

Способ 4: Использование штатных настроек синхронизации

Прежде чем приступать к программированию, посмотрим на типовые возможности конфигураций. В настройках синхронизации данных (как в БП, так и в УТ) предусмотрены фильтры.

Разберем по шагам, как их настроить:

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

Если нам нужно отключить отправку всех документов из БП в УТ, в настройках на стороне БП в поле «Выгружать документы» следует выбрать значение «Не выгружать». Это самый простой и безопасный способ, не требующий написания кода и создания расширений.

Нюансы обновления и сопровождения

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

Если же мы используем расширение, риск потери правок при обновлении ниже, однако структура метаданных (имена модулей и процедур) в новых версиях БСП может измениться. Мы рекомендуем использовать расширения именно для тех случаев, когда штатных фильтров в интерфейсе недостаточно, а логика запрета выгрузки сложная (например, зависит от реквизитов табличных частей).

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

← На главную