Сервисы интеграции 1С — это объект метаданных платформы (с версии 8.3.17), через который информационная база обменивается сообщениями с 1С:Шиной. Чтобы подключить базу, нужно создать сервис интеграции (лучше в расширении), загрузить в него каналы по API-ключам информационной системы из шины, написать обработчик получения и код отправки сообщений, активировать сервис в режиме предприятия и включить регламентное задание, которое вызывает СервисыИнтеграции.ВыполнитьОбработку().
Ниже — порядок действий, который я использую, когда подключаю к шине несколько баз: типовые БП, УТ или ERP и самописные конфигурации. Главная идея — держать всю интеграционную логику в одном расширении с правилами, а не размазывать её по модулям каждой конфигурации.
Что такое 1С:Шина и где здесь сервисы интеграции
1С:Шина — сервисная шина предприятия (ESB) от фирмы «1С». Она принимает сообщения от участников обмена, маршрутизирует их по процессам интеграции, при необходимости преобразует и гарантированно доставляет получателям. Процессы настраиваются в среде разработки шины визуально, сложные преобразования — небольшими скриптами.
Со стороны 1С участник подключается через сервис интеграции. В нём есть:
| Элемент | Назначение |
|---|---|
| Сервис интеграции | Подключение к внешнему сервису: адрес приложения шины, ключ и секрет |
| Канал отправки | Очередь исходящих сообщений базы |
| Канал получения | Очередь входящих сообщений и обработчик, который их разбирает |
| Обработчик получения | Процедура в общем модуле, вызывается платформой для каждого входящего сообщения |
| Регламентное задание | Периодически запускает обмен с шиной |
Сообщение состоит из тела (двоичный поток — JSON, XML, что угодно) и параметров (небольшие пары «ключ — значение», удобные для маршрутизации).

