1С:Шина изнутри: от сообщения в базе до доставки в другую систему

· 10 мин

Содержание

1С:Шина работает как посредник между системами: база 1С кладёт сообщение в канал сервиса интеграции, шина принимает его, прогоняет через процесс интеграции (маршрутизация, преобразование) и доставляет получателю. Отправитель не знает адреса получателя и не ждёт его: если получатель недоступен, сообщение лежит в очереди, пока его не заберут.

Отсюда главный плюс шины перед прямыми обменами «каждый с каждым». Десять баз, связанных напрямую, дают десятки точек отказа и настроек. Через шину каждая система подключается один раз, а правила «кому что отправлять» живут в одном месте.

Из чего состоит 1С:Шина и как идёт сообщение

Шина построена на технологии 1С:Предприятие.Элемент. Это отдельный сервер со своей средой разработки, а не расширение обычной конфигурации 8.3.

Основные части:

  • 🖥️ Сервер 1С:Шины — принимает подключения, хранит очереди, исполняет процессы интеграции.
  • 🧩 Процесс интеграции — главный объект разработки. Это схема: какие каналы есть, куда идёт сообщение, что с ним делается по пути.
  • 📥 Каналы — именованные «трубы», через которые системы отправляют и получают сообщения. У канала есть направление: на вход в шину или на выход из неё.
  • 🔀 Элементы схемы — маршрутизация, преобразование, разделение сообщений. Логика пишется на встроенном языке Элемента.
  • 🗂️ Информационные системы — зарегистрированные участники обмена (базы 1С и внешние приложения) со своими учётными данными.
  • 🔌 Сервисы интеграции на стороне 1С:Предприятия — объект конфигурации в платформе 8.3. Через него база подключается к шине.

Путь одного сообщения

Пример: в УТ провели заказ, его нужно передать на склад (WMS) и в бухгалтерию.

  1. При проведении заказа код конфигурации формирует сообщение и помещает его в выходной канал сервиса интеграции.
  2. Платформа записывает сообщение в базу и отправляет его на сервер шины по протоколу AMQP 1.0.
  3. Шина принимает сообщение во входной канал процесса интеграции.
  4. Маршрутизатор смотрит на параметры сообщения (тип документа, организацию, склад) и решает, куда его направить.
  5. Элемент преобразования приводит формат к тому, который ждёт получатель.
  6. Сообщение попадает в выходные каналы: «WMS» и «Бухгалтерия».
  7. Получатели забирают сообщения, когда подключены. База 1С-получатель обрабатывает их в процедуре-обработчике канала.

Сообщение состоит из тела (обычно JSON или XML, но шине содержимое не важно) и параметров — пар «ключ-значение» в заголовке. Маршрутизировать по параметрам дешевле, чем разбирать тело: шина не тратит ресурсы на чтение мегабайтного JSON ради одного поля.

Очереди сообщений и гарантированная доставка в 1С:Шине

Очередь — это то, ради чего шину обычно и ставят. Обмен перестаёт быть синхронным: отправитель не зависает, пока получатель думает.

Как это работает на практике:

СитуацияЧто происходит с сообщением
Получатель на связиЗабирает сообщение почти сразу
Получатель выключен на ночьСообщения копятся в его выходном канале, утром он забирает всё по порядку
Нет связи между базой-отправителем и шинойСообщение остаётся в базе-отправителе и уходит после восстановления связи
Ошибка в обработчике получателяСообщение не подтверждено и не теряется; разбираются с ним через диагностику

Почему сообщение не теряется при сбое

Ключевая идея — сообщение подтверждается только после успешной обработки. Пока получатель не сказал «принял», шина его не удаляет.

На стороне 1С:Предприятия отправка связана с транзакцией. Сообщение, созданное внутри транзакции проведения документа, уйдёт, только если транзакция зафиксирована. Откатилось проведение — сообщения тоже нет. Ситуация «документ не провёлся, а на склад заявка уже ушла» отпадает.

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

Порядок сообщений

