Как организовать обмен данными через планы обмена между 1С 8.1 и 1С 8.3?

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

При интеграции устаревших конфигураций на платформе 1С:Предприятие 8.1 (например, Управление торговлей 10.2 / 10.3) с современными решениями на платформе 8.3 и управляемых формах (такими как Управление торговлей 11) разработчики сталкиваются с принципиальной разницей подсистем синхронизации данных. В современных версиях Библиотеки стандартных подсистем (БСП) основным стандартом выступает обмен в формате EnterpriseData (Конвертация данных 3.0), тогда как конфигурации на платформе 8.1 работают по классическим правилам конвертации (Конвертация данных 2.0) через XML-файлы.

Разберем, как объединить правила конвертации данных КД 2.0 с механизмами планов обмена для обеспечения полноценной двусторонней или односторонней синхронизации с контролем изменений и квитированием пакетов.

Архитектура обмена: разделение правил и планов обмена

Проанализируем базовые сущности, участвующие в процессе:

  1. Правила конвертации данных (КД 2.0) — описывают алгоритмы сопоставления объектов (справочников, документов, регистров), правила конвертации свойств (ПКС) и правила выгрузки данных (ПВД). Они отвечают за то, как трансформировать данные.
  2. План обмена — объект метаданных, хранящий информацию об узлах-участниках обмена и фиксирующий изменения объектов в таблицах регистрации. План обмена отвечает за то, какие именно данные изменились и подлежат отправке.
  3. Механизм квитирования (номера сообщений) — при выгрузке формируется заголовок с номером исходящего сообщения и номером последнего принятого сообщения. При получении подтверждения от узла-приемника платформа автоматически или программно очищает таблицу регистрации изменений для доставленных объектов.

Способ 1. Использование обработки «УниверсальныйОбменДаннымиXML» с привязкой к плану обмена

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

Разберем по шагам настройку в обеих информационных базах:

  1. Создание планов обмена: создадим в обеих конфигурациях (в 8.1 и в 8.3) планы обмена с одинаковым именем метаданных. В составе плана обмена отметим галочками авторегистрацию для всех участвующих объектов. Создадим узлы: предопределенный «ЭтотУзел» и узел корреспондента.
  2. Подготовка правил конвертации: в конфигурации «Конвертация данных 2.0» создадим правила обмена в требуемых направлениях (для выгрузки и для загрузки).
  3. Программный запуск выгрузки по плану обмена: используем обработку УниверсальныйОбменДаннымиXML, передав ей параметры выгрузки с фильтром по узлу плана обмена.

Посмотрим на пример программного вызова обработки на стороне источника:


ОбработкаОбмена = Обработки.УниверсальныйОбменДаннымиXML.Создать();
ОбработкаОбмена.РежимОбмена = "Выгрузка";
ОбработкаОбмена.ИмяФайлаПравил = "C:\Exchange\Rules_UT10_UT11.xml";
ОбработкаОбмена.ИмяФайлаОбмена = "C:\Exchange\Message_UT10_UT11.xml";
ОбработкаОбмена.УзелПланаОбмена = ПланыОбмена.ОбменУТ10УТ11.НайтиПоКоду("UT11");
ОбработкаОбмена.ВыгружатьТолькоИзмененные = Истина;

ОбработкаОбмена.ЗагрузитьПравилаОбмена();
ОбработкаОбмена.ВыполнитьВыгрузку();

При загрузке входящего пакета обработка считывает заголовок, принимает объекты и фиксирует номер принятого сообщения, что позволяет квитировать ранее отправленные данные:


ОбработкаОбмена = Обработки.УниверсальныйОбменДаннымиXML.Создать();
ОбработкаОбмена.РежимОбмена = "Загрузка";
ОбработкаОбмена.ИмяФайлаОбмена = "C:\Exchange\Message_UT11_UT10.xml";
ОбработкаОбмена.УзелПланаОбмена = ПланыОбмена.ОбменУТ10УТ11.НайтиПоКоду("UT11");

ОбработкаОбмена.ВыполнитьЗагрузку();

Способ 2. Низкоуровневое управление пакетами через объекты «ЗаписьСообщенияОбмена» и «ЧтениеСообщенияОбмена»

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

При формировании исходящего XML-пакета выгрузка оборачивается в объект ЗаписьСообщенияОбмена:


ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\Exchange\Message_Out.xml");

ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
УзелКорреспондент = ПланыОбмена.ОбменУТ10УТ11.НайтиПоКоду("UT11");

ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелКорреспондент);

// Выгрузка данных по правилам КД 2.0 в поток XML
// Обработка УниверсальныйОбменДаннымиXML производит запись внутри тега сообщения

ЗаписьСообщения.ЗакончитьЗапись();
ЗаписьXML.Закрыть();

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


ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл("C:\Exchange\Message_In.xml");

ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
ЧтениеСообщения.НачатьЧтение(ЧтениеXML);

// Чтение и загрузка объектов из XML

ЧтениеСообщения.ЗакончитьЧтение();
ЧтениеXML.Закрыть();

Способ 3. Прямой обмен через COM-соединение

Если базы расположены в одном сетевом контуре или на одном сервере, наиболее простым вариантом двустороннего обмена является инициирование сеанса из старой базы (8.1) в новую базу (8.3) через COM-соединение.

Разберем логику данного подхода:

  1. На стороне конфигурации 8.1 используется стандартная подсистема обмена данными старого образца.
  2. База 8.1 подключается к базе 8.3 через COMConnector (V83.COMConnector).
  3. В базе 8.3 встраивается или открывается обработка УниверсальныйОбменДаннымиXML, адаптированная под выполнение на стороне сервера.
  4. Через COM-объект вызываются методы чтения и записи, а синхронизация изменений и очистка регистрации происходят непосредственно в единой транзакции без выгрузки во внешние промежуточные файлы.

Важные технические нюансы и подводные камни

Проанализируем распространенные проблемы, возникающие при стыковке версий 8.1 и 8.3:

  1. Совместимость обработок обмена: нельзя запускать обработку УниверсальныйОбменДаннымиXML, взятую из релиза конфигурации 8.3, на платформе 8.1. В коде управляемых форм 8.3 используются директивы &НаКлиенте, &НаСервере и новые функции языка (например, СтрРазделить). В базе 8.1 необходимо использовать обработку из комплекта поставки «Конвертации данных 2» под платформу 8.1, а в базе 8.3 — актуальную версию для управляемых форм. Формат генерируемого XML-файла у них идентичен.
  2. Именование планов обмена: для корректного сопоставления узлов и узловых заголовков рекомендуется называть планы обмена в обеих конфигурациях строго одинаково.
  3. Теги заголовков обмена в БСП: в старых версиях механизмов обмена использовался служебный тег ДанныеПоФоновомуОбмену, который в современных версиях БСП не обрабатывается и может вызывать исключения при разборе XML. При возникновении ошибок чтения заголовка этот тег в структуре XML отключается в правилах или фильтруется кодом обработки.
  4. Автоматизация по расписанию: в базе 8.1 для автоматического выполнения обмена настраивается регламентное задание (в клиент-серверной архитектуре) либо организуется запуск фонового сеанса через командную строку операционной системы с передачей параметра /Execute. В базе 8.3 настраивается штатное регламентное задание с вызовом процедуры обмена.
← На главную