Как настроить раздельный обмен данными между КА 1 и УТ 10 без ошибок нумерации сообщений?

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

При организации обмена между конфигурациями 1С:Комплексная автоматизация 1 и 1С:Управление торговлей 10 нередко возникает задача разнести потоки данных по времени. Например, выгрузка справочников (номенклатуры, контрагентов) из КА в УТ должна происходить утром, а загрузка оформленных документов из УТ в КА — вечером.

Обычной ошибкой при реализации такого требования становится создание двух независимых планов обмена между одной и той же парой баз. В результате платформенные механизмы 1С начинают путать узлы, сбрасывать счетчики или выдавать ошибку несоответствия номеров сообщений обмена. Разберем подробнее, почему возникают эти сбои и как правильно построить схему синхронизации.

Причина возникновения ошибки нумерации сообщений

Проанализируем работу платформы 1С при синхронизации данных. В основе любого плана обмена лежит механизм регистрации изменений для узлов-корреспондентов. Для каждого узла система хранит два ключевых числовых реквизита:

  1. НомерОтправленного — номер последнего сформированного пакета данных для этого узла.
  2. НомерПринятого — номер последнего успешно подтвержденного пакета от узла-приемника.

Платформа жестко контролирует последовательность номеров сообщений. Если в базу поступает пакет с номером, который меньше или равен значению НомерПринятого, система блокирует загрузку с ошибкой рассогласования. При попытке настроить два разных плана обмена для одних и тех же информационных баз типовые механизмы идентификации (по префиксу базы и коду узла) начинают конфликтовать, что приводит к перезаписи настроек узла или сбою счетчиков пакетов.

Решение 1. Использование единого плана обмена с несколькими сценариями

Наиболее корректный способ организации интеграции — использование одного плана обмена и одной пары узлов для двух баз. Чтобы разнести по времени выгрузку справочников и загрузку документов, разберем настройки сценариев обмена.

  1. Оставляем один план обмена в обеих конфигурациях (например, штатный обмен «Комплексная автоматизация 1.1 — Управление торговлей 10.3»).
  2. Создаем первый сценарий обмена (для справочников). В настройках этого сценария и правилах выгрузки данных (ПВД) отключаем регистрацию и выгрузку документов. Настраиваем расписание запуска (например, утром).
  3. Создаем второй сценарий обмена (для документов). В нем включаем выгрузку только нужных видов документов и отключаем выгрузку справочников. Настраиваем отдельное расписание.

При такой схеме сквозная нумерация пакетов в свойствах узла НомерОтправленного и НомерПринятого не нарушается, так как все пакеты проходят через единую пару узлов плана обмена.

Решение 2. Программный сброс или синхронизация номеров сообщений

Если ошибка нумерации уже возникла из-за сбоя счетчиков, необходимо выровнять номера сообщений в обеих базах. Рассмотрим, как это сделать программно. В обработке или через вызов встроенного языка сбрасываются счетчики узла:


УзелОбмена = ПланыОбмена.МойПланОбмена.НайтиПоКоду("УТ");
Если ЗначениеЗаполнено(УзелОбмена) Тогда
    ОбъектУзла = УзелОбмена.ПолучитьОбъект();
    ОбъектУзла.НомерОтправленного = 0;
    ОбъектУзла.НомерПринятого = 0;
    ОбъектУзла.Записать();
КонецЕсли;

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

Решение 3. Управление регистрацией через управляемую регистрацию объектов

Чтобы объекты не регистрировались лишний раз перед выгрузкой конкретных данных, рекомендуется настроить выборочную регистрацию изменений. Посмотрим на основные шаги:

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

Альтернативные варианты обмена данными

Если штатный механизм планов обмена не подходит под специфику задач, рассмотрим альтернативные архитектурные решения:

  1. Универсальный обмен данными в формате XML: выгрузка и загрузка данных выполняются по правилам конвертации (КД 2.0) с помощью внешней обработки. Запуск обработки настраивается через регламентное задание без использования счетчиков узлов плана обмена.
  2. Прямое COM-соединение: при выполнении обмена одна база подключается к другой через COMConnector и напрямую записывает созданные объекты. Это исключает необходимость формирования XML-файлов и отслеживания номеров пакетов.
  3. HTTP-сервисы: передача данных по REST-протоколу, при которой приемник запрашивает у источника только нужный класс данных (например, справочники или документы за период) по мере необходимости.
← На главную