Какую технологию выбрать для обмена данными между 1С:ERP и 1С:УПП: подробный разбор

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет IT и автоматизация бизнеса
← На главную

При переходе с устаревших систем на современные решения или при необходимости интеграции 1С:ERP с историческими базами 1С:УПП перед разработчиком встает вопрос выбора оптимального транспорта данных. Основная задача — обеспечить передачу справочников в реальном времени, избегая громоздких стандартных механизмов обмена через файлы. Разберем подробно три основные технологии: COM-соединение, Web-сервисы и HTTP-сервисы, а также выясним, какая из них лучше подходит под современные требования производительности и стабильности.

Вариант 1: Использование COM-соединения (v83.COMConnector)

Технология COM долгое время была стандартом для обмена между базами, находящимися на одном физическом сервере. Рассмотрим подробнее этот механизм. Если 1С:ERP и 1С:УПП расположены на одном сервере под управлением Windows Server, создание COM-соединения позволяет обращаться к базе-приемнику напрямую из кода базы-источника.

Проанализируем основные преимущества: простота реализации "из коробки" и возможность вызова экспортных процедур и функций приемника без публикации базы на веб-сервере. Однако в 2024 году этот метод считается устаревающим. Выясним причину: COM-объекты крайне чувствительны к разрядности платформы (32/64 бит) и версии установленного клиента. Кроме того, каждое соединение потребляет одну полную лицензию 1С и создает нагрузку на память сервера, которая не всегда корректно освобождается при ошибках.

Посмотрим на пример кода для инициализации соединения:


// Инициализация COM-соединения с УПП
ПараметрыСоединения = "Srvr='ServerName';Ref='UPP_Base';Usr='Login';Pwd='Password';";
Connector = Новый COMОбъект("V83.COMConnector");
Попытка
    БазаПриемник = Connector.Connect(ПараметрыСоединения);
    // Вызов функции создания элемента справочника
    НовыйСсылка = БазаПриемник.Справочники.Номенклатура.СоздатьЭлемент();
    // Заполнение реквизитов...
    НовыйСсылка.Записать();
Исключение
    Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;

Вариант 2: HTTP-сервисы и формат JSON — современный стандарт

Для реализации обмена в реальном времени наиболее эффективным решением признаны HTTP-сервисы. Разберем по шагам, почему это так. В отличие от COM, HTTP-запросы работают по принципу "выполнил и забыл". Соединение не удерживается постоянно, а данные передаются в легком текстовом формате JSON.

Рассмотрим подробнее преимущества этого метода:

  1. Высокая скорость: Использование HTTPСоединение работает в разы быстрее, чем инициализация тяжелого COM-объекта.
  2. Масштабируемость: Базы могут находиться на разных серверах, в разных городах или даже в облаках.
  3. Кроссплатформенность: Решение не зависит от операционной системы и корректно работает на Linux-серверах.

Для реализации этого обмена в базе-приемнике (УПП) необходимо создать HTTP-сервис, а в базе-источнике (ERP) написать код отправки данных. Проанализируем процесс сериализации данных в JSON:


// Пример отправки данных из ERP в УПП по HTTP
Данные = Новый Структура;
Данные.Вставить("Наименование", СправочникОбъект.Наименование);
Данные.Вставить("Код", СправочникОбъект.Код);

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Данные);
СтрокаJSON = ЗаписьJSON.Закрыть();

HTTPСоединение = Новый HTTPСоединение("upp-server.local", , "api_user", "password");
Запрос = Новый HTTPЗапрос("/v1/exchange/catalog");
Запрос.УстановитьТелоИзСтроки(СтрокаJSON);
Ответ = HTTPСоединение.ОтправитьДляОбработки(Запрос);

Вариант 3: Web-сервисы (SOAP) и XDTO

Web-сервисы во многом похожи на HTTP-сервисы, но используют протокол SOAP и формат XML. Выясним, когда стоит выбрать их. Эта технология удобна тем, что она жестко типизирована. Вы заранее описываете структуру данных (XDTO-пакет), и платформа 1С сама проверяет соответствие передаваемых данных этой структуре.

Однако в задачах простого обмена справочниками Web-сервисы проигрывают HTTP-сервисам из-за "тяжеловесности" XML-пакетов и сложности настройки XDTO-пакетов. Если вам нужен максимально быстрый и гибкий инструмент, лучше остановиться на HTTP + JSON.

Вариант 4: Стандартный интерфейс OData

Существует еще один способ, который часто упускают из виду — OData. Рассмотрим его подробнее. В 1С:Предприятии можно включить публикацию стандартного интерфейса OData без написания кода в базе-приемнике. После публикации вы сможете создавать или изменять данные в УПП, просто отправляя запросы по определенным URL.

Важный момент: OData идеально подходит для чтения данных, но при записи может возникнуть проблема с выполнением бизнес-логики (проверки при записи, подписки на события). Если в УПП при создании справочника должны срабатывать сложные проверки, лучше написать собственный HTTP-сервис, где вы сможете программно управлять объектом СправочникОбъект.

Решение проблемы взаимодействия с формами

В процессе обсуждения часто возникает вопрос: можно ли открыть форму документа или справочника в базе-приемнике из базы-источника, как это позволял делать OLE? Напрямую через HTTP или Web-сервисы это сделать нельзя, так как это серверные технологии, не имеющие графического интерфейса.

Проанализируем современный обходной путь: использование навигационных ссылок. Вы можете передать из одной базы в другую внутреннюю ссылку объекта (ПолучитьНавигационнуюСсылку()). Если у пользователя открыты оба приложения, выполнение команды ПерейтиПоСсылке(ПолученнаяСсылка) мгновенно откроет нужный объект в соответствующей базе. Это гораздо стабильнее и безопаснее, чем попытки удаленного управления интерфейсом через OLE.

Итоговые рекомендации по выбору

Выяснив все нюансы, мы можем составить итоговый план действий для разработки обмена между ERP и УПП:

  1. Если базы на одном Windows-сервере и обмен нужен "вчера" для пары справочников — используйте COM.
  2. Если вы строите надежную систему с заделом на будущее — реализуйте HTTP-сервис на стороне УПП и передавайте данные из ERP в формате JSON.
  3. Для передачи данных используйте встроенную сериализацию 1С (ЗаписатьJSON), это минимизирует ошибки типов данных.
  4. Для открытия объектов в другой базе используйте передачу навигационных ссылок вместо управления через OLE.
  5. Не забывайте про безопасность: при использовании веб-технологий обязательно настраивайте авторизацию и, при выходе во внешние сети, используйте HTTPS.

Разберем типичный сценарий: в ERP меняется контрагент, срабатывает подписка на событие ПриЗаписи, которая формирует JSON и отправляет его на HTTP-сервис УПП. В УПП код сервиса принимает запрос, находит контрагента по ГУИД или коду и обновляет его реквизиты. Такой подход обеспечивает работу в реальном времени с минимальными задержками и высокой отказоустойчивостью.

← На главную