Внутри одного канала сообщения идут в порядке поступления. Если важно, чтобы «изменение заказа» не обогнало «создание заказа», не разносите их по разным каналам с разной нагрузкой. Либо проверяйте версию объекта в получателе и игнорируйте устаревшие данные.

Маршрутизация и преобразование данных в шине

Маршрутизация решает, куда идёт сообщение. Преобразование — в каком виде оно туда придёт. Оба шага задаются в схеме процесса интеграции в среде разработки 1С:Элемента.

Варианты маршрутизации

  • 📌 Статическая — всё из канала «Заказы» уходит в канал «WMS». Простейший случай, логика не нужна.
  • 🏷️ По параметрам — маршрутизатор читает параметр сообщения. Например, Склад = Москва → канал московского склада, Склад = Казань → казанского.
  • 📢 Рассылка нескольким получателям — одно сообщение о новом контрагенте уходит в бухгалтерию, CRM и торговлю.
  • ✂️ Разделение — пакет на 500 позиций делится на отдельные сообщения, чтобы получатель обрабатывал их по одному.

Когда преобразовывать в шине, а когда в базе

Преобразование в шине удобно, когда получатель — внешняя система со своим форматом. Схему перевода полей меняют в одном месте, а не в каждой базе-отправителе.

Если же обе стороны — типовые конфигурации 1С, проще договориться о едином формате сообщения (например, на основе EnterpriseData) и не нагружать шину лишним.

Сопоставление полей
Номер заказа в УТ→order_id в WMS
Склад (наименование)→warehouse_code
Номенклатура.Артикул→sku
Количество→qty
Дата отгрузки→ship_date (ISO 8601)

Пример выше — типичная таблица соответствия, с которой начинают проектирование преобразования. Составьте её до программирования: половина ошибок обмена появляется из-за поля, которое одна сторона считает обязательным, а другая не заполняет.

Подключение базы 1С 8.3 к шине

Подключение идёт в два этапа: разработчик описывает обмен в конфигурации, администратор задаёт параметры подключения в рабочей базе.

В конфигурации

  1. В дереве метаданных, в ветке «Общие», добавляют объект Сервис интеграции.
  2. Внутри создают каналы. Имена каналов совпадают с именами каналов процесса интеграции на стороне шины.
  3. Для каналов на получение пишут обработчик входящих сообщений в модуле менеджера сервиса интеграции.
  4. В коде конфигурации, там, где возникает событие (проведение, запись элемента), создают сообщение, заполняют тело и параметры, отправляют в канал.

Сервис интеграции — объект конфигурации. В типовую конфигурацию на поддержке его добавляют через расширение или с включённой возможностью изменения. Изменения структуры требуют обновления конфигурации базы данных с монопольным доступом — планируйте это на нерабочее время.

В рабочей базе

В режиме 1С:Предприятия задают адрес сервера шины, имя процесса интеграции и учётные данные. Это делают через стандартную функцию управления сервисами интеграции: её ищут в меню «Функции для технического специалиста», в группе стандартных функций. Там же сервис включают и выключают.

Не переносите копию рабочей базы в тестовый контур с включённым сервисом интеграции. Копия подключится к боевой шине и начнёт забирать или слать настоящие сообщения: склад получит дубли заказов. Сразу после восстановления копии отключите сервис или смените адрес шины на тестовый.

Внешние системы

Не-1С приложения подключаются к шине по AMQP 1.0. Клиентские библиотеки для этого протокола есть для Java, .NET, Python, Go и других языков. Для внешней системы шина выглядит как обычный брокер сообщений с именованными адресами-каналами.

Безопасность и аутентификация участников обмена

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

Что настроить обязательно:

  • 🔐 Отдельные учётные данные на каждую систему. Не используйте одну пару «логин — секрет» для всех баз. Иначе при утечке придётся менять её везде, а в журналах не будет видно, кто что отправлял.
  • 🚪 Права на каналы. Система должна видеть только свои каналы: WMS не нужен доступ к каналу кадровых данных.
  • 🔒 Шифрование канала связи (TLS), если шина и базы общаются через интернет или чужую сеть. Внутри закрытого контура решение за вами, но персональные данные сотрудников и клиентов лучше не гонять открытым текстом.
  • 🧱 Сетевой доступ. Порт шины открывают только для адресов серверов-участников, а не для всего интернета.
  • 🗝️ Хранение секретов. Учётные данные подключения не пишут в код конфигурации и не кладут в общие справочники с широкими правами.

