Переход серверной части 1С на операционные системы семейства Linux ставит перед разработчиками серьезную задачу: поиск адекватной замены привычному V83.COMConnector. Технология COM (Component Object Model) является проприетарным решением Microsoft и физически отсутствует в среде Linux. В данной статье мы подробно разберем, какие современные инструменты предоставляет платформа 1С для реализации межсерверного взаимодействия в среде "пингвина", проанализируем их преимущества и рассмотрим примеры реализации.
Рассмотрим наиболее гибкий и производительный способ взаимодействия — создание собственных HTTP-сервисов. Начиная с версии 8.3.6, это основной инструмент для интеграции. В отличие от COM, который требует постоянного активного соединения и потребляет значительные ресурсы сервера, HTTP-запросы работают по принципу "запрос-ответ", что значительно снижает нагрузку на систему.
Разберем по шагам, как организовать передачу данных:
HTTP-сервис.Посмотрим на пример кода для отправки данных из одной базы в другую:
Соединение = Новый HTTPСоединение("server_address", , "user", "password");
Запрос = Новый HTTPЗапрос("/директория_публикации/hs/my_api/v1/send_data");
ДанныеДляОтправки = Новый Структура;
ДанныеДляОтправки.Вставить("НомерДокумента", Объект.Номер);
ДанныеДляОтправки.Вставить("Дата", Объект.Дата);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеДляОтправки);
СтрокаJSON = ЗаписьJSON.Закрыть();
Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Проанализируем ситуацию: если целевая база успешно приняла данные, она вернет код состояния 200. Такой подход позволяет не только передавать данные, но и вызывать любые процедуры в удаленной базе, аналогично тому, как это делалось через COM.
Выясним причину, по которой иногда стоит выбрать Веб-сервисы (SOAP) вместо HTTP. SOAP — это протокол, который обеспечивает строгую типизацию данных через описание WSDL. Это наиболее близкий функциональный аналог COM-соединения в плане вызова удаленных процедур (RPC).
Разберем процесс подключения:
Веб-сервис.WSПрокси.Пример программного вызова веб-сервиса:
Определения = Новый WSОпределения("http://server/base/ws/myservice?wsdl", "user", "pass");
Прокси = Новый WSПрокси(Определения, "http://www.mycompany.com/service", "MyServiceName", "MyPortName");
Прокси.Пользователь = "user";
Прокси.Пароль = "pass";
Результат = Прокси.ВыполнитьДействие(Параметр1, Параметр2);
Рассмотрим подробнее механизм OData. Это встроенный в платформу REST-интерфейс, который позволяет обращаться к объектам метаданных (справочникам, документам, регистрам) напрямую через HTTP без написания кода на стороне принимающей базы. Для работы на Linux достаточно опубликовать базу на веб-сервере (Apache или Nginx) и в параметрах публикации разрешить использование стандартного интерфейса OData.
Это идеальное решение, если вам нужно просто прочитать данные или создать новый элемент справочника, не описывая при этом сложные алгоритмы обработки. Формат взаимодействия также основывается на JSON или XML.
Проанализируем ситуацию, когда необходимо работать с данными на уровне СУБД. На Linux-сервере мы можем использовать механизм Внешние источники данных. Поскольку 1С на Linux работает с PostgreSQL или MS SQL, мы можем настроить прямое подключение к таблицам другой базы через драйверы ODBC (например, unixODBC).
Важный момент: при чтении данных напрямую из таблиц другой базы 1С через SQL следует помнить, что вы обходите бизнес-логику конфигурации (не срабатывают события ПередЗаписью, не проверяются права доступа на уровне RLS). Этот метод хорош для высокопроизводительного чтения больших объемов информации.
Если задача не требует мгновенного ответа (синхронности), не стоит забывать про старый добрый метод — обмен через файлы. В среде Linux это реализуется через монтирование сетевых папок (NFS или Samba). Одна база выгружает данные в XML или JSON, а вторая база по регламентному заданию их считывает. Это самый отказоустойчивый метод: если принимающая база "легла", файл просто подождет своей очереди, в то время как HTTP-соединение выдаст ошибку.
Посмотрим на более экзотичный, но штатный способ — Система взаимодействия. Этот механизм позволяет программно отправлять сообщения между пользователями разных информационных баз. К сообщению можно прикрепить структуру данных. На стороне получателя сработает обработчик оповещения, который сможет обработать данные. Это фактически встроенная в платформу "шина сообщений".
Подводя итог, можно утверждать, что отсутствие COM-соединения на Linux — это не ограничение, а стимул к переходу на более современные и надежные протоколы. Рекомендуемым подходом является использование HTTP-сервисов для оперативного взаимодействия и OData для простых операций с данными. Для интеграции с внешними системами на уровне Linux также можно использовать Python или Go в качестве "прослойки", вызывая их через команду ЗапуститьПриложение, что дает практически безграничные возможности по автоматизации.