RDV MI — интеграции 1С с RabbitMQ

RDV MI — интеграции 1С с RabbitMQ

1C Configurations

Not specified.

Pricing

Free or price is not specified.

README

mi

RDV-MI: гибкий инструмент для быстрой разработки и масштабирования механизмов интеграции для платформы 1С: Предприятие

Расширение на платформе 1С для разработки интеграций с поддержкой RabbitMQ и HTTP-сервисов, встроенными механизмами логирования, конвертации, регистрации и проверки целостности данных

1С
Status
Telegramm
OpenYellow

Скачать последнюю версию cfe можно из последнего релиза

Оглавление

  1. Кратко
    * 1.1. Описание
    * 1.2. Когда использовать
  2. Архитектура
  3. Быстрый старт
    * 3.1 Установить модули интеграции в базы Источник, Приемник
    * 3.2 Скопировать перечисленные модули в базах Источник, Приемник
  4. Лицензия
  5. Документация
  6. Взаимодействие
  7. Ближайшие планы развития

1. Кратко

1.1. Описание

RDV-MI — это наш вклад в систематизацию и повышение качества разработки интеграционных решений в 1С.
Мы стремимся убрать из процессов случайность и разнообразие подходов, сделать интеграцию управляемой и предсказуемой частью общего жизненного цикла разработки.

Ключевые возможности:

Транспорт
- Онлайн обмены через REST-сервисы (пир-ту-пир, встроенные в систему)
- Онлайн обмены через RabbitMQ (взаимодействие через брокер и сторонние приложения)

Обработка данных
- Очереди обработки данных для распределения нагрузки (настройка количества попыток, настройка параллельной обработки)
- Механизмы конвертации данных (предобработка, постобработка, мэппинг)

Журналирование (логирование)
- Журнал сообщений и ошибок обработки
- Настройка параметров хранения журнала

Сверка данных
- Правила формирования хэша
- Отчет по сверке полноты и точности данных

Быстрый запуск
- Открытое расширение на языке 1С
- Документация для разработчиков
- Встроенные демо примеры

1.2. Когда использовать

Разветленная схема потоков данных между системами (микросервисы):
- много источников - много потребителей
- несколько потребителей для одного источника

брокер упрощает схему интеграционных процессов наличием центра маршрутизации

Используется большое количество маленьких/легковесных сообщений:
- сообщения уведомлений пользователей
- использование сильно граннулированных сообщений обмена данными для передачи - например, передача остатков по товарам
> брокер может не хранить данные на диске, используя только ресурс сети и ОЗУ для передачи данных

Высокие требования к оперативности доставки данных (мгновенные сообщения):
- передача изменений остатков товаров
> брокер держит постоянное tcp соединение с потребителем, что позволяет позволяет доставлять данные практически online

1С выступает как источник данных для downstream-систем:
- платформ сверки — передача данных для задач контроля и сопоставления;
- аналитических витрин (BI) — поставка сырых данных для последующей подготовки отчетности и дашбордов;
- хранилищ данных (DWH) — доставка данных для последующей загрузки и трансформации;
- задач машинного обучения (ML) — поставка данных для дальнейшей подготовки и использования в моделях.

2. Архитектура

Архитектура

3. Быстрый старт

3.1 Установить модули интеграции в базы Источник, Приемник

Инструкция по установке модуля

3.2 Скопировать перечисленные модули в базах Источник, Приемник

Для описания структуры своих интегрируемых данных необходимо, как в базе Источник, так и в базе Приемник, создать модули копированием ниже перечисленных модулей.

Новые имена предлагаем сформировать по принципу "рдв_ПрефиксОрганизации_ИмяМодуля".

Далее необходимо скорректировать указанные методы под структуру своих баз данных.

Для каждого метода есть пояснения, используется он в Источнике или Приемнике:

3.2.1. рдв_МенеджерОбменаДемо

Назначение: описание правил конвертации объектов

