При организации обмена между базами 1С часто возникает задача автоматизировать передачу данных в формате XML. При этом важно корректно обрабатывать регистрацию изменений: выгружать только изменившиеся объекты, привязывать их к конкретному номеру сообщения и удалять записи регистрации только после того, как база-приемник подтвердит успешное получение пакета.
Рассмотрим подробнее два основных подхода к решению этой задачи: применение встроенных средств Библиотеки Стандартных Подсистем (БСП) и создание индивидуальной схемы с использованием Конвертации Данных 2 (КД2) и доработанной обработки обмена.
Вариант 1. Использование подсистемы «Обмен данными» из БСП
Если обе обменивающиеся конфигурации построены на базе БСП (например, 1С:Документооборот, 1С:Управление торговлей или 1С:ERP), наиболее надежным и быстрым способом будет использование штатной подсистемы «Обмен данными» по варианту УОП (универсальный обмен по правилам).
Разберем по шагам, как работает этот механизм:
Подготовка правил обмена: В программе «Конвертация данных 2» создаются правила конвертации объектов (ПКО) и правила выгрузки (ПВУ).
Настройка узла обмена: В типовой конфигурации создается или используется существующий узел плана обмена. В подсистеме обмена данными БСП регистрируются правила и настраивается транспорт (через общий каталог, FTP, Email или веб-сервисы).
Автоматическое квитирование: БСП содержит встроенный механизм подтверждения приема (квитирования). При отправке пакета база-источник формирует исходящее сообщение с уникальным номером. База-приемник при загрузке фиксирует полученный номер и при встречном сеансе отправляет квитанцию. Получив квитанцию, источник автоматически удаляет регистрацию изменений для всех объектов, переданных в подтвержденном сообщении.
Автоматический запуск: В БСП уже встроена интеграция с регламентными заданиями, что позволяет выполнять обмен по расписанию без написания дополнительного кода.
Вариант 2. Разработка собственной схемы на базе КД2 и универсальной обработки
Если одна из конфигураций устарела, является нетиповой или не содержит полноценную подсистему обмена БСП, можно реализовать обмен с использованием плана обмена и обработки V8Exchan82.epf (Универсальный обмен данными в формате XML).
Проанализируем структуру такой реализации:
Создание плана обмена и подписок на события: В конфигураторе добавляется узел плана обмена (без авторегистрации или с выборочной авторегистрацией). Создаются подписки на события (например, ПриЗаписи), которые регистрируют изменения нужных объектов на созданном узле обмена через метод ЗафиксироватьИзменения().
Подготовка правил обмена в КД2: Разрабатываются правила выгрузки и конвертации объектов для пары конфигураций.
Доработка обработки выгрузки/загрузки: В обработке обмена логика расширяется следующим образом:
При выгрузке формируется заголовок сообщения с номером исходящего пакета. Переданным объектам в таблицах регистрации присваивается соответствующий номер сообщения.
При загрузке в приемнике формируется файл-ответ (квитанция), содержащий номер успешно принятого пакета.
При чтении ответа на стороне источника вызывается очистка регистрации изменений по номеру сообщения.
Создание регламентного задания: Пишется обертка в виде программного модуля, который по расписанию вызывается регламентным заданием и выполняет выгрузку/загрузку данных в фоновом режиме.
Программная очистка регистрации изменений и квитирование
Посмотрим на пример кода, демонстрирующий, как программно выполнить удаление регистрации изменений на узле обмена по номеру полученного подтверждения:
// Удаление регистрации изменений по полученному номеру сообщения
УзелОбмена = ПланыОбмена.МойПланОбмена.НайтиПоКоду("Приемник");
НомерПринятогоСообщения = 42; // Номер пакета, полученный из квитанции
ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, НомерПринятогоСообщения);
Вызов метода УдалитьРегистрациюИзменений() с указанием конкретного номера сообщения удаляет записи регистрации для всех объектов, номер исходящего сообщения которых меньше или равен переданному значению.
Важные технические нюансы и тонкости реализации
Проанализируем потенциальные проблемы, которые могут возникнуть при программной настройке обмена:
Опасность немедленного снятия регистрации: Не рекомендуется очищать регистрацию изменений сразу после выгрузки файла (без ожидания ответа от приемника). Если при передаче произойдет сбой сети или файл заблокируется, данные будут утеряны для последующих выгрузок.
Установка узла в дереве правил выгрузки: При программном вызове обработки универсального обмена недостаточно просто передать узел в параметр обработки. Необходимо рекурсивно обойти дерево правил выгрузки и явно присвоить ссылку на узел обмена строкам правил, иначе обработка проигнорирует регистрацию и выгрузит всю базу полностью.
Накопление регистраций по связанным регистрам: При регистрации документов часто автоматически создаются записи в таблицах регистрации движений (регистров накопления и сведений). Если эти регистры не выгружаются по правилам обмена, их регистрация останется неочищенной, что приведет к росту таблиц БД и замедлению работы системы.