Какое внешнее подключение к 1С лучше выбрать, чтобы избежать проблем с 64-разрядными системами

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

При интеграции сторонних систем с 1С многие разработчики сталкиваются с так называемой «проблемой 64 бит» при использовании COM-соединения (V83.COMConnector). Суть проблемы заключается в том, что 64-разрядный сервер 1С или внешнее 64-битное приложение не могут напрямую инициализировать 32-битные библиотеки COM без сложных манипуляций с настройкой компонентов DCOM и системных учетных записей. В этой статье мы разберем современные и надежные способы подключения к 1С, которые позволяют полностью отказаться от «танцев с бубном» и обеспечивают стабильную работу в любой архитектуре.

Причины отказа от COM-технологий

Прежде чем перейти к решениям, проанализируем, почему V83.COMConnector считается устаревшим. Во-первых, это привязка к операционной системе Windows. Если вы планируете использовать серверы на Linux, COM-соединение там просто не будет работать. Во-вторых, каждое такое соединение создает полноценный сеанс, потребляя клиентскую лицензию и значительный объем оперативной памяти. В-третьих, отладка таких соединений крайне затруднительна. Разберем альтернативы, которые лишены этих недостатков.

Использование HTTP-сервисов

Это наиболее гибкий и современный метод интеграции. HTTP-сервисы позволяют превратить 1С в полноценный веб-сервер, который принимает REST-запросы. Разрядность систем здесь не имеет значения, так как обмен данными происходит по протоколу HTTP/HTTPS.

Рассмотрим по шагам процесс создания простейшего сервиса для получения данных о товаре:

  1. В конфигураторе создадим объект HTTP-сервис.
  2. Определим шаблон URL, например, /get_item/{Articul}.
  3. Добавим метод GET и назначим ему обработчик в модуле.

Посмотрим на пример кода обработчика, который возвращает данные в формате JSON:


Функция get_itemGet(Запрос)
    Артикул = Запрос.ПараметрыURL.Получить("Articul");
    ТоварСсылка = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Артикул);
    
    Если ТоварСсылка.Пустая() Тогда
        Ответ = Новый HTTPСервисОтвет(404);
        Возврат Ответ;
    КонецЕсли;
    
    СтруктураДанных = Новый Структура;
    СтруктураДанных.Вставить("Наименование", ТоварСсылка.Наименование);
    СтруктураДанных.Вставить("Цена", ТоварСсылка.Цена);
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, СтруктураДанных);
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть());
    Ответ.Заголовки.Вставить("Content-Type", "application/json");
    
    Возврат Ответ;
КонецФункции

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

Если вам нужно быстро предоставить доступ к данным без написания кода, стоит использовать Standard OData Interface. Это встроенный механизм 1С, который автоматически формирует REST API для всех объектов метаданных.

Выясним, как его включить и использовать:

Теперь внешняя система может отправлять запросы типа http://server/base/odata/standard.odata/Catalog_Номенклатура. Важно помнить, что oData не позволяет реализовать сложную бизнес-логику при записи, поэтому для изменения данных эксперты рекомендуют все же использовать собственные HTTP-сервисы.

Web-сервисы (SOAP)

Для корпоративных систем, где важна строгая типизация данных, отлично подходят Web-сервисы. В отличие от HTTP-сервисов, они используют протокол SOAP и автоматически генерируют WSDL-описание. Это позволяет внешней системе (например, на Java или .NET) автоматически построить классы для работы с объектами 1С.

Разберем ситуацию, когда это выгодно. Если вам нужно передавать сложные структуры данных с гарантией того, что типы полей не изменятся, Web-сервис обеспечит необходимую дисциплину обмена. Проблемы с разрядностью здесь также отсутствуют, так как взаимодействие идет через текстовые XML-пакеты.

Внешние источники данных

Проанализируем ситуацию, когда 1С сама должна выступать инициатором соединения и «забирать» данные из внешней SQL-базы. Вместо прямого подключения через COM к ADODB.Connection, следует использовать механизм Внешние источники данных.

Этот механизм позволяет:

  1. Подключить таблицы любой СУБД (SQL Server, PostgreSQL, Oracle) через ODBC-драйвер.
  2. Работать с внешними таблицами в коде 1С почти так же, как с обычными справочниками (используя запросы и объектную модель).
  3. Избежать проблем разрядности: достаточно просто установить 64-битный ODBC-драйвер на сервер 1С.

Использование брокеров сообщений (RabbitMQ, Kafka)

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

Подведем итоги

Для решения проблем с 64-битной системой при внешнем подключении к 1С рекомендуется придерживаться следующей стратегии:

  1. Для простых запросов и мобильных приложений: Использовать HTTP-сервисы с форматом JSON.
  2. Для быстрого доступа к таблицам: Включить стандартный интерфейс oData.
  3. Для жестко регламентированного обмена в энтерпрайз-секторе: Развернуть Web-сервисы (SOAP).
  4. Для интеграции с СУБД: Настроить Внешние источники данных.

Главный совет: забудьте про COMConnector. Переход на протоколы HTTP и REST не только решит проблему разрядности, но и сделает вашу систему готовой к масштабированию, работе на Linux и облачной интеграции.

← На главную