Подключение: указать созданный модуль в рдв_ИнтеграцияПереопределяемый.МодульПрикладнойЛогикиМенеджераОбмена

// Описание правил конвертации объектов
Процедура ЗаполнитьПравилаКонвертацииОбъектов(СвойстваКонвертации, НаправлениеОбмена) Экспорт

    // Для источника
    Если НаправлениеОбмена = "Отправка" Тогда

        ДобавитьПКО_Справочник_Контрагенты(СвойстваКонвертации);

    // Для приемника
    ИначеЕсли НаправлениеОбмена = "Получение" Тогда

        ДобавитьПКО_Справочник_Контрагенты(СвойстваКонвертации);

    КонецЕсли;

КонецПроцедуры

// Имя текущей ИБ, уникально на все узлы обмена
// Идентифицирует источник входящего сообщения (например, Имя текущей базы) 
Функция ИмяИБ() Экспорт

    Возврат "RDV1";// Например, RDV1 - Источник."RDV2" - Приемник 

КонецФункции

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

    ПКО = рдв_МенеджерОбмена.ДобавитьПКО(СвойстваКонвертации, Метаданные.Справочники._ДемоКонтрагенты);
    ПКО.ИмяОбъекта = "Справочник.Контрагенты";
    ПКО.ИмяПКО = "Справочник_Контрагенты";

    КонвертацияШапки = ПКО.КонвертацияШапки;
    ИмяРеквизита = "ИНН";    // Имя реквизита текущей конфигурации
    ИмяКлючаФормата = "ИНН"; // Представление реквизита в формате обмена (Для Источника - имя, с которым будет выгружено, для Приемника - имя загружаемых данных)
    Обязательный = Истина;
    рдв_МенеджерОбмена.ДобавитьПКС(КонвертацияШапки, ИмяРеквизита, ИмяКлючаФормата, Обязательный);
    ... // прочие реквизиты

    ИмяТаблЧасти = "КонтактнаяИнформация";    // Имя табличной части текущей конфигурации 
    ИмяКлючаФормата = "КонтактнаяИнформация"; // Представлениетреквизита в формате обмена
    ТаблЧасть = рдв_МенеджерОбмена.ДобавитьТаблЧасть(СвойстваКонвертации, ПКО, ИмяТаблЧасти, ИмяКлючаФормата);
    // реквизиты табличной части
    рдв_МенеджерОбмена.ДобавитьПКС(ТаблЧасть, "Представление", "Представление");
    рдв_МенеджерОбмена.ДобавитьПКС(ТаблЧасть, "Тип", "Тип");
    ... // прочие реквизиты

    ПоляПоиска = ПКО.ПоляПоиска;
    рдв_МенеджерОбмена.ДобавитьПоляПоиска(ПоляПоиска, "Код");

КонецПроцедуры

3.2.2. рдв_РегистрацияИзмененийДемо

Назначение: описание правил регистрации/маршрутизации объектов

Подключение: указать созданный модуль в рдв_ИнтеграцияПереопределяемый.МодульПрикладнойЛогикиРегистрацииИзменений

// Правила регистрации объектов для выгрузки во внешние системы.
// Только для источника, приемник не регистрирует объекты к отправке.
Процедура ЗаполнитьПравилаРегистрации(ПравилаРегистрации) Экспорт

    RMQ = Справочники.рдв_ВнешниеСистемы.Предопределенный("RMQ");

    Процедура ДобавитьПравилоРегистрации(ПравилаРегистрации,
                                        МетаданныеОбъекта,
                                        ВнешняяСистема,
                                        АдресМетода = "")

    ПравилоРегистрации = ПравилаРегистрации.Добавить();
    ПравилоРегистрации.МетаданныеОбъекта = Метаданные.Справочники._ДемоКонтрагенты;
    ПравилоРегистрации.ВнешняяСистема = RMQ;
    ПравилоРегистрации.АдресМетода = "exchange";

