Как настроить автоматический обмен данными XML с учетом планов обмена и подтверждения приема?

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

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

Рассмотрим подробнее два основных подхода к решению этой задачи: применение встроенных средств Библиотеки Стандартных Подсистем (БСП) и создание индивидуальной схемы с использованием Конвертации Данных 2 (КД2) и доработанной обработки обмена.

Вариант 1. Использование подсистемы «Обмен данными» из БСП

Если обе обменивающиеся конфигурации построены на базе БСП (например, 1С:Документооборот, 1С:Управление торговлей или 1С:ERP), наиболее надежным и быстрым способом будет использование штатной подсистемы «Обмен данными» по варианту УОП (универсальный обмен по правилам).

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

  1. Подготовка правил обмена: В программе «Конвертация данных 2» создаются правила конвертации объектов (ПКО) и правила выгрузки (ПВУ).
  2. Настройка узла обмена: В типовой конфигурации создается или используется существующий узел плана обмена. В подсистеме обмена данными БСП регистрируются правила и настраивается транспорт (через общий каталог, FTP, Email или веб-сервисы).
  3. Автоматическое квитирование: БСП содержит встроенный механизм подтверждения приема (квитирования). При отправке пакета база-источник формирует исходящее сообщение с уникальным номером. База-приемник при загрузке фиксирует полученный номер и при встречном сеансе отправляет квитанцию. Получив квитанцию, источник автоматически удаляет регистрацию изменений для всех объектов, переданных в подтвержденном сообщении.
  4. Автоматический запуск: В БСП уже встроена интеграция с регламентными заданиями, что позволяет выполнять обмен по расписанию без написания дополнительного кода.

Вариант 2. Разработка собственной схемы на базе КД2 и универсальной обработки

Если одна из конфигураций устарела, является нетиповой или не содержит полноценную подсистему обмена БСП, можно реализовать обмен с использованием плана обмена и обработки V8Exchan82.epf (Универсальный обмен данными в формате XML).

Проанализируем структуру такой реализации:

  1. Создание плана обмена и подписок на события: В конфигураторе добавляется узел плана обмена (без авторегистрации или с выборочной авторегистрацией). Создаются подписки на события (например, ПриЗаписи), которые регистрируют изменения нужных объектов на созданном узле обмена через метод ЗафиксироватьИзменения().
  2. Подготовка правил обмена в КД2: Разрабатываются правила выгрузки и конвертации объектов для пары конфигураций.
  3. Доработка обработки выгрузки/загрузки: В обработке обмена логика расширяется следующим образом:
    1. При выгрузке формируется заголовок сообщения с номером исходящего пакета. Переданным объектам в таблицах регистрации присваивается соответствующий номер сообщения.
    2. При загрузке в приемнике формируется файл-ответ (квитанция), содержащий номер успешно принятого пакета.
    3. При чтении ответа на стороне источника вызывается очистка регистрации изменений по номеру сообщения.
  4. Создание регламентного задания: Пишется обертка в виде программного модуля, который по расписанию вызывается регламентным заданием и выполняет выгрузку/загрузку данных в фоновом режиме.

Программная очистка регистрации изменений и квитирование

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


// Удаление регистрации изменений по полученному номеру сообщения
УзелОбмена = ПланыОбмена.МойПланОбмена.НайтиПоКоду("Приемник");
НомерПринятогоСообщения = 42; // Номер пакета, полученный из квитанции

ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, НомерПринятогоСообщения);

Вызов метода УдалитьРегистрациюИзменений() с указанием конкретного номера сообщения удаляет записи регистрации для всех объектов, номер исходящего сообщения которых меньше или равен переданному значению.

Важные технические нюансы и тонкости реализации

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

  1. Опасность немедленного снятия регистрации: Не рекомендуется очищать регистрацию изменений сразу после выгрузки файла (без ожидания ответа от приемника). Если при передаче произойдет сбой сети или файл заблокируется, данные будут утеряны для последующих выгрузок.
  2. Установка узла в дереве правил выгрузки: При программном вызове обработки универсального обмена недостаточно просто передать узел в параметр обработки. Необходимо рекурсивно обойти дерево правил выгрузки и явно присвоить ссылку на узел обмена строкам правил, иначе обработка проигнорирует регистрацию и выгрузит всю базу полностью.
  3. Накопление регистраций по связанным регистрам: При регистрации документов часто автоматически создаются записи в таблицах регистрации движений (регистров накопления и сведений). Если эти регистры не выгружаются по правилам обмена, их регистрация останется неочищенной, что приведет к росту таблиц БД и замедлению работы системы.
← На главную