Z-Integrator: интеграция с 1С на уровне данных



Z-Integrator — это программный модуль для интеграции с прикладными решениями, разработанными на платформе 1С:Предприятие 8. При помощи этого модуля можно построить систему обмена данными практически любой сложности. Существует возможность расширять функциональность модуля своими решениями, разработанными на языке C#.
 

 Update: 19.07.2024

Проект трансформировался и теперь называется 1C#.
Репозиторий проекта: 1C# — платформа для разработки серверных приложений
Краткое описание идеи (видео на 3 минуты): 1C# in 3 minutes

 
Z — это программа, которая состоит из облочки (shell) и подключаемых к ней модулей. Z основана на Microsoft Prism 5.
Основная цель Z: увеличение производительности и расширение функциональных возможностей приложений, разработанных на платформе 1С:Предприятие 8. Эти цели достигаются за счёт тесной интеграции Z и 1С на уровне структур хранения данных, а также использования в полной мере возможностей Microsoft SQL Server и .NET Framework 4.5.
 
Подробнее программа описана в документации по проекту.
 
Актуальный список модулей:
 
1. Z-Metadata — базовый независимый модуль.
Позволяет работать с метаданными приложений, разработанных на платформе 1С:Предприятие 8, а так же любых других приложений, хранение данных которых реализовано при помощи Microsoft SQL Server. Содержание метаданных: описание модели предметной области приложения (domain model) и структур хранения данных объектов этой модели.
 
2. Z-Integrator — зависимый от Z-Metadata модуль.
Модуль решает следующие задачи:
— регистрация изменений данных объектов 1С:Предприятие 8 (SQL Server Change Tracking);
— публикация изменений в виде сообщений (Microsoft Message Queuing);
— управление подписками на сообщения;
— сериализация/десериализация сообщений;
— трансляция сообщений при несовпадении схем данных источника и получателя;
— загрузка сообщений в базу данных приёмника (подписчика);
— двусторонний обмен данными;
— разрешение коллизий по умолчанию.
 
3. Z-REST-API (модуль находится в разработке).
Конструктор REST API интерфейса для произвольной конфигурации 1С:Предприятие 8.
 
4. Z-Archivator (модуль находится в разработке).
Архивация данных 1С:Предприятие 8 (свёртка данных) средствами SQL Server.
 
5. Z-Updator (модуль находится в разработке).
Обновление структур данных 1С:Предприятие 8 (выполнение реструктуризации) средствами SQL Server. Модуль решает проблему обновления без потери пользовательских индексов, триггеров и т.п.
 
Возможна доработка программы под заказ.
 
Технологические особенности:

Технология SQL Server Change Tracking позволяет минимизировать нагрузку на систему при одновременном увеличении производительности операций регистрации изменений. Технология была специально разработана для использования в сценариях синхронизации и интеграции данных с учётом обеспечения макимально возможной производительности. Использование Change Tracking полностью исключает возникновение ожиданий на блокировках при одновременном выполнении операций записи и чтения изменений.

Расширяемость Z-Integrator позволяет создавать высоко производительные решения по интеграции с 1С:Предприятие 8 любого уровня сложности, используя всю мощь .NET Framework и SQL Server.

