При переходе с ручного обмена через обработку УниверсальныйОбменДаннымиПрофилемXML на автоматическую синхронизацию в современных конфигурациях, таких как УТ 11.1 и УТ 11.3, разработчики часто сталкиваются с проблемой: в интерфейсе предлагается только «Универсальный формат» (EnterpriseData), который не поддерживает стандартные XML-правила из Конвертации данных 2.1. Однако механизмы Библиотеки стандартных подсистем (БСП) позволяют использовать старые добрые правила обмена в автоматическом режиме. Разберем пошагово, как это реализовать.
Прежде всего, проанализируем ситуацию. В «Управлении торговлей 11» существует два основных способа синхронизации:
ПравилаКонвертации.xml и ПравилаРегистрации.xml.Если вы уже настроили правила в Конвертации данных 2.1, вам нужен второй вариант. Основная сложность заключается в том, что в новых релизах БСП создание обмена по правилам КД 2.1 через стандартный помощник может быть скрыто или ограничено. Нам потребуется задействовать механизмы планов обмена и специальных регистров сведений.
Для того чтобы обмен работал автоматически (по расписанию), система должна знать, какие именно объекты нужно выгружать. При ручном обмене вы выбираете данные фильтрами, а в автоматическом — за это отвечают Правила регистрации данных (ПРД). Рассмотрим, как это работает:
План обмена фиксирует изменения объектов. Как только вы записываете документ или элемент справочника, в ТаблицуРегистрацииИзменений этого плана обмена записывается ссылка. Без ПРД система либо не зарегистрирует ничего, либо будет регистрировать всё подряд, что приведет к огромным пакетам выгрузки. Выясним, как создать файл правил регистрации в КД 2.1:
Проанализируем, куда именно в УТ 11 нужно поместить созданные файлы. В конфигурациях на базе БСП существует специальный регистр сведений ПравилаОбменаДанными. Именно он связывает конкретный План обмена с вашими XML-файлами. Рассмотрим алгоритм действий:
Сначала нам нужно найти этот регистр. В интерфейсе «1С:Предприятие» он может быть скрыт. Воспользуйтесь меню «Все функции» (или «Функции для технического специалиста») и найдите регистр Правила обмена данными.
В этом регистре вы увидите записи для всех настроенных синхронизаций. Чтобы загрузить свои правила:
Иногда типовых правил регистрации недостаточно. Посмотрим на пример кода, который можно использовать в модуле объекта или в обработчике правил, чтобы принудительно зарегистрировать объект на узле обмена:
// Пример регистрации объекта на узле обмена программно
ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, СсылкаНаОбъект);
// Если нужно зарегистрировать набор записей регистра
НаборЗаписей = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка);
ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, НаборЗаписей);
Этот код позволяет гибко управлять тем, что именно попадет в следующий сеанс синхронизации.
После того как правила загружены и регистрация настроена, нам нужно заставить систему обмениваться данными без участия пользователя. Разберем, как настроить расписание:
Часто при автоматическом обмене возникают ошибки, которые не видны при ручной выгрузке. Проанализируем ситуацию: как понять, почему обмен «падает»? В БСП предусмотрен механизм отладки. В регистре Правила обмена данными можно установить флаг «Режим отладки выгрузки». Это позволит системе создать внешний файл модуля, который вы сможете открыть в Конфигураторе и поставить точки останова в обработчиках ПередВыгрузкой или ПриВыгрузке.
Важно помнить, что УТ 11.1 и УТ 11.3 сильно различаются по структуре метаданных. При настройке в КД 2.1 обязательно используйте актуальные описания (.xml файлы метаданных), выгруженные из обеих баз с помощью обработки MD83Exp.epf. Если вы попытаетесь обратиться к реквизиту, который был переименован или удален в версии 11.3, обмен прервется с ошибкой XML-парсера.
Если вы не хотите менять конфигурацию и добавлять новые Планы обмена, можно пойти по пути создания внешней обработки, которая будет запускаться регламентным заданием. Рассмотрим пример логики такой обработки:
// Параметры для универсальной обработки обмена
ПараметрыОбмена = Новый Структура;
ПараметрыОбмена.Вставить("ИмяФайлаПравил", "C:\Exchange\Rules.xml");
ПараметрыОбмена.Вставить("ИмяФайлаДанных", "C:\Exchange\Data.xml");
ПараметрыОбмена.Вставить("РежимОбмена", "Выгрузка");
// Вызов стандартной обработки
ОбработкаОбмена = Обработки.УниверсальныйОбменДаннымиXML.Создать();
ОбработкаОбмена.ИмяФайлаПравилОбмена = ПараметрыОбмена.ИмяФайлаПравил;
ОбработкаОбмена.ИмяФайлаСообщенияОбмена = ПараметрыОбмена.ИмяФайлаДанных;
ОбработкаОбмена.ЗагрузитьПравилаОбмена();
ОбработкаОбмена.ВыполнитьВыгрузку();
Этот способ проще в реализации «на скорую руку», но он менее надежен, так как не использует механизм квитирования (подтверждения получения данных), который есть в полноценных планах обмена БСП. Поэтому для постоянного обмена между УТ 11.1 и 11.3 мы рекомендуем именно полноценную интеграцию через Планы обмена и регистр Правила обмена данными.