Автоматизация обмена данными между конфигурациями — одна из ключевых задач разработчика 1С. При использовании Универсального обмена данными в формате XML (далее УОД) часто возникают вопросы о том, как сделать процесс обмена полностью автономным. Рассмотрим подробнее, как программно управлять регистрацией изменений и настраивать узлы обмена.
Зачастую требуется выполнить первоначальную выгрузку большого массива данных за определенный период. Использовать для этого интерактивную обработку «Регистрация изменений для обмена» неудобно, если документов тысячи. Рассмотрим, как выполнить регистрацию программно.
Для регистрации объектов в узле плана обмена используйте метод ПланыОбмена.ЗарегистрироватьИзменения. Это наиболее эффективный и быстрый способ:
// Находим узел обмена
УзелДляОбмена = ПланыОбмена.ВашПланОбмена.НайтиПоКоду("КодУзла");
// Выбираем документы за период
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Документ.РеализацияТоваровУслуг
ГДЕ Дата МЕЖДУ &ДатаНачала И &ДатаКонца
И Проведен = ИСТИНА И ПометкаУдаления = ЛОЖЬ";
Запрос.УстановитьПараметр("ДатаНачала", Дата('20230101'));
Запрос.УстановитьПараметр("ДатаКонца", ТекущаяДата());
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
// Регистрируем изменения для узла
ПланыОбмена.ЗарегистрироватьИзменения(УзелДляОбмена, Выборка);
Обратите внимание, что метод ЗарегистрироватьИзменения работает максимально быстро. После выполнения этого кода все найденные документы попадут в очередь на выгрузку для выбранного узла.
Вопрос привязки узла к табличной части УОД программным путем часто вызывает затруднения. Важно понимать: УОД — это инструмент для исполнения правил. Если вы хотите сделать процесс автоматическим, не обязательно пытаться «вклиниться» в интерактивную таблицу. Рассмотрим верный подход.
Вместо ручной подстановки узла в таблицу УОД, лучше использовать параметры обмена. В модуле обработки УОД после загрузки правил обмена вы можете обращаться к коллекции Обработка.Параметры. Если вы разработчик правил, добавьте в КД 2.0 уникальный параметр, который будет определять сценарий выгрузки.
Пошаговый алгоритм автоматизации:
Обработка.ЗагрузитьПравилаОбмена().ВыполнитьВыгрузку система сама обработает выборку, если данные зарегистрированы в плане обмена.Многие разработчики сталкиваются с тем, что номер сообщения после выгрузки не увеличивается. Это происходит потому, что обычная выгрузка через УОД не управляет состоянием узла. Чтобы номер сообщения автоматически увеличивался, используйте штатный механизм формирования сообщения обмена платформы.
Рассмотрим пример правильной организации записи сообщения:
// Создаем запись сообщения для узла
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("ИмяФайла.xml");
ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелДляОбмена);
// Здесь вызываем процесс выгрузки данных через УОД
// ... логика выгрузки ...
// Завершаем запись - именно здесь увеличивается номер сообщения
ЗаписьСообщения.ЗакончитьЗапись();
ЗаписьXML.Закрыть();
Проанализировав ситуацию, можно сделать следующие выводы для вашей задачи:
ПланыОбмена для управления очередью данных. Это надежнее и быстрее, чем манипуляции с интерфейсом обработок.ПланыОбмена.УдалитьРегистрациюИзменений для очистки очереди после успешной выгрузки, если вы не используете автоматический механизм СоздатьЗаписьСообщения.Применяя эти методы, вы создадите надежный и гибкий механизм обмена, который будет легко поддерживать и развивать в дальнейшем. Работа с КД 2.0 требует внимательного отношения к метаданным, поэтому всегда проверяйте, чтобы объекты, которые вы регистрируете, входили в состав используемого ПланаОбмена.