Как автоматизировать выгрузку данных через УОД XML и настроить регистрацию изменений для планов обмена?

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

Автоматизация обмена данными между конфигурациями — одна из ключевых задач разработчика 1С. При использовании Универсального обмена данными в формате XML (далее УОД) часто возникают вопросы о том, как сделать процесс обмена полностью автономным. Рассмотрим подробнее, как программно управлять регистрацией изменений и настраивать узлы обмена.

Регистрация изменений для обмена данными по периоду

Зачастую требуется выполнить первоначальную выгрузку большого массива данных за определенный период. Использовать для этого интерактивную обработку «Регистрация изменений для обмена» неудобно, если документов тысячи. Рассмотрим, как выполнить регистрацию программно.

Для регистрации объектов в узле плана обмена используйте метод ПланыОбмена.ЗарегистрироватьИзменения. Это наиболее эффективный и быстрый способ:


// Находим узел обмена
УзелДляОбмена = ПланыОбмена.ВашПланОбмена.НайтиПоКоду("КодУзла");

// Выбираем документы за период
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Документ.РеализацияТоваровУслуг 
ГДЕ Дата МЕЖДУ &ДатаНачала И &ДатаКонца 
И Проведен = ИСТИНА И ПометкаУдаления = ЛОЖЬ";
Запрос.УстановитьПараметр("ДатаНачала", Дата('20230101'));
Запрос.УстановитьПараметр("ДатаКонца", ТекущаяДата());

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

// Регистрируем изменения для узла
ПланыОбмена.ЗарегистрироватьИзменения(УзелДляОбмена, Выборка);

Обратите внимание, что метод ЗарегистрироватьИзменения работает максимально быстро. После выполнения этого кода все найденные документы попадут в очередь на выгрузку для выбранного узла.

Программная работа с обработкой УОД XML

Вопрос привязки узла к табличной части УОД программным путем часто вызывает затруднения. Важно понимать: УОД — это инструмент для исполнения правил. Если вы хотите сделать процесс автоматическим, не обязательно пытаться «вклиниться» в интерактивную таблицу. Рассмотрим верный подход.

Вместо ручной подстановки узла в таблицу УОД, лучше использовать параметры обмена. В модуле обработки УОД после загрузки правил обмена вы можете обращаться к коллекции Обработка.Параметры. Если вы разработчик правил, добавьте в КД 2.0 уникальный параметр, который будет определять сценарий выгрузки.

Пошаговый алгоритм автоматизации:

  1. Загружаем правила обмена: Обработка.ЗагрузитьПравилаОбмена().
  2. Проверяем наличие узла или уникального ключа в параметрах.
  3. В процедуре ВыполнитьВыгрузку система сама обработает выборку, если данные зарегистрированы в плане обмена.

Решение проблемы с нумерацией сообщений

Многие разработчики сталкиваются с тем, что номер сообщения после выгрузки не увеличивается. Это происходит потому, что обычная выгрузка через УОД не управляет состоянием узла. Чтобы номер сообщения автоматически увеличивался, используйте штатный механизм формирования сообщения обмена платформы.

Рассмотрим пример правильной организации записи сообщения:


// Создаем запись сообщения для узла
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("ИмяФайла.xml");
ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелДляОбмена);

// Здесь вызываем процесс выгрузки данных через УОД
// ... логика выгрузки ...

// Завершаем запись - именно здесь увеличивается номер сообщения
ЗаписьСообщения.ЗакончитьЗапись();
ЗаписьXML.Закрыть();

Рекомендации по архитектуре

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

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

← На главную