Схема выгрузки объектов из базы – источника
1. Для регистрации объектов, подлежащих выгрузки, используем План обмена; собственно, регистрация производится по какому-либо правилу бизнес-процесса, например, при сохранении изменения объекта 1С.
2. Инициализацию выгрузки объектов поручим регламентному заданию; в его обработчике:
2.1. формируем единый для всей выгрузки объектов xdto-контейнер;
2.2. начинаем транзакцию (помимо своей основной функции, она понадобится для снятия управляемых блокировок);
2.3. для каждого вида объекта метаданных вызываем свои процедуры выгрузки объектов, в которых:
2.3.1. из Плана обмена читаем объекты, подлежащие выгрузке;
2.3.2. устанавливаем на эти объекты управляемую блокировку;
2.3.3. на основании xdto-пакета преобразуем объект 1С в объект xdto;
2.3.4. добавляем xdto-объект в единый xdto-контейнер;
2.4. Полученный xdto-контейнер сериализуем в JSON-строку;
2.5. Подключаемся к брокеру сообщений Rabbit MQ и записываем в него сообщение с нашей JSON-строкой;
2.6. Для выгруженных объектов 1С снимаем регистрацию в Плане обмена;
2.7. Фиксируем транзакцию и снимаем управляемые блокировки.
Результатом является очередь в Rabbit MQ из сообщений о выгруженных объектах 1С.
Если объем выгружаемой информации велик, а база активно используется пользователями, то следует позаботиться об уменьшении времени управляемых блокировок. Идти можно следующими путями:
- локализовать транзакции до выгрузки отдельных видов объектов метаданных;
- разделить выгрузку отдельных видов метаданных на порции, например, по 100 объектов;
- отдельно для каждой такой порции устанавливать транзакции и блокировки.
Схема выгрузки объектов из базы источника
Схема загрузки объектов в базе – приемнике
Схема загрузки объектов в базу-приемник
1. За инициализацию загрузки объектов отвечает Регламентное задание; в его обработчике:
1.1. Подключаемся к очереди сообщений брокера сообщений Rabbit MQ;
1.2. Считываем сообщения в качестве JSON-строк;
1.3. По параметрам JSON-сообщения определяем у объектов вид метаданных и вызываем соответствующие процедуры преобразования; в этих процедурах:
1.3.1. На основании xdto-пакетов преобразуем JSON-строки в xdto-объекты;
1.3.2. Преобразуем xdto-объекты в объекты 1С;
1.3.3. Сохраняем объекты 1С в базе 1С.
Результатом является запись в базе-приемнике объектов 1С переданных из баз-источников.
Итог
Мы рассмотрели пример архитектуры 1С для выгрузки/загрузки объектов с использованием брокера сообщений Rabbit MQ. Описанная архитектура универсальна и не зависит от вида используемой конфигурации 1С. Механизм можно использовать в различных интеграционных решениях, в т.ч. для передачи данных между разнородными системами (в силу использования универсального JSON-формата).