ЗооПАРк, искры и грохот шестеренок: стандартизация интеграционных потоков

08.08.25

Интеграция - Перенос данных 1C

Рассказываем о построении универсального и безопасного механизма обмена данными между системами 1С на примере компании ТЕХНОНИКОЛЬ. Авторы делятся подходами к стандартизации, снижению нагрузки и защите персональных данных, а также подробно описывают архитектуру решения с использованием RabbitMQ и JSON-схем.

Меня зовут Алексей Кудинов. Я занимаюсь интеграцией между системами 1С и внешними решениями. Мой соавтор Сергей Ведутенко прошел путь от стажера до ведущего разработчика 1С, является специалистом широкого профиля.

ТЕХНОНИКОЛЬ – это международный производитель строительных материалов.

  • На текущий момент в компании более 70 заводов.

  • Мы продаем нашу продукцию в 118 стран мира.

  • Выручка за прошлый год составила более 211 миллиардов рублей.

TN Digital – цифровое сердце нашей компании, в котором мы с Сергеем работаем.

Если говорить про стэк 1С, то сейчас в компании трудится более 80 человек. Все из них имеют квалификацию "Профессионал" и выше. И на текущий момент ими реализовано более 40 внутренних проектов.

Компания ТЕХНОНИКОЛЬ на рынке уже давно, и за это время мы накопили определенное количество проблем:

  • В администрировании большое количество 1С баз с бессчетным количеством обменивающейся информации.

  • В связи с законодательством часто нужно контролировать передаваемую информацию.

  • Блокировки таблицы регистрации 1С (проблема – замедление работоспособности базы).

Упомянутые проблемы усугубились в связи с тем, что с 2023 года к нам присоединилось более 17 производственных площадок, то есть по факту это более 17 заводов, и нагрузки на наши внутренние информационные системы увеличились.

 

 

За 30+ лет существования нашей компании мы накопили большой зоопарк систем. Часть из них представлена на рисунке.

Технологии за это время довольно часто менялись, программы и продукты тоже. В итоге мы решили, что все наши интеграционные потоки можно разделить по трем категориям:

  • Способы взаимодействия между системами,

  • Технологии обмена, если мы говорим, что это обмен между 1С,

  • Различные форматы взаимодействия тоже накопились за это время.

 

 

 

Стандартизация способов и форматов взаимодействия

 

Мы пошли в сторону стандартизации, так как поддерживать этот зоопарк весьма сложно. Это увеличивает онбординг наших новых сотрудников, им приходится вникать в разные технологии.

Поэтому в способах взаимодействия мы приняли решение оставить только два:

  • RabbitMQ там, где нам нужна асинхронная передача данных.

  • REST там, где эта передача асинхронным способом невозможна, и нам нужен синхрон. Таких процессов немного, порядка 8-10%, поэтому в основном используется Rabbit.

Формат обмена мы выбрали JSON. Он также понятен и человекочитаем, как и XML, который в основном использовался раньше. Но в отличие от XML он более легок, а самое главное, JSON – это стандарт для многих систем и языков программирования на текущий момент.

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

 

Обработка персональных данных и требования законодательства

 

 

В России и странах СНГ, где работает наша компания, особое внимание уделяется передаче, хранению и обработке персональных данных. На рисунке представлены некоторые законодательные требования разных стран. У них есть свои нюансы, но главное – все эти нормы необходимо соблюдать. За их нарушение предусмотрены серьезные штрафы, особенно в случае трансграничной передачи персональных данных между разными странами.

 

 

Чтобы решить эту задачу, мы приняли решение согласовывать всю передачу пакетов, содержащих персональные данные, с отделом информационной безопасности. В отдельных случаях – также с юристами.

Для эффективного контроля мы решили унифицировать формат передачи данных. Разные форматы усложняют обработку и анализ, требуя значительных временных затрат от специалистов по информационной безопасности.

Кроме того, нам необходимо фиксировать и хранить всю передачу данных – чтобы при необходимости можно было подтвердить, что передача была или не была осуществлена.

Но самое главное – мы должны жестко валидировать всю передаваемую информацию и обеспечить программный запрет на передачу только тех данных, которые прошли согласование. Для этого мы используем механизм JSON Schema.

JSON Schema – это язык описания структур и правил для JSON-документов. С его помощью можно определить, какие поля должны присутствовать в документе, являются ли они обязательными, в каких условиях и в каком формате. Также можно задавать допустимые значения для перечислений и другие ограничения.