Если через шину идут персональные данные (кадровые сведения, контакты клиентов), процесс интеграции становится частью системы обработки ПДн. Учтите это в документах компании по защите информации и в списке допусков.

Мониторинг шины и разбор ошибок обмена

Шина даёт веб-консоль, где видны процессы интеграции, их состояние и очереди. Смотреть в первую очередь на две вещи: запущен ли процесс и растёт ли число сообщений в каком-то канале.

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

Со стороны 1С:Предприятия смотрите журнал регистрации базы: ошибки подключения и исключения в обработчиках сервиса интеграции попадают туда. Отбор по событиям, связанным с сервисами интеграции, сразу сужает поиск.

Диагностика: выберите симптом

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

Где 1С:Шина оправдана и как строить обмены на ней

Шина нужна не всегда. Для двух баз с обменом раз в сутки хватит типовой синхронизации или выгрузки по расписанию.

СценарийШина нужна?Почему
2 базы 1С, обмен справочниками раз в деньСкорее нетТиповая синхронизация проще в поддержке
Холдинг: 5+ баз, общая НСИДаОдин источник справочников, рассылка изменений всем
1С + WMS + интернет-магазин + CRMДаРазные форматы, разные графики работы систем
Онлайн-обмен заказами, задержка в секундахДаАсинхронная доставка без опроса по расписанию
Разовая миграция данныхНетШина не для одноразовых загрузок

Практики, которые экономят время на поддержке

  1. Один канал — один тип сообщения. Канал «Заказы» и канал «Контрагенты», а не общий «Обмен». Так проще маршрутизировать и видеть, где застряло.
  2. Важное — в параметры. Тип объекта, организация, версия формата, уникальный идентификатор. Маршрутизатору не придётся разбирать тело.
  3. Сообщения небольшие. Документ на 10 000 строк лучше разделить или передавать ссылкой на файл. Большие сообщения медленнее проходят и чаще упираются в лимиты.
  4. Тестовый контур. Отдельный сервер шины или отдельные процессы интеграции для тестовых баз. Боевые и тестовые каналы не смешиваются.
  5. Карта обменов. Таблица «канал → отправитель → получатели → формат → владелец». Через год без неё никто не вспомнит, почему справочник уходит в три места.
  6. Обработка ошибок в получателе. Сообщение, которое не удалось разобрать, логируйте с текстом ошибки, а не просто бросайте исключение. Иначе оно будет падать по кругу.
Перед запуском обмена через шину в работу
Выполнено: 0 / 6

Частые вопросы

Можно ли подключить к 1С:Шине старую конфигурацию на обычных формах?
Подключение зависит от версии платформы, а не от типа форм. Нужна платформа 8.3 с поддержкой сервисов интеграции, после чего объект добавляют в конфигурацию и пишут обработчики.
Заменяет ли 1С:Шина типовые обмены через планы обмена?
Нет. Планы обмена и синхронизация данных остаются в конфигурациях. Шина — транспорт и маршрутизатор; типовой обмен её сам не использует, интеграцию через шину программируют отдельно.
Чем 1С:Шина отличается от RabbitMQ или Kafka?
Брокер общего назначения только передаёт сообщения. В 1С:Шине есть процессы интеграции с маршрутизацией и преобразованием, а со стороны 1С:Предприятия — встроенный объект для подключения без внешних компонент.
Что будет с сообщениями, если сервер шины перезагрузить?
Сообщения в очередях хранятся на сервере и после перезапуска доставляются. Неотправленные сообщения базы-отправителя ждут в самой базе и уходят после восстановления связи.
Нужен ли программист, чтобы настроить шину?
Да, для разработки процесса интеграции и кода в конфигурации. Администратор после этого только задаёт параметры подключения, включает сервис и следит за очередями.