Как в Конвертации данных 2.1 настроить выгрузку только измененных документов?

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

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

Использование планов обмена для регистрации изменений

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

Во-первых, проанализируем настройки самого плана обмена в конфигураторе. В состав плана обмена должны быть включены все объекты (справочники, документы), которые мы планируем выгружать. У каждого объекта в составе плана обмена можно установить свойство Авторегистрация. Если выбрано значение «Разрешить», то при любой записи объекта (через форму или программно) он автоматически попадет в очередь на выгрузку для всех узлов данного плана обмена.

Во-вторых, создадим в пользовательском режиме (в режиме «1С:Предприятие») узел этого плана обмена. Именно для этого узла (получателя) будут копиться изменения. Посмотрим, как это работает в КД 2.1.

Настройка выгрузки через «Универсальный обмен данными в формате XML»

Самый простой способ организовать выгрузку по изменениям — воспользоваться стандартной обработкой УниверсальныйОбменДаннымиXML. Многие пользователи выполняют выгрузку вручную, выбирая период, но для автоматизации процесса по изменениям нужно выполнить следующие действия:

  1. Откроем обработку и перейдем на вкладку «Выгрузка данных».
  2. Найдем флажок «Использовать план обмена» и установим его.
  3. В появившемся поле выбора укажем наш заранее созданный Узел плана обмена.
  4. Проанализируем дополнительные настройки: флаг «Снимать регистрацию изменений после выгрузки». Если его установить, то после успешного формирования XML-файла система очистит таблицу изменений для данного узла. Если этого не сделать, при следующей выгрузке те же самые документы попадут в файл повторно.

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

Программная реализация в правилах выгрузки данных (ПВД)

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

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

Пример кода для обработчика Перед обработкой в ПВД:


// Определяем узел, для которого выбираем изменения
УзелОбмена = Параметры.УзелДляВыгрузки; 

// Формируем запрос к таблице регистрации изменений документа "РеализацияТоваровУслуг"
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   ТаблицаИзменений.Ссылка КАК Ссылка
    |ИЗ
    |   Документ.РеализацияТоваровУслуг.Изменения КАК ТаблицаИзменений
    |ГДЕ
    |   ТаблицаИзменений.Узел = &Узел";

Запрос.УстановитьПараметр("Узел", УзелОбмена);
ВыборкаДанных = Запрос.Выполнить().Выгрузить();

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

Обработка удаления объектов

Планы обмена хороши тем, что регистрируют не только создание или модификацию, но и удаление объектов. Если объект был удален в источнике, в таблице регистрации изменений появится запись с пометкой удаления. Чтобы в базе-приемнике объект также исчез, в КД 2.1 должны быть настроены соответствующие правила.

Разберем, как это работает:

Исключение зацикливания при обмене

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

В коде загрузки или в модулях объектов используется свойство ОбменДанными.Загрузка. Рассмотрим пример правильной обработки записи объекта:


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

В КД 2.1 при использовании стандартных механизмов загрузки это свойство устанавливается автоматически, что предотвращает повторную регистрацию только что пришедших данных.

Альтернативный метод: Выгрузка по дате последнего изменения

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

Посмотрим, как настроить такую выборку в ПВД:

  1. В ПВД добавим параметр ДатаНачалаВыгрузки.
  2. В обработчике Перед обработкой напишем запрос, который выбирает объекты, у которых ДатаИзменения >= &ДатаНачалаВыгрузки.
  3. Результат запроса передадим в ВыборкаДанных.

Важный нюанс: этот метод не умеет отслеживать удаления объектов. Если документ будет удален физически, информация об этом никак не попадет в выборку по дате. Именно поэтому использование планов обмена считается профессиональным и наиболее надежным стандартом в среде разработчиков 1С.

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

← На главную