JSON Schema позволяет валидировать JSON-данные при их передаче между системами, обеспечивая соответствие заранее заданному формату. Он гибок и расширяем. Начиная с версии Draft-07, поддерживается механизм паттернов, основанный на регулярных выражениях, который позволяет осуществлять проверку строковых полей. Это дает возможность контролировать содержимое полей: например, выявлять передачу персональных данных или других сведений.

 

Сервис валидации на базе RabbitMQ и Go

 

Поскольку основным способом передачи данных мы выбрали RabbitMQ, был разработан сервис валидации. Основная задача – получать сообщения из RabbitMQ, проверять их соответствие согласованным JSON-схемам, валидировать содержимое и, если сообщение проходит проверку, пересылать его в систему-получатель. В случае неудачной валидации сообщение блокируется, и его передача не осуществляется.

Сервис написан на языке Go и дополнительно реализует REST-интерфейс. Это позволяет внутренним системам обращаться к нему за актуальными JSON-схемами – получать описание конкретной схемы или набор схем, согласованных для определенной системы.

Кроме того, сервис автоматически получает все утвержденные JSON-схемы из GitLab. Отдел информационной безопасности согласовывает схемы, после чего они сохраняются в GitLab, а сервис автоматически забирает их себе.

 

 

Теперь, в качестве примера, покажу небольшой фрагмент кода на 1С. Наши системы довольно большие, и типовые механизмы обмена в целом работают хорошо, но только до определенного порога нагрузки. В высоконагруженных системах, где требуется частый и интенсивный обмен большим объемом изменяющихся данных, они работают плохо.

Например, верхний кусочек кода, который можно найти в любом учебнике по 1С: выборка изменений по плану обмена. Да, он прост и понятен, но при этом создает значительные задержки при обращении к таблицам регистрации планов обмена и может даже привести к их блокировке.

В версии платформы 1С 8.3.16 появились новые возможности: код немного изменился, появилась выборка по составу метаданных. Это действительно улучшило ситуацию – задержки сократились. Однако в одной из наших самых нагруженных систем мы по-прежнему сталкиваемся с проблемами.

 

 

На этом графике видно, сколько времени в минуту у нас уходит на ожидание при работе с таблицами регистрации обмена – именно в момент выборки изменений. В отдельные периоды это значение доходило до 201 секунды в минуту, а среднее составляет 66 секунд, что довольно много.

 

Основные особенности универсальной системы обмена данными

 

В крупных компаниях, имеющих множество производственных подразделений, необходимо использовать универсальную систему обмена данными, которая будет работать максимально эффективно и надежно. Мы подробно рассмотрим основные особенности нашего обмена, который делает такие системы эффективными и решает проблемы, про которые рассказано в начале.

Первая особенность – это транспорт сообщений RabbitMQ. Чем Rabbit полезен для нашего обмена?

  • Одной из особенностей использования Rabbit является поддержка очередей, которая позволяет организовать сообщения в строго определенном порядке. Это важно для многих бизнес-процессов, где порядок выполнения задачи определяет успешность работы всей системы.

  • Следующая особенность Rabbit – гарантированная доставка сообщений, благодаря которой мы можем удалить зарегистрированные данные сразу же после отправки сообщения, не дожидаясь квитанции о получении.

  • Одним из ключевых преимуществ Rabbit является его скорость обработки. Способность обрабатывать большое количество сообщений с минимальными задержками – это важно. Это означает, что данные могут быть получены и отправлены практически мгновенно.

Все это делает Rabbit отличным решением для компаний с множеством производственных подразделений, где требуется большой объем обмена данными.

 

 

Следующая особенность нашего обмена – это неблокирующая выборка изменений. Как говорилось ранее, при большом объеме обмена данными использование метода «ВыбратьИзменения» приводит к ожиданиям на таблицах регистрации.

Есть два простых и известных метода регистрации изменения данных:

  1. Использовать типовую регистрацию с использованием механизма платформы,

  2. Использовать вспомогательный регистр сведений.

Нами было принято решение остаться на типовой регистрации обмена данными, но к таблице регистрации обращаться с помощью запроса. Тем самым мы решили проблему ожидания на таблицах регистрации.

Следующая особенность – это принцип «один объект, одно сообщение». Этот принцип подразумевает, что каждое сообщение в системе должно содержать только одну единицу информации. Когда каждое сообщение обрабатывается независимо, это значительно облегчает тестирование и отладку системы.

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