КонецПроцедуры

// Ключ маршрутизации для брокеров
// Для источника
Функция МаршрутСообщения(ИсточникСообщения, ВнешняяСистема) Экспорт

    Если ИсточникСообщения.Метаданные() = Метаданные.Справочники._ДемоКонтрагенты Тогда
        Возврат "Контрагенты";
    Иначе
        Возврат ИсточникСообщения.Метаданные().Имя;
    КонецЕсли;

КонецФункции

3.2.3. рдв_ОбработчикиСобытийДемо

Назначение: определяет способ регистрации объектов (механизм через очереди или непосредственно)

Подключение: указать созданный модуль в рдв_ИнтеграцияПереопределяемый.МодульПрикладнойЛогикиОбработчиковСобытий

// Обработчик подписки на событие при записи справочников
// регистрирует объекты на выгрузку непосредственно в механизм регистрации
// Только для источника.
Процедура СправочникиПриЗаписи(Источник, Отказ) Экспорт

    Если Не ТипЗнч(Источник) = Тип("СправочникОбъект._ДемоКонтрагенты") Тогда
        Возврат;
    КонецЕсли;

    рдв_РегистрацияИзменений.ЗарегистрироватьИзменения(Источник);

КонецПроцедуры

Процедура ДокументыПриЗаписи(Источник, Отказ) Экспорт
КонецПроцедуры

Процедура НаборыЗаписейПриЗаписи(Источник, Отказ, Замещение) Экспорт
КонецПроцедуры

3.2.4. рдв_РаботаСОчередямиДемо

Назначение: обработка очередей интеграции. Механизм отложенной обработки данных интеграции.

Подключение: указать созданный модуль в рдв_ИнтеграцияПереопределяемый.МодульПрикладнойЛогикиОчередей

// Регистрируем очередь для обработки входящих сообщений
// Для источника и приемника
Процедура ЗаполнитьСписокОчередей(СписокОчередей) Экспорт

    СписокОчередей.Добавить("ОбработкаВходящихСообщений", 
        НСтр("ru = 'Обработка входящих сообщений'"));

КонецПроцедуры

// Настраиваем очередь
// Для источника и приемника
Процедура ЗаполнитьТипОчередиПоУмолчанию(ИмяОчереди, ТипОчередиОбъект) Экспорт

    Если ИмяОчереди = "ОбработкаВходящихСообщений" Тогда

        ТипОчередиОбъект.ПорционнаяОбработка = Истина;
        ТипОчередиОбъект.МаксЗаписейВПорции = 4;

    КонецЕсли;

КонецПроцедуры

// Обрабатываем данные очереди
// Для источника и приемника
Процедура ВыполнитьОбработкуОчереди(ИмяОчереди, ИдентификаторыОчереди, РезультатОбработки) Экспорт

    Если ИмяОчереди = "ОбработкаВходящихСообщений" Тогда
        // Запрос данных очереди
        ДанныеОчереди = рдв_РаботаСОчередями.ПолучитьДанныеОчереди(ИмяОчереди,
            ИдентификаторыОчереди, "ИдентификаторЗаписи,ХранилищеПараметров");

        Если Не ЗначениеЗаполнено(ДанныеОчереди) Тогда
            Возврат;    
        КонецЕсли;

        Для Каждого ЗаписьОчереди Из ДанныеОчереди Цикл

            Идентификатор = ЗаписьОчереди.ХранилищеПараметров.Получить();
            рдв_Интеграция.СообщениеОбработатьПолученное(Идентификатор.ИдентификаторСообщения);

            ИдентификаторыСообщений.Добавить(Идентификатор);

        КонецЦикла;

    КонецЕсли;

КонецПроцедуры

#КонецОбласти

3.2.5. рдв_ИнтеграцияДемо

Назначение: предоставляет возможность реализовать новый тип внешней системы (kafka, ftp, прочие)

