Вопрос интеграции множества разрозненных конфигураций (ERP, БП, ЗУП, Документооборот) рано или поздно встает перед любой крупной организацией. Традиционные методы обмена, такие как «точка-точка» через HTTP-сервисы или классическая «Конвертация данных 2.0», со временем превращаются в неуправляемую сеть взаимосвязей. В этой статье мы подробно разберем, что представляет собой 1С:Шина, выясним, является ли она «волшебной кнопкой» для синхронизации, и рассмотрим реальный пример реализации обмена программным кодом.
Для начала проанализируем основное заблуждение: многие ожидают от Шины автоматического сопоставления объектов «А» и «Б». Важно понимать, что 1С:Шина — это в первую очередь транспортный механизм (ESB). Рассмотрим основные тезисы, которые помогут правильно позиционировать этот инструмент:
СервисыИнтеграции, который передает данные во внутреннюю очередь платформы мгновенно.Трансформация данных (преобразование структуры JSON источника в структуру приемника) в Шине возможна, но она не заменяет полностью логику сопоставления. Если в одной системе «Кирпич красный», а в другой «Красный кирпич», задача поиска дублей по-прежнему остается на стороне прикладного кода или систем класса MDM.
Разберем ситуацию, когда у нас 5 баз. При обмене «каждая с каждой» нам потребуется настроить 20 соединений. При использовании 1С:Шины мы переходим к топологии «Звезда». Каждая база подключается только к Шине. Это снижает сложность поддержки системы в геометрической прогрессии. Если в будущем добавится шестая база, нам нужно будет настроить лишь одно подключение к Шине, а не пять новых связей с каждой из существующих систем.
Рассмотрим пример настройки одностороннего обмена между 1С:ERP и 1С:Документооборот. Проанализируем программный код, который может быть использован в базе-приемнике для обработки пришедшего из Шины сообщения. Основная идея заключается в использовании УникальногоИдентификатора (UID) для связи объектов между системами.
Для обработки входящего сообщения в приемнике мы можем использовать следующий алгоритм:
// Фрагмент кода обработки сообщения из сервиса интеграции
СправочникЗагрузки = Сред(СтруктураДанных.Справочник, 15);
// Получаем ссылку по переданному UID из структуры данных
СправочникСсылка = Справочники[СправочникЗагрузки].ПолучитьСсылку(Новый УникальныйИдентификатор(СтруктураДанных.Ref));
Если ОбщегоНазначения.СсылкаСуществует(СправочникСсылка) Тогда
// Если объект найден, получаем его для обновления
СправочникОбъект = СправочникСсылка.ПолучитьОбъект();
Иначе
// Если объекта нет, создаем новый (элемент или группу)
Если СтруктураДанных.Свойство("IsFolder") И СтруктураДанных.IsFolder Тогда
СправочникОбъект = Справочники[СправочникЗагрузки].СоздатьГруппу();
Иначе
СправочникОбъект = Справочники[СправочникЗагрузки].СоздатьЭлемент();
КонецЕсли;
// Устанавливаем принудительно ссылку, чтобы UID совпадал в обеих базах
СправочникОбъект.УстановитьСсылкуНового(СправочникСсылка);
КонецЕсли;
// Автоматическое заполнение реквизитов, чьи имена совпадают
ЗаполнитьЗначенияСвойств(СправочникОбъект, СтруктураДанных);
СправочникОбъект.Записать();
Важное замечание: Метод ЗаполнитьЗначенияСвойств отлично работает только в том случае, если реквизиты справочников в обеих базах называются идентично. Если структуры различаются (например, в ERP это Партнер, а в БП — Контрагент), вам потребуется прописать таблицу соответствий или использовать механизмы трансформации внутри самой 1С:Шины (используя среду разработки 1С:EDT).
Выясним причину, по которой автоматическая синхронизация через Шину может привести к появлению дублей. Если в базе-приемнике уже есть «Программист 1С», созданный вручную, а из базы-источника приходит объект с тем же наименованием, но другим UID, система создаст вторую запись. Чтобы этого избежать, рассмотрим следующие шаги:
Перечисления[Имя].ИмяЗначения.Разберем техническую сторону вопроса, которую часто упускают из вида. 1С:Шина — это отдельный программный продукт, работающий вне платформы 1С:Предприятие:
СервисИнтеграции. Это позволяет отправлять данные командой СервисыИнтеграции.ИмяСервиса.ОтправитьСообщение().Проанализировав опыт использования, можно сделать вывод: 1С:Шина — это мощный инструмент для крупных ландшафтов. Она не избавляет программиста от написания кода (особенно в части обработки сопоставлений и трансформации сложных объектов), но она полностью снимает вопросы надежности транспорта и контроля обменов. Если ваша задача — синхронизировать два справочника между двумя базами, возможно, будет достаточно простых HTTP-сервисов. Но если вы строите корпоративную среду из 5-10 и более систем, Шина станет фундаментом, который убережет вашу IT-архитектуру от хаоса.