Следующая особенность нашего обмена – это механизм ping-сообщения. В любой сложной системе обмена данными необходим контроль связи между источником и приемником – ping-сообщение служит именно для этой цели. Оно позволяет отслеживать состояние связи между источником и приемником. Это может быть полезно в крупных системах, где потеря связи может привести к большим проблемам. Ping-сообщение может быть настроено либо в заданный интервал времени, либо по количеству отправленных сообщений.

Как это работает. Перед началом обработки сообщения с данными мы проверяем на необходимость отправки ping-сообщения по настройкам. Или, если отправляется первое сообщение с данными в приемник, мы принудительно запускаем ping-сообщение. Ping-сообщение отправляет служебное сообщение в приемник. Если в ответ не приходит подтверждение о получении, значит, связь потеряна или не настроена. Без подтверждения работоспособности приемника сообщения из источника выгружаться не будут.

Следующая особенность – это механизм восстановления. Он является важной частью любой системы обмена сообщениями. Механизм восстановления позволяет обрабатывать данные, которые не были успешно загружены, и пытается повторно отправить эти данные через определенный промежуток времени. Также он отвечает за восстановление работы приложения после сбоев, например, за backup приемника.

Как это работает. В системе ведется нумерация сообщений источника и приемника. При загрузке сообщения мы проверяем, что если последний номер сообщения из источника равен номеру принятого сообщение из приемника. Если это не так, то мы понимаем, что произошел либо backup системы, либо сообщение не обработалось совсем. В этом случае мы запускаем механизм восстановления, который сохраняет номера неполученных сообщений и отправляет их в источник, который и попытается повторно отправить эти сообщения.

 

Алгоритм обработки сообщений: выгрузка и загрузка

 

 

Рассмотрев все особенности нашего универсального обмена, расскажу про алгоритм обработки сообщения – выгрузку и загрузку.

Начнем с выгрузки:

  1. Сначала мы проверяем на необходимость отправки ping-сообщения.

  2. Если ping-сообщение не требуется отправлять, то далее для запроса получаем зарегистрированные к обмену данные.

  3. После этого каждый зарегистрированный объект будет выгружен отдельным сообщением по принципу «один объект – одно сообщение».

  4. После этого для каждого выгружаемого объекта будет формироваться состав выгружаемых реквизитов по согласованной JSON-схеме, и формируется JSON-сообщение.

  5. Выгружаем JSON-сообщение в RabbitMQ.

  6. Последовательно пронумеровываем исходящее сообщение в пределах получателя.

Загрузка сообщения:

  1. Загружаем JSON-сообщение из RabbitMQ.

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

  3. После этого последовательно пронумеровываем принятые сообщения в пределах источника.

  4. Для каждого загружаемого объекта определяем состав загружаемых реквизитов по согласованной JSON-схеме.

  5. Загружаем объект по данным сообщения.

На этом обработка сообщений завершена. Обратите внимание, что формирование и чтение JSON-сообщения реализуется по согласованной JSON-схеме. Про это расскажем далее.

 

Процесс создания и согласования JSON-схем

 

 

Для каждого обменивающего объекта необходимо было создать свою JSON-схему, чтобы определить состав передаваемых данных. Таким образом, состав передаваемых данных будет формироваться по определенному формату.

Для автоматической генерации интеграционных схем мы создали специальную обработку, которая формирует JSON-схему по определенному составу передаваемых данных.

В обработке выбираем обменивающийся объект, определяем состав передаваемых данных и выгружаем JSON-схему.

 

 

Сформированная JSON-схема автоматически выгружается и отправляется на согласование в отдел управления информационной безопасности.

 

 

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

После успешного согласования JSON-схема автоматически загружается в сервис валидации JSON, про который рассказывали ранее.

 

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

 

Следующий этап – это загрузка интеграционной схемы в информационные системы приемника. По регламентному заданию загружаем согласованные JSON-схемы из сервиса валидации JSON и сохраняем их в отдельный справочник «Правила интеграционной схемы».

В этом справочнике хранится состав передаваемых данных объекта, на основании которого будет и формироваться JSON-сообщение при выгрузке и загрузке, и читаться.

 

 

Для каждого загруженного правила устанавливаем связь с информационной системой приемника. Для этих целей мы дополнительно создали обработку «Мониторинг правил интеграционных схем».

