При переходе с устаревших систем на современные решения или при необходимости интеграции 1С:ERP с историческими базами 1С:УПП перед разработчиком встает вопрос выбора оптимального транспорта данных. Основная задача — обеспечить передачу справочников в реальном времени, избегая громоздких стандартных механизмов обмена через файлы. Разберем подробно три основные технологии: COM-соединение, Web-сервисы и HTTP-сервисы, а также выясним, какая из них лучше подходит под современные требования производительности и стабильности.
Технология 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(ПараметрыСоединения);
// Вызов функции создания элемента справочника
НовыйСсылка = БазаПриемник.Справочники.Номенклатура.СоздатьЭлемент();
// Заполнение реквизитов...
НовыйСсылка.Записать();
Исключение
Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;
Для реализации обмена в реальном времени наиболее эффективным решением признаны HTTP-сервисы. Разберем по шагам, почему это так. В отличие от COM, HTTP-запросы работают по принципу "выполнил и забыл". Соединение не удерживается постоянно, а данные передаются в легком текстовом формате JSON.
Рассмотрим подробнее преимущества этого метода:
HTTPСоединение работает в разы быстрее, чем инициализация тяжелого COM-объекта.Для реализации этого обмена в базе-приемнике (УПП) необходимо создать 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Соединение.ОтправитьДляОбработки(Запрос);
Web-сервисы во многом похожи на HTTP-сервисы, но используют протокол SOAP и формат XML. Выясним, когда стоит выбрать их. Эта технология удобна тем, что она жестко типизирована. Вы заранее описываете структуру данных (XDTO-пакет), и платформа 1С сама проверяет соответствие передаваемых данных этой структуре.
Однако в задачах простого обмена справочниками Web-сервисы проигрывают HTTP-сервисам из-за "тяжеловесности" XML-пакетов и сложности настройки XDTO-пакетов. Если вам нужен максимально быстрый и гибкий инструмент, лучше остановиться на HTTP + JSON.
Существует еще один способ, который часто упускают из виду — OData. Рассмотрим его подробнее. В 1С:Предприятии можно включить публикацию стандартного интерфейса OData без написания кода в базе-приемнике. После публикации вы сможете создавать или изменять данные в УПП, просто отправляя запросы по определенным URL.
Важный момент: OData идеально подходит для чтения данных, но при записи может возникнуть проблема с выполнением бизнес-логики (проверки при записи, подписки на события). Если в УПП при создании справочника должны срабатывать сложные проверки, лучше написать собственный HTTP-сервис, где вы сможете программно управлять объектом СправочникОбъект.
В процессе обсуждения часто возникает вопрос: можно ли открыть форму документа или справочника в базе-приемнике из базы-источника, как это позволял делать OLE? Напрямую через HTTP или Web-сервисы это сделать нельзя, так как это серверные технологии, не имеющие графического интерфейса.
Проанализируем современный обходной путь: использование навигационных ссылок. Вы можете передать из одной базы в другую внутреннюю ссылку объекта (ПолучитьНавигационнуюСсылку()). Если у пользователя открыты оба приложения, выполнение команды ПерейтиПоСсылке(ПолученнаяСсылка) мгновенно откроет нужный объект в соответствующей базе. Это гораздо стабильнее и безопаснее, чем попытки удаленного управления интерфейсом через OLE.
Выяснив все нюансы, мы можем составить итоговый план действий для разработки обмена между ERP и УПП:
ЗаписатьJSON), это минимизирует ошибки типов данных.HTTPS.Разберем типичный сценарий: в ERP меняется контрагент, срабатывает подписка на событие ПриЗаписи, которая формирует JSON и отправляет его на HTTP-сервис УПП. В УПП код сервиса принимает запрос, находит контрагента по ГУИД или коду и обновляет его реквизиты. Такой подход обеспечивает работу в реальном времени с минимальными задержками и высокой отказоустойчивостью.