Перейти к основному содержимому

Планы обмена и РИБ 1С

Разработчику Архитектору

Два механизма на одной основе

Обмен между информационными базами 1С:Предприятие строится на объекте метаданных План обмена, регистрации изменений и XML-сообщениях. Платформа предлагает два уровня:

Универсальный обменРИБ (распределённая ИБ)
Конфигурации узловМогут различатьсяТолько идентичные
УзлыЛюбые ИБ и сторонние системыТолько базы 1С 8
В сообщенииОбычно изменения данныхДанные и конфигурация
ТопологияПроизвольная, без «главного»Дерево — один главный узел
НастройкаКод, коллизии, транспортЧасто интерактивно, без кода

Подробнее про произвольные схемы и интеграцию с не-1С — 137.md. Здесь — план обмена и РИБ.


План обмена

План обмена отвечает на три вопроса интеграции:

  1. С кем обмениваемся — узлы плана (элементы, как строки справочника).
  2. Чем — состав объектов конфигурации на закладке Состав плана обмена.
  3. Как — номера сообщений, транспорт (файл, FTP, HTTP), обработчики событий.

У каждой ИБ есть предопределённый узел ЭтотУзел — «мы сами». Остальные узлы — контрагенты обмена (филиал, склад, центральный офис).

Реквизиты узла хранят параметры участника: привязка к складу, каталог обмена, URL FTP и т.д.


Регистрация изменений

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

Регистрация включается для типов из состава плана обмена. При записи объекта платформа может автоматически добавить строки в таблицы регистрации.

Программная регистрация:

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

Можно зарегистрировать весь тип (Метаданные.Справочники.Номенклатура) или удаление (УдалениеОбъекта).

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

  • Гарантированная доставка — очистка сразу после формирования сообщения.
  • Ожидание квитанции — очистка по номеру последнего принятого сообщения из заголовка входящего пакета (ReceivedNo).

Сообщение обмена

Сообщение — XML-документ с заголовком и телом. Заголовок (пространство имён http://v8.1c.ru/messages) содержит:

ЭлементСмысл
ExchangePlanИмя плана обмена
From / ToКоды узла-отправителя и получателя
MessageNoПорядковый номер исходящего сообщения
ReceivedNoНомер последнего сообщения, принятого от адресата (квитанция)

Тело — XML-сериализация изменённых данных (ЗаписатьXML / ПрочитатьXML).

Выгрузка (упрощённо):

ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ИмяФайла);
ЗаписьXML.ЗаписатьОбъявлениеXML();

Узел = ПланыОбмена.Магазины.НайтиПоКоду("Филиал");
ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
ЗаписьСообщения.НачатьЗапись(ЗаписьXML, Узел);

ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения, 1000); // пакет по 1000 в транзакции

ЗаписьСообщения.ЗакончитьЗапись();
ЗаписьXML.Закрыть();

Загрузка:

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяФайла);

ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
ЧтениеСообщения.НачатьЧтение(ЧтениеXML);

ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения, 1000);

ЧтениеСообщения.ЗакончитьЧтение();
ЧтениеXML.Закрыть();

При загрузке для каждого объекта задают:

Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель;
Данные.ОбменДанными.Загрузка = Истина;
Данные.Записать();

РИБ — распределённая информационная база

РИБ — частный случай плана обмена для одинаковых конфигураций в иерархии узлов:

  • Корневой узел — единственное место изменения метаданных; обновление конфигурации стекает вниз по дереву.
  • Данные можно менять в любом узле; изменения синхронизируются с соседями (главный ↔ подчинённые).
  • Узел обменивается только с главным и подчинёнными, не «через всю сеть».

Типовые операции РИБ

ДействиеКак
Создать филиальную базуСоздать начальный образ узла (интерактивно или ПланыОбмена.СоздатьНачальныйОбраз())
Выгрузить измененияЗаписать изменения → файл (опционально ZIP)
Загрузить измененияПрочитать изменения из файла

Начальный образ создаёт новую пустую ИБ, переносит конфигурацию и отфильтрованные данные, настраивает ЭтотУзел и ссылку на главный узел.

Фильтрация и коллизии

В модуле плана обмена задают обработчики:

  • ПриОтправкеДанныхПодчиненному — отсечь лишнее (ОтправкаЭлемента = Удалить);
  • ПриПолученииДанныхОтГлавного / ПриПолученииДанныхОтПодчиненного — игнорировать или переопределить приоритет при конфликте (ПолучениеЭлемента = Игнорировать).

Так реализуют обмен «только свой склад», разрешение коллизий (кто победил при одновременном изменении) и отложенную отправку изменений главному узлу.


РИБ или универсальный обмен

ЗадачаВыбор
Филиалы с одной типовой конфигурациейРИБ
УТ ↔ Бухгалтерия (разные конфигурации)Универсальный + правила конвертации
Обмен с CRM/SAPУниверсальный или HTTP/OData
Обновление конфигурации по деревуРИБ

Связанные материалы


Проверка себя

  • Что хранит предопределённый узел ЭтотУзел?
  • Зачем в заголовке сообщения поле ReceivedNo?
  • Где в РИБ меняют конфигурацию — в филиале или в корне?

См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").