При интеграции устаревших конфигураций на платформе 1С:Предприятие 8.1 (например, Управление торговлей 10.2 / 10.3) с современными решениями на платформе 8.3 и управляемых формах (такими как Управление торговлей 11) разработчики сталкиваются с принципиальной разницей подсистем синхронизации данных. В современных версиях Библиотеки стандартных подсистем (БСП) основным стандартом выступает обмен в формате EnterpriseData (Конвертация данных 3.0), тогда как конфигурации на платформе 8.1 работают по классическим правилам конвертации (Конвертация данных 2.0) через XML-файлы.
Разберем, как объединить правила конвертации данных КД 2.0 с механизмами планов обмена для обеспечения полноценной двусторонней или односторонней синхронизации с контролем изменений и квитированием пакетов.
Проанализируем базовые сущности, участвующие в процессе:
Рассмотрим наиболее надежный способ реализации файлового обмена, не требующий сложного внедрения механизмов БСП в старую конфигурацию 8.1. Обработка УниверсальныйОбменДаннымиXML умеет работать в связке с планами обмена: выгружать только зарегистрированные изменения и формировать корректные заголовки сообщений.
Разберем по шагам настройку в обеих информационных базах:
УниверсальныйОбменДанными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");
ОбработкаОбмена.ВыполнитьЗагрузку();
Если требуется полный контроль над процессом формирования файлов и очисткой регистрации изменений, рассмотрим платформенный механизм записи и чтения сообщений обмена.
При формировании исходящего 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.Закрыть();
Если базы расположены в одном сетевом контуре или на одном сервере, наиболее простым вариантом двустороннего обмена является инициирование сеанса из старой базы (8.1) в новую базу (8.3) через COM-соединение.
Разберем логику данного подхода:
COMConnector (V83.COMConnector).УниверсальныйОбменДаннымиXML, адаптированная под выполнение на стороне сервера.Проанализируем распространенные проблемы, возникающие при стыковке версий 8.1 и 8.3:
УниверсальныйОбменДаннымиXML, взятую из релиза конфигурации 8.3, на платформе 8.1. В коде управляемых форм 8.3 используются директивы &НаКлиенте, &НаСервере и новые функции языка (например, СтрРазделить). В базе 8.1 необходимо использовать обработку из комплекта поставки «Конвертации данных 2» под платформу 8.1, а в базе 8.3 — актуальную версию для управляемых форм. Формат генерируемого XML-файла у них идентичен.ДанныеПоФоновомуОбмену, который в современных версиях БСП не обрабатывается и может вызывать исключения при разборе XML. При возникновении ошибок чтения заголовка этот тег в структуре XML отключается в правилах или фильтруется кодом обработки./Execute. В базе 8.3 настраивается штатное регламентное задание с вызовом процедуры обмена.