12 Comments

  1. ifal

    Очень интересно решение для однотипных баз. Жаль требования 1С к свой лицензионной политике не разрешает такие вещи, что, конечно, не справедливо, когда у организации куплено такое ПО как MS SQL Server. Интересно, а как решаются коллизии данных? по тем же правилам, что и в 1С? В описании ничего такого не нашел, получается нельзя построить по правилу, когда подразделение меняется что-то в своих документах, то это в приоритете?

    Reply
  2. zhichkin

    (1) ifal,

    Реализована следующая стратегия разрешения коллизий:

    1. Всегда применяется правило «кто последний, тот и выиграл». То есть, если в базу приёмник приходит сообщение обновления, то версия записи в приёмнике не анализируется, она просто перезаписывается. Таким образом считается, что источник всегда последний и он всегда прав. Какой из узлов обмена А или В в данный момент является источником или приёмником определяется по направлению движения для конкретного сообщения обмена, которое обрабатывается в данный момент времени. Если сообщение движется из А в В, то А — это источник, а В — приёмник и, соответственно, наоборот.

    2. Если из источника в приёмник приходит сообщение вставки новой записи (insert), а в приёмнике запись с такими ключевыми полями уже есть, то источник снова считается последним и, соответственно, победителем в разрешении коллизии — insert превращается в update. Такая ситуация может возникнуть, например, тогда, когда в приёмнике завели цену в регистр сведений «Цены номенклатуры», а в источнике тоже завели по тем же ключевым значениям (новым в этом момент для источника) цену. В приёмник «летит» insert, но там уже есть такая запись — ошибка дублирования ключа превращается в обновление.

    3. Если из источника в приёмник «летит» update, но там нет такой записи, например её удалили или её там вообще никогда не существовало (такую коллизию называют update-delete), то update превращается в insert — запись успешно добавляется в приёмник.

    Reply
  3. zhichkin

    (1) ifal,

    Правила разрешения коллизий бывают очень сложными. Зачастую они сильно зависят от бизнес-логики прикладного решения. В каждом случае нужно разбираться отдельно. Предложения по добавлению настроек какой-то более или менее типовой логики разрешения коллизий приветствуются =)

    Reply
  4. unpete

    (0), Изобретение велосипедов — деятельность вполне достойная. Зачастую — необходимая.

    Без этого сложно понять условия задачи и математику альтернативных решений, но зачем результаты лабораторной работы помещать в production?

    Почитайте про репликацию couchdb — это позволить направить вашу энергию в мирное русло.

    В 2014-15 годах, я потратил более 2 тыс. человекочасов на собственный движок обмена, но познакомившись с couchdb — выкинул бОльшую часть проделанной работы на помойку, задействовав простые, изящные и современные технологии.

    Reply
  5. Константин С.
    (бесплатная версия для ознакомления)

    Вот интересно было узнать, цену вопроса не для ознакомления)

    А то от количества нулей можно !!!!

    Reply
  6. zhichkin

    (5) Константин С.,

    Выпуска платной версии не планируется. Планируется создание более или менее удобного инструмента для реализации проектов по интеграции на стыке технологий 1С:Предприятие 8 + .NET Framework (C#) + MS SQL Server. В том числе с учётом SOA (service-oriented architecture). Соответственно ответ такой: присылайте свои требования по проекту — дам оценку.

    Reply
  7. zhichkin

    (4) unpete,

    Я прошу прощения, но я совсем не понял Ваш комментарий. PR couchdb ? Сравнение тёплого с мягким ? По моему упоминание SQL Server Integration Services было бы более к месту. Кроме того, моя публикация больше про интеграцию, чем про репликацию.

    Reply
  8. artbear

    Подписался

    Reply
  9. maratimus

    А есть такая же, но сделанная по технологии «Temporal Tables», а не «Change Tracking»?

    Reply
  10. zhichkin

    (9) Какой у Вас use case ?

    Мне кажется, что именно для обмена данными temporal tables … как узнавать что данные по строке изменились ? Запрашивать все строки таблицы на предмет наличия версий в исторической таблице ? Тяжёлый может быть запрос …

    Или есть какой-то простой и достаточно лёгкий способ получить именно изменённые на какой-то момент времени строки ?

    Reply
  11. JohnnySE

    Приветствую.

    1. Не удобно проставлять соответствия между источником и приемником.

    2. Нет четкого описания, что делать приперед обновлением конфигурации

    3. ОСНОВНОЕ: как настраивать фильтрацию для выгрузкизагрузки.

    С уважением.

    Reply
  12. zhichkin

    (11) Огромное спасибо за конструктивную критику!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *