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



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

 Update: 19.07.2026

Проект трансформировался и теперь называется 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 не будет опубликован. Обязательные поля помечены *