Как настроить дополнительный фильтр для обмена данными в 1С:Бухгалтерия 3.0?

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

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

Почему нельзя править процедуру ПриОтправкеДанныхПодчиненному?

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

Регистрация изменений в БП 3.0 происходит в момент записи объекта через механизм подписок на события. Чтобы управлять тем, попадет объект в обмен или нет, нужно воздействовать на процесс регистрации, а не на процесс передачи.

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

Это наиболее архитектурно правильный и рекомендуемый 1С метод. Использование Правил регистрации объектов позволяет гибко настраивать условия обмена без внесения изменений в типовой код конфигурации.

  1. Создайте файл правил регистрации в формате XML.
  2. В правилах пропишите логику: «Если РеквизитДокумента = Истина, тогда регистрировать объект для узла обмена».
  3. Загрузите полученные правила в 1С через обработку «Конвертация объектов информационных систем».

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

Способ 2: Использование расширений конфигурации

Если создание полноценных правил кажется слишком трудоемким для одной простой проверки, можно воспользоваться расширениями. Это позволит «перехватить» логику регистрации, не меняя основную конфигурацию.

Разберем алгоритм действий:

  1. Найдите подписку на событие, которая отвечает за регистрацию объектов. В типовой БП 3.0 она часто связана с механизмом ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередЗаписьюДокумента.
  2. Создайте расширение и заимствуйте в него соответствующую процедуру-обработчик.
  3. Внутри расширения пропишите условие проверки вашего реквизита:

Процедура ИмяВашегоОбработчика(Источник, Отказ, ...)
    // Проверяем наш признак
    Если НЕ Источник.ВашПризнак Тогда
        // Принудительно отменяем регистрацию
        Отказ = Истина;
        Возврат;
    КонецЕсли;
    
    // Вызываем типовой метод, если условие выполнено
    ТиповойМетод(Источник, Отказ, ...);
КонецПроцедуры

Этот способ позволяет внедрить фильтрацию быстро, однако требует внимательности, чтобы не «сломать» типовую цепочку регистрации, которая может зависеть от множества условий (например, от настроек обмена по организациям).

Важные рекомендации по реализации

При настройке фильтров всегда учитывайте следующие моменты:

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

← На главную