Как реализовать механизм одностороннего обмена данными из 1С с помощью плана обмена?

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

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

Понимание механизма регистрации изменений

Основная идея ПланОбмена заключается в таблице Изменения, которая автоматически создается для каждого объекта (справочника или документа), включенного в состав плана. Когда объект записывается в базу, система создает запись в этой таблице для каждого узла обмена, если включена Авторегистрация.

Важно: Если вы хотите контролировать процесс обмена самостоятельно, вы можете отключить авторегистрацию и использовать метод ПланыОбмена.ЗарегистрироватьИзменения(). Это позволяет передавать только те объекты, которые соответствуют вашим бизнес-условиям (например, наличие заполненной картинки у товара).

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

Рассмотрим, как автоматизировать регистрацию объектов. Для этого создадим подписку на событие ПриЗаписи для нужных нам типов объектов:


Процедура НоменклатураПриЗаписи(Источник, Отказ) Экспорт
    УзелОбмена = ПолучитьУзелОбмена();
    Если УзелОбмена <> Неопределено Тогда
        // Проверка условий перед регистрацией
        Если ОтвечаетТребованиям(УзелОбмена, Источник.Ссылка) Тогда
            ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, Источник.Ссылка);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Выборка данных и подтверждение обмена

Для того чтобы передать данные, нам нужно выбрать только те объекты, которые изменились, отправить их во внешнюю систему, и, если всё прошло успешно, подтвердить получение. Подтверждение выполняется методом ПланыОбмена.УдалитьРегистрациюИзменений().

Если этот метод не вызвать, запись в Изменения останется, и при следующем сеансе обмена объект будет снова предложен к отправке. Это дает нам надежный механизм повторных попыток при ошибках.


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

Ключевые принципы работы

  1. Регистрация: Используйте ПланыОбмена.ЗарегистрироватьИзменения(), чтобы вручную помечать объекты, требующие выгрузки.
  2. Выборка: Для получения измененных объектов проще всего использовать запрос к таблице Изменения соответствующего метаданного.
  3. Удаление изменений: Вызывайте ПланыОбмена.УдалитьРегистрациюИзменений() только после того, как получили подтверждение от внешней системы (например, HTTP-код 200 от сайта).
  4. Логирование: Если обмен не удался, записывайте ошибку в отдельный РегистрСведений. Это позволит администраторам быстро понять, какой именно товар не прошел синхронизацию.

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

Если вам не требуется стандартный обмен 1С, вы можете самостоятельно формировать XML-структуру. Используйте для этого ЗаписьXML или XDTO. Главное — помнить, что механизм планов обмена выступает в роли «очереди задач», а не жесткого формата передачи данных. Такой подход делает систему гибкой и легкой в обслуживании.

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

← На главную