Как видно на картинке, для справочника «Контрагенты» у производственного подразделения «Москва» обновилась версия правил под номером 2, а для производственных подразделений «Рязань» и «Санкт-Петербург» правило осталось под номером 1. Тем самым мы хотели показать, что ушли от строгого обновления информационных баз в одно время.

 

Результаты внедрения новой системы обмена

 

Таким образом мы попытались решить все те проблемы, про которые рассказывали ранее.

  • Добились уменьшения нашего зоопарка обменов.

  • Облегчили контроль за соблюдением законодательств и по передаче разных пакетов данных.

  • Уменьшили время ожидания. На картинке показан трафик – сверху старый, снизу новый.

 

 

На новый механизм обменов было переведено порядка 10?12% из того зоопарка, который у нас сейчас существует. Но, несмотря на это, мы полностью убрали пики на ожиданиях. Среднее время ожидания в одной из самых наших высоконагруженных систем упало с 66 секунд до 50. Когда мы доведем результат до 100%, работать нам станет намного легче.

 

*************

Статья написана по итогам доклада (видео), прочитанного на конференции INFOSTART TECH EVENT.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

SALE! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27660 руб.

12.06.2017    149885    875    302    

456

Перенос данных 1C Программист 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

55778 руб.

04.08.2015    175612    381    289    

407

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 руб.

25.02.2015    176151    322    270    

392

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 1C v8.2 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

16260 руб.

18.02.2016    193167    629    540    

547

Перенос данных 1C Взаиморасчеты Оптовая торговля Логистика, склад и ТМЦ Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам.

55778 руб.

24.04.2015    201077    166    247    

291

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

55778 руб.

15.04.2019    76967    208    160    

145

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.22.x).

38000 34200 руб.

23.07.2020    59919    286    75    

226

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

53111 руб.

03.12.2020    40203    115    73    

109
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. gybson 08.08.25 18:49 Сейчас в теме
Над этим всем возникают огромные вопросы по эксплуатации. Начиная от схем json (создание канонической модели данных, сериализация) и заканчивая кроликом. Т.е. как сделать так, чтобы схема не порушила обмен? Как использовать разные версии схемы? Куда идти если кажется, что данные должны были появиться, а их нет? И т.д. и т.п.

Хочется пожелать удачи в начале интересного пути и немного пошутить.

Согласно легенде, Филипп II написал спартанцам: «Я покорил всю Грецию, у меня самое лучшее в мире войско. Сдавайтесь, потому что если я захвачу Спарту силой, если я сломаю её ворота, если я пробью таранами её стены, то беспощадно уничтожу ваши сады, порабощу людей и разрушу город!».

На что спартанцы ответили одним словом: «Если».
2. AlexKudinov 2 12.08.25 09:03 Сейчас в теме
(1)
Над этим всем возникают огромные вопросы по эксплуатации. Начиная от схем json (создание канонической модели данных, сериализация) и заканчивая кроликом. Т.е. как сделать так, чтобы схема не порушила обмен? Как использовать разные версии схемы? Куда идти если кажется, что данные должны были появиться, а их нет? И т.д. и т.п.


Про схемы JSON и контроль данных:
Обмен возможен только при наличии согласованной схемы. Если выгружаемые данные не соответствуют схеме — это критическая ошибка, и обмен останавливается.
Теоретически можно добавить проверку данных на соответствие JSON Schema прямо в 1С, но:
• такие ошибки очень редки
• это значительно увеличивает нагрузку на CPU серверов 1С в продуктивных системах.
• замедляет формирование сообщений.
• вызывает недоверие у информационной безопасности (проверка должна выполняться независимой системой под контролем другой команды - Zero trust).

Про совместимость версий:
Поддерживаются как минимум 2 последние версии схем. Проблемы возникают крайне редко — только при физическом удалении реквизитов (за 2,5 года был 1 случай который пришлось специально обрабатывать).

Мониторинг:
Все обмены логируются в OpenSearch, что позволяет быстро обнаружить:
• пропущенные данные.
• ошибки несоответствия схеме.
Ответственные сотрудники анализируют проблемы и оперативно их решают.

Проблемы производительности ( за время прошедшее со статьи количество получателей ещё увеличилось)
Основные сложности:
• Ограниченная однопоточность при выгрузке сообщений в RabbitMQ (намеренное ограничение для конкретного получателя).
• Хочется ещё уменьшить нагрузку на централизованные базы.

Сейчас ведётся оптимизация — результатами её поделимся позже.
Оставьте свое сообщение