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

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

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

Понимание механизмов регистрации данных

Прежде чем приступать к доработкам, проанализируем, почему данные попадают в файл обмена. В платформе 1С:Предприятие 8.3 существует понятие План обмена. Когда объект (документ, справочник) записывается в базе, срабатывает механизм Авторегистрация. Если он включен, система автоматически создает запись в таблице регистрации изменений для всех узлов, определенных в плане обмена.

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

Способ 1: Ограничение через правила регистрации (КД 2.0)

Первый и наиболее правильный с точки зрения архитектуры способ — это использование Правил конвертации данных (КД 2.0). Вы можете настроить правила регистрации объектов (ПКР).

  1. Откройте конфигурацию Конвертация данных 2.0.
  2. Перейдите к разделу правил регистрации объектов.
  3. Для каждого объекта установите алгоритм проверки, который будет возвращать Отказ = Истина, если объект не должен передаваться.

Параметр Отказ (тип Булево) — это ключевой флаг. Если вы присвоите ему значение Истина в обработчике события, объект не будет зарегистрирован к обмену для текущего узла. Это избавляет вас от необходимости менять код основной конфигурации.

Способ 2: Программное управление регистрацией через ОбменДаннымиСобытия

Если штатных механизмов КД недостаточно или вы хотите жестко контролировать процесс на уровне ядра конфигурации, можно использовать подписку на события или модуль ОбменДаннымиСобытия. Этот метод позволяет тонко настраивать условия «на лету».

Рассмотрим, как это реализовать. В общем модуле ОбменДаннымиСобытия существуют процедуры МеханизмРегистрацииОбъектовПередЗаписьюДокумента и МеханизмРегистрацииОбъектовПередЗаписьюРегистра. Добавим туда условие, которое запрещает регистрацию определенных документов.


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

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

Как очистить накопленные «хвосты»

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

  1. Используйте стандартную обработку Регистрация изменений для обмена данными.
  2. В ней выберите нужный узел обмена.
  3. Найдите документы, которые не должны были уходить, и воспользуйтесь функцией Удалить регистрацию.
  4. Также можно программно вызвать метод УдалитьРегистрациюИзменений() для соответствующих узлов плана обмена.

Рекомендации по организации обмена

Для стабильной работы одностороннего обмена (когда одна база — мастер, другая — слейв), придерживайтесь следующих правил:

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

← На главную