Подключение: указать созданный модуль в рдв_ИнтеграцияПереопределяемый.МодульПрикладнойЛогикиИнтеграции

Реализовать программное API, прикладную логику методов можно не заполнять.

3.2.6. рдв_ФормированиеХешейОбъектовДемо

Назначение: правила расчета хешей объектов для целей сверки полноты и точности данных

Подключение: указать созданный модуль в рдв_ИнтеграцияПереопределяемый.МодульПрикладнойЛогикиФормированияХешей

Реализовать программное API, прикладную логику методов можно не заполнять.

3.2.7. рдв_МониторингДанныхДемо

Назначение: определяет внешнюю систему мониторинга

Подключение: указать созданный модуль в рдв_ИнтеграцияПереопределяемый.МодульПрикладнойЛогикиМониторингаДанных

Реализовать программное API, прикладную логику методов можно не заполнять.

3.3 Настроить RMQ/HTTP

Настроить в качестве транспорта обмена один из предустановленных вариантов:

3.3.1 Настроить сервер RMQ согласно инструкции:

Для источника: значение из рдв_МенеджерОбменаДемо.ИмяИБ

Источник

Для приемника: ключ маршрутизации из рдв_РегистрацияИзмененийДемо.МаршрутСообщения и значение из рдв_МенеджерОбменаДемо.ИмяИБ

Приемник

3.3.2 Опубликовать HTTP-сервис согласно инструкции:

3.4 Настроить подключение в режиме 1С Предприятие

Настройка подключений в 1С:

Все необходимые для работы объекты в 1С располагаются в разделе "Интеграция (РДВ)":

3.5 Настроить Отправку данных из базы Источник

Автоматическая отправка данных настраивается в справочнике Внешние системы на вкладке "Расписание"

Необходимо установить галку "Использовать расписание", настроить расписание для отправки данных.

В ручном режиме для отправки данных необходимо:
* Записать объект
* В регистре "Регистрация изменений" выбрать нужную позицию и нажать "Сформировать сообщения"
* В регистре "Сообщения интеграции" выбрать нужную позицию и нажать "Обработать сообщение"

3.6 Настроить Получение данных в базе Приемник

Автоматическое получение данных настраивается в справочнике Внешние системы на вкладке "Расписание"

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

Далее необходимо настроить расписание для Обработки входящих сообщений:
в справочнике "Типы очередей обработки данных" для типа очереди "Обработка входящих сообщений" необходимо настроить расписание на вкладке "Регламент".

В ручном режиме для получения данных необходимо:
* Получить данные через запуск регламентного задания Интеграции: "RMQ Получение"
* После выполнения данного регл.задания сформируются очереди в РегистрСведений.рдв_ОчередиОбработкиДанных.
* Открыть данный регистр очередей можно в разделе Интеграция (РДВ) \ Очереди обработки данных. Далее необходимо встать на нужную очередь и запустить обработку очереди по кнопке "Действия\Обработать очереди"

3.7 Настроить Контроль целостности

Инструкция по конфигурированию контроля целостности данных

4. Подробная инструкция разработчика

Документация по администрированию и разработке

5. Лицензия

Лицензия BSD-3-Clause license

6. Документация

Документация
Ссылки на инструкции и другую документацию на странице

7. Взаимодействие

Получить или предложить помощь можно в чате Telegram

8. Ближайшие планы развития

Внешний мониторинг стабильности и производительности
- Grafana
- Prometheus

Внешнее журналирование
- Click House

Помощник для специалистов поддержки: анализ и обработка коллизий
- Связи журнала и запросов интеграций с объектами и ошибками
- Отчет по мониторингу очередей
- Отчет по мониторингу ошибок интеграций
- Версионирование правил: журнал изменений

Оповещения
- E-mail
- Telegram
- Mattermost
- SMS
- MAX

Брокер сообщений
- Kafka
- Поддержка WebSocket

Low-code помощник формирования кода без интерактивной настройки