При сопровождении старых систем автоматизации перед разработчиками нередко встают нетривиальные задачи. Одна из таких проблем — организация регулярного и надежного обмена данными между конфигурациями разных поколений. Например, когда требуется подружить «Управление торговлей 10.2» (УТ 10.2), работающую на платформе 1С:Предприятие 8.0, и «Бухгалтерию предприятия 2.0» (БП 2.0), функционирующую на современной платформе 1С:Предприятие 8.3.
В этой статье мы подробно разберем, почему стандартные попытки выгрузить правила обмена часто заканчиваются неудачей, проанализируем ошибки ручного изменения правил, оценим риски создания самописных обработок и предоставим пошаговый алгоритм решения этой задачи с использованием инструмента «Конвертация данных 2.1».
Основная проблема, с которой сталкивается программист при попытке выгрузить структуру метаданных из старой конфигурации УТ 10.2 (на платформе 8.0), — это использование неподходящей версии внешней обработки выгрузки. Современные релизы конфигурации «Конвертация данных 2.1» (КД) комплектуются обработками выгрузки метаданных, предназначенными для платформ 8.2 и 8.3 (например, MD82Exp.epf или MD83Exp.epf).
Если запустить обработку MD83Exp.epf в базе данных, работающей под управлением платформы 1С 8.0, система выдаст критическую ошибку. Это происходит из-за того, что в коде современных обработок используются методы, свойства и объекты метаданных, которые появились только в версиях платформы 8.2 и 8.3 (например, работа с управляемыми формами, новые функции работы со строками, встроенные методы сериализации и т.д.). В платформе 8.0 этих механизмов просто не существует.
Для успешного решения этой проблемы нам потребуется использовать специализированную обработку выгрузки метаданных именно для версии 8.0 — MD80Exp.epf. Найти ее можно в старых дистрибутивах КД или на дисках ИТС за 2011–2013 годы.
Часто разработчики пытаются пойти по более простому, как им кажется, пути: взять готовые правила обмена (например, для связки УТ 10.3 – БП 2.0) и просто отредактировать XML-файл вручную, изменив номера версий конфигураций в заголовке файла. Это неизбежно приводит к возникновению «ошибки формата» при попытке загрузить правила в обработку обмена. Выясним основные причины этой ошибки:
V8Exchan.epf, а для платформы 8.3 — V8Exchan83.epf. Попытка передать файл правил, предназначенный для одной версии обработчика, в другую без предварительной конвертации и приводит к синтаксическому сбою разбора формата XML.Когда стандартные инструменты не работают, у разработчика возникает соблазн написать собственную обработку выгрузки/загрузки данных через XML или COM-соединение. Рассмотрим, почему это решение в долгосрочной перспективе является неэффективным и опасным:
Рассмотрим детально, как правильно настроить стабильный обмен между УТ 10.2 и БП 2.0, используя методологию «Конвертации данных 2.1».
Для начала нам необходимо получить точные структуры метаданных обеих конфигураций в формате XML.
MD80Exp.epf (ее можно найти в каталоге шаблонов установленной КД 2.1).UT102_metadata.xml). Нажмите кнопку «Выгрузить».MD83Exp.epf (или MD82Exp.epf, если база работает в режиме совместимости).BP20_metadata.xml) и выполните выгрузку.Теперь нам нужно настроить правила сопоставления объектов в базе «Конвертация данных».
UT102_metadata.xml (источник) и BP20_metadata.xml (приемник).Чтобы обмен переносил только измененные данные, необходимо задействовать механизм планов обмена.
Проанализируем конфигурацию УТ 10.2. Если в ней отсутствует подходящий типовой план обмена, его необходимо создать в конфигураторе:
ОбменУТ102БП20).РеализацияТоваровУслуг, ПоступлениеТоваровУслуг, справочники Контрагенты, Номенклатура).Пример кода для программной регистрации объекта на созданном плане обмена (если авторегистрация отключена или требуется зарегистрировать данные вручную):
// Процедура регистрирует изменения конкретного документа на узле обмена
Процедура ЗарегистрироватьИзменениеДокумента(ДокументСсылка, КодУзла) Экспорт
УзелОбмена = ПланыОбмена.ОбменУТ102БП20.НайтиПоКоду(КодУзла);
Если Не УзелОбмена.Пустая() Тогда
ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, ДокументСсылка);
КонецЕсли;
КонецПроцедуры
После сохранения созданных правил обмена из КД в файл (например, Rules.xml), перейдем к непосредственному выполнению обмена:
V8Exchan.epf.Rules.xml и имя выходного файла данных (например, Data_UT_to_BP.xml).ОбменУТ102БП20, чтобы выгрузить только измененные объекты. Нажмите кнопку «Выгрузить данные».V8Exchan83.epf).Data_UT_to_BP.xml и нажмите кнопку «Загрузить данные».Пример чтения XML-файла данных на стороне БП 2.0, если вы захотите реализовать чтение через фоновое задание или кастомный скрипт загрузки:
// Пример безопасного чтения XML-файла выгрузки на платформе 8.3
Процедура ВыполнитьЗагрузкуДанныхИзФайла(ПутьКФайлу) Экспорт
ФайлОбмена = Новый ЧтениеXML;
Попытка
ФайлОбмена.ОткрытьФайл(ПутьКФайлу);
Исключение
ЗаписьЖурналаРегистрации("ОбменДанными", УровеньЖурналаРегистрации.Ошибка, , ,
"Не удалось открыть файл обмена: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
// Здесь запускается чтение структуры и загрузка объектов через специализированные механизмы КД
// ...
ФайлОбмена.Закрыть();
КонецПроцедуры
Использование этого системного подхода гарантирует целостность базы данных БП 2.0, исключает появление дублирующихся элементов и позволяет автоматизировать процесс обмена до запуска по расписанию через регламентные задания.