Подготовка на стороне 1С:Шины
Перед работой в конфигураторе в панели управления шины должно быть готово следующее:
- Создано приложение, в нём опубликован процесс интеграции — схема движения данных между участниками.
- Заведены информационные системы — по одной на каждую базу-участника.
- Для каждой информационной системы сгенерированы API-ключи: идентификатор ключа и секрет клиента.
- Системы включены в нужные группы участников процесса, процесс запущен.
Частая ошибка — один набор ключей на две базы. Шина различает отправителя именно по ключу, и при общих ключах сообщения начинают ходить «сами к себе».
Создаём сервис интеграции в расширении
Подключать типовую конфигурацию к шине через изменение основной конфигурации я не рекомендую: это снятие с поддержки и лишняя работа при каждом обновлении. Всё нужное помещается в расширение конфигурации.
- Создайте расширение с назначением «Адаптация», снимите флаг безопасного режима, если обработчикам нужен полный доступ к данным.
- В ветке «Общие → Сервисы интеграции» добавьте сервис, например
ОбменСШиной. - Нажмите «Загрузить каналы» и укажите адрес приложения шины, идентификатор ключа как пользователя и секрет как пароль. Платформа покажет каналы, доступные этой информационной системе.
- Оставьте только каналы этой базы: обычно один на отправку и один или несколько на получение.
- Для каждого канала получения задайте обработчик — процедуру в серверном общем модуле расширения.
Поле адреса внешнего сервиса в свойствах сервиса в конфигураторе лучше оставить пустым: реальные адреса для каждой базы задаются в режиме предприятия. Иначе тестовая копия базы может начать отправлять сообщения в боевую шину.
Обработчик получения сообщения
Обработчик держу тонким: только чтение тела и вызов общей логики загрузки. Если установить Отказ = Истина, сообщение не считается обработанным и придёт повторно.
// Обработчик канала получения сервиса интеграции «ОбменСШиной».
Процедура ПриПолученииСообщенияИзШины(Сообщение, Отказ) Экспорт
Попытка
ТекстСообщения = ПрочитатьТелоСообщения(Сообщение);
ОбменСШинойСервер.ЗагрузитьДанныеСообщения(ТекстСообщения, Сообщение.Параметры);
Исключение
Отказ = Истина;
ЗаписьЖурналаРегистрации("ОбменСШиной.Получение", УровеньЖурналаРегистрации.Ошибка, , ,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
// Читает тело сообщения сервиса интеграции в строку UTF-8.
Функция ПрочитатьТелоСообщения(Сообщение)
Поток = Сообщение.ПолучитьТелоКакПоток();
ЧтениеДанных = Новый ЧтениеДанных(Поток);
Результат = ЧтениеДанных.Прочитать();
ЧтениеДанных.Закрыть();
Возврат ПолучитьСтрокуИзДвоичныхДанных(Результат.ПолучитьДвоичныеДанные(), КодировкаТекста.UTF8);
КонецФункцииУчтите режим транзакции канала получения. Если он включён, ошибка на одном сообщении останавливает очередь, пока сообщение не обработается. Для справочников НСИ это часто правильно (порядок важен), для независимых документов — лучше выключить и разбирать ошибки по одной.
Отправка сообщений в шину
Отправку удобно повесить на подписку на событие ПриЗаписи нужных объектов. Сначала — проверки: не отправляем при загрузке из обмена и при выключенном сервисе, иначе платформа выдаст ошибку «Сервис интеграции не активен» и запись объекта упадёт.
// Подписка на событие ПриЗаписи справочника «Номенклатура».
Процедура ОтправитьНоменклатуруВШинуПриЗаписи(Источник, Отказ) Экспорт
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если Не СервисыИнтеграции.ОбменСШиной.ПолучитьАктивность() Тогда
Возврат;
КонецЕсли;
Данные = Новый Структура;
Данные.Вставить("guid", Строка(Источник.Ссылка.УникальныйИдентификатор()));
Данные.Вставить("code", Источник.Код);
Данные.Вставить("name", Источник.Наименование);
Данные.Вставить("deleted", Источник.ПометкаУдаления);
ОбменСШинойСервер.ОтправитьСообщение("Номенклатура", Данные);
КонецПроцедурыСама отправка — в общем модуле: сериализуем данные в JSON, создаём сообщение в канале отправки и пишем тело в поток.
// Создаёт сообщение в канале отправки сервиса интеграции.
Процедура ОтправитьСообщение(ТипДанных, Данные) Экспорт
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Данные);
ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(ЗаписьJSON.Закрыть(), КодировкаТекста.UTF8);
Канал = СервисыИнтеграции.ОбменСШиной.ОтправкаДанных;
Сообщение = Канал.СоздатьСообщение();
Сообщение.Параметры.Вставить("ТипДанных", ТипДанных);
Поток = Сообщение.ПолучитьТелоКакПоток();
ЗаписьДанных = Новый ЗаписьДанных(Поток);
ЗаписьДанных.Записать(ДвоичныеДанные);
ЗаписьДанных.Закрыть();
Канал.ОтправитьСообщение(Сообщение);
КонецПроцедурыИмена методов работы с телом и отправки сверяйте с синтакс-помощником вашей версии платформы: API сервисов интеграции дорабатывался от релиза к релизу. В параметр ТипДанных кладу признак, по которому получатель выбирает правило загрузки, — так один канал обслуживает много видов объектов.
Активация в режиме предприятия и регламентное задание
После обновления конфигурации базы данных:
- Откройте стандартную обработку настройки сервисов интеграции (в БСП-конфигурациях она доступна из раздела администрирования; в остальных — через «Все функции»).
- Укажите адрес приложения шины, идентификатор ключа и секрет для этой базы.
- Включите активность сервиса.
То же можно сделать кодом через НастройкиСервисаИнтеграции и УстановитьАктивность(Истина) — удобно при массовом развёртывании.
Обмен с шиной запускается вызовом СервисыИнтеграции.ВыполнитьОбработку(). Он стартует фоновые задания обработки на ограниченное время, поэтому вызывать его нужно регулярно — регламентным заданием раз в пару минут, под пользователем с административными правами.
// Обработчик регламентного задания «Обмен с 1С:Шиной».
Процедура ОбменСШинойРегламент() Экспорт
ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ОбменСШиной);
СервисыИнтеграции.ВыполнитьОбработку();
КонецПроцедурыСтроку с ПриНачалеВыполненияРегламентногоЗадания оставьте, только если в конфигурации есть БСП.
Правила выгрузки и загрузки вместо кода в каждой подписке
Когда к шине подключается больше двух баз, код «под каждый объект» быстро превращается в кашу. Я выношу логику в справочник правил внутри расширения:
- Правило выгрузки: тип объекта, условие (например, «не помечен на удаление»), способ формирования тела и активность.
- Правило загрузки: значение параметра
ТипДанных, способ поиска существующего объекта (по GUID, коду, ИНН) и алгоритм заполнения.
Способов сформировать тело сообщения несколько, и выбирать стоит по задаче:
| Способ | Когда подходит |
|---|---|
| Скрипт на встроенном языке, JSON | Нестандартный формат, максимальная гибкость |
| EnterpriseData через БСП | Обе базы типовые с современной БСП, формат уже согласован |
| Правила Конвертации данных 2 | В компании уже есть отлаженные правила КД |
| Схема компоновки данных | Нужна выборка с отборами и вычислениями без кода |

Типичные ошибки при подключении к 1С:Шине
- Нет регламентного задания. Сообщения создаются, но лежат в очереди и никуда не уходят.
- Отправка без проверки активности. Выключили сервис — перестали записываться документы.
- Бесконечный пинг-понг. База получила элемент, записала его, подписка снова отправила его в шину. Ставьте
ОбменДанными.Загрузка = Истинапри записи загруженных объектов. - Поиск по наименованию. Дубли и перезаписи чужих элементов. Ищите по GUID источника, сохранённому в регистре соответствий.
- Тяжёлая загрузка в обработчике. Проведение документов прямо в обработчике тормозит очередь. Принимайте данные, а проведение выполняйте отдельным заданием.
- Отсутствие журнала. Без записей в журнал регистрации и регистра ошибок поддержка интеграции превращается в угадывание.
Шина берёт на себя доставку и маршрутизацию, но не знает, как правильно загрузить документ в вашу базу. Эта часть — правила загрузки — и определяет качество интеграции.
Если нужно спроектировать обмен между несколькими базами через шину или перевести на неё старые обмены, это задача интеграционной шины 1С; для двух-трёх баз иногда проще классический обмен между базами 1С.
Итог
- Сервисы интеграции — штатный механизм платформы для работы с 1С:Шиной; размещайте их в расширении.
- У каждой базы свои API-ключи и свои каналы, адреса задаются в режиме предприятия.
- Обработчик получения держите тонким, ошибки — через
Откази журнал регистрации. - Без регламентного задания с
СервисыИнтеграции.ВыполнитьОбработку()обмен не идёт. - Правила выгрузки и загрузки в справочниках избавляют от кода под каждый объект.




