Как настроить подтверждение получения данных (обратку) при синхронизации ЗУП 3.1 и УПП 1.3 через свой план обмена?

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

Синхронизация данных между современными конфигурациями на базе Библиотеки стандартных подсистем (БСП), такими как ЗУП 3.1, и решениями предыдущих поколений, такими как УПП 1.3, часто сталкивается с техническими сложностями. Одной из наиболее распространенных проблем является отсутствие «обратки» — квитирования сообщений. Без этого механизма система-отправитель не получает подтверждения о том, что данные успешно доставлены, и продолжает регистрировать одни и те же изменения для повторной выгрузки. Рассмотрим, как решить проблему формирования файла ответа на стороне УПП 1.3 при использовании собственного плана обмена.

Почему возникает ошибка определения «Источника», «Приемника» и «Ид»?

Проанализируем ситуацию: при попытке выгрузки ответа из УПП 1.3 система выдает ошибку, указывая на отсутствие ключевых параметров в структуре Конвертация. Выясним причину этого поведения. В архитектуре БСП заголовок XML-сообщения формируется на основе данных, прописанных в модуле менеджера плана обмена. Если в процедуре ПриПолученииНастроек не заполнены идентификаторы конфигураций, стандартная обработка обмена не может инициализировать процесс.

Разберем, как должны выглядеть настройки в модуле менеджера плана обмена на стороне ЗУП 3.1. Нам необходимо жестко определить параметры корреспондента, чтобы механизм обмена понимал, к кому он обращается:


Процедура ПриПолученииНастроек(Настройки) Экспорт
    Настройки.Определения.Вставить("ИмяКонфигурацииПриемника", "УправлениеПроизводственнымПредприятием");
    Настройки.Определения.Вставить("ИмяКонфигурацииИсточника", "ЗарплатаИУправлениеПерсоналом");
    // Другие настройки обмена...
КонецПроцедуры

Решение проблемы отсутствия файла выгрузки в УПП 1.3

Рассмотрим основной шаг решения. Проблема часто заключается в том, что УПП 1.3 (использующая классический механизм обмена через «Конвертацию данных 2.0») отказывается формировать пакет, если для данного плана обмена не загружены правила конвертации. Даже если вы планируете передавать данные только в одну сторону (из ЗУП в УПП), для успешного квитирования УПП должна отправить назад технический файл сообщения.

Посмотрим на алгоритм действий для исправления этой ситуации:

  1. Создание пустых правил обмена: В конфигурации «Конвертация данных 2.0» создадим новые правила, где источником выступает УПП, а приемником — ЗУП.
  2. Минимальная настройка: Необязательно настраивать конвертацию всех объектов. Достаточно создать одно пустое ПВД (правило выгрузки данных) для какого-нибудь простого справочника (например, Валюты) с условием Отказ = Истина;, чтобы реальные данные не передавались.
  3. Загрузка правил в УПП: Загрузим полученный XML-файл правил в настройку синхронизации данных в УПП 1.3.

Как только в УПП появятся правила, объект УниверсальныйОбменДаннымиПоПравилам сможет инициализироваться, прочитать параметры узла и сформировать заголовок сообщения с номером принятого пакета. Именно этот номер в заголовке XML-файла и является «квитанцией» для ЗУП.

Настройка регистрации изменений для корректного квитирования

Выясним, как заставить систему очищать таблицу регистрации. В ЗУП 3.1 объекты будут висеть в регистрации до тех пор, пока от УПП не придет сообщение, в котором номер СообщениеПринято будет больше или равен номеру сообщения, в котором эти объекты были отправлены.

Для эффективной работы обмена выполним следующие настройки:

Использование программного вызова для отладки

Если автоматическая синхронизация через интерфейс все равно дает сбои, проанализируем программный способ формирования «обратки». Разберем пример кода, который можно использовать во внешней обработке в УПП для принудительной отправки подтверждения:


УзелОбъекта = ПланыОбмена.МойСобственныйПланОбмена.НайтиПоКоду("КодЗУП").ПолучитьОбъект();
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\Exchange\Response_from_UPP.xml");
ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбъекта.Ссылка);
// Здесь может быть вызов выгрузки по правилам, но для квитанции достаточно заголовка
ЗаписьСообщения.ЗакончитьЗапись();
ЗаписьXML.Закрыть();

Важный момент: При работе с ЗаписьСообщения.НачатьЗапись() система автоматически берет текущий номер отправленного и номер принятого сообщения из узла плана обмена и помещает их в заголовок XML. Когда ЗУП загрузит этот файл, она автоматически удалит записи из таблицы РегистрацияИзменений для данного узла, так как поймет, что пакеты успешно доставлены.

Резюме и практические советы

Подводя итоги, отметим: для успешной синхронизации между ЗУП 3.1 и УПП 1.3 недостаточно просто настроить выгрузку в одну сторону. Необходимо обеспечить техническую возможность формирования ответного сообщения. Главный секрет — это наличие загруженных правил обмена (пусть даже пустых) в конфигурации-приемнике. Это инициализирует механизмы БСП и позволяет корректно передавать номера сообщений, избавляя вас от бесконечного накопления регистраций и дублирования данных.

← На главную