Как настроить обмен данными между базами 1С на сервере Linux, если не работает COM-соединение?

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

Переход с операционной системы Windows на Linux в экосистеме 1С приносит множество преимуществ, таких как стабильность и экономия на лицензиях, однако он также сопряжен с рядом технических ограничений. Одной из самых распространенных проблем является невозможность использования COM-соединения (COMConnector) для прямой связи между информационными базами. В этой статье мы подробно разберем, почему это происходит, и рассмотрим альтернативные, более современные способы интеграции в среде Linux.

Почему «прямое подключение» не работает на Linux?

Разберем первопричину проблемы. Технология COM (Component Object Model) является проприетарным решением корпорации Microsoft. Она глубоко интегрирована в ядро Windows и реестр системы. На платформе 1С для Windows библиотека comcntrv8.dll позволяет одной базе буквально «зайти в гости» к другой, используя ресурсы операционной системы.

В серверной версии 1С для Linux аналогичной библиотеки с расширением .so попросту не существует. Платформа 1С на Linux не поддерживает COM-объекты. Поэтому при попытке выполнить код Новый COMОбъект("V83.COMConnector") на стороне Linux-сервера система всегда будет выдавать ошибку о том, что класс не зарегистрирован. Это фундаментальное ограничение, которое невозможно обойти установкой дополнительных пакетов. Нам необходимо менять саму архитектуру взаимодействия.

Решение №1: Публикация базы на веб-сервере и использование веб-сервисов

Это самый рекомендуемый и надежный способ для Linux-инфраструктуры. Вместо того чтобы пытаться подключиться к файлам или процессам другой базы, мы будем обращаться к ней как к веб-сайту. Рассмотрим этот процесс по шагам.

Шаг 1: Публикация базы. На сервере под управлением Linux (например, Ubuntu или Centos) должен быть установлен веб-сервер (Apache или Nginx). С помощью утилиты webinst или через конфигуратор 1С (если есть доступ к GUI) необходимо опубликовать информационную базу. После этого база станет доступна по HTTP-протоколу.

Шаг 2: Использование SOAP или REST. Проанализируем, какой тип веб-сервиса нам подходит. Если мы используем типовые конфигурации (например, ЗКГУ 3.1 или БСП), в них уже встроены механизмы обмена через веб-сервисы. В базе-приемнике достаточно указать адрес публикации, логин и пароль.

Если же мы пишем свою интеграцию, мы можем создать объект ОпределенияWS. Посмотрим на пример кода для подключения к веб-сервису другой базы:


Определения = Новый WSОпределения("http://server_name/base_name/ws/ExchangeData?wsdl", "Администратор", "Пароль");
Прокси = Новый WSПрокси(Определения, "http://www.1c.ru/Exchange", "ExchangeData", "ExchangeDataSoap");
Результат = Прокси.ВыполнитьВыгрузкуДанных(ПараметрыОбмена);

Такой подход полностью независим от операционной системы и работает одинаково хорошо как на Windows, так и на Linux.

Решение №2: Использование стандартного интерфейса OData

Если нам нужно просто прочитать данные или быстро записать их в другую базу без написания сложных веб-сервисов, проанализируем возможности OData. Это автоматический REST-интерфейс, который 1С предоставляет «из коробки».

Чтобы включить его, необходимо выполнить публикацию базы с флагом «Публиковать стандартный интерфейс OData». После этого мы можем получать данные из любой таблицы базы простым HTTP-запросом. Например, чтобы получить список сотрудников из ЗКГУ, мы можем отправить GET запрос. Рассмотрим пример кода на стороне базы-источника:


Соединение = Новый HTTPСоединение("server_name", , "Login", "Password");
Запрос = Новый HTTPЗапрос("/base_name/odata/standard.odata/Catalog_Сотрудники?$format=json");
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
    // Обрабатываем JSON с данными
КонецЕсли;

Решение №3: Файловый обмен и исправление ошибок XML

Если использование веб-серверов по каким-то причинам невозможно, остается классический обмен через файлы (XML или JSON). Однако на Linux программисты часто сталкиваются с ошибкой «Extra content at the end of the document» или «Ошибка разбора XML». Разберем причины этой ситуации.

  1. Регистрозависимость путей. В Linux пути /Home/Exchange/ и /home/exchange/ — это две разные папки. Если в коде зашит жесткий путь или он передается с ошибкой в регистре, файл не будет найден.
  2. Права доступа (Permissions). Сервер 1С на Linux работает от имени пользователя usr1cv8. Если файл обмена создается другим процессом (например, FTP-сервером), то у 1С может не быть прав на чтение или удаление этого файла. Необходимо убедиться, что права установлены как 775 или 777.
  3. Windows-пути в коде. Как видно из лога ошибок, часто в коде мелькают пути вида C:/Users/.... На Linux таких путей не существует. Выясним причину: скорее всего, код пытается использовать клиентский временный каталог на сервере. Всегда используйте функцию КаталогВременныхФайлов(), которая на Linux вернет путь в папку /tmp/.

Ошибка «Extra content at the end of the document» (Лишние данные в конце документа) обычно означает, что XML-файл поврежден. Проанализируем ситуацию: это часто происходит, если файл открывается на дозапись вместо перезаписи, и в итоге в одном файле оказывается два заголовка <?xml version="1.0" ?>. Чтобы этого избежать, перед записью нового файла обмена всегда проверяйте его наличие и удаляйте старый файл:


ФайлНаДиске = Новый Файл(ПутьКФайлу);
Если ФайлНаДиске.Существует() Тогда
    УдалитьФайлы(ПутьКФайлу);
КонецЕсли;
// Теперь создаем новый текстовый документ или запись XML
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ПутьКФайлу, "UTF-8");

Особенности работы с БСП на Linux

Если ваша конфигурация построена на Библиотеке Стандартных Подсистем (БСП), рассмотрим, как правильно настроить синхронизацию. В БСП при настройке обмена данными есть выбор: «Прямое подключение» или «Синхронизация через файл / веб-сервис».

Важно: При работе на Linux в мастере настройки обмена никогда не выбирайте вариант «Прямое подключение к информационной базе», так как он по умолчанию ищет COM-соединение. Выбирайте «Синхронизация через интернет» (это и есть Web-сервис) или «Синхронизация через файл».

Если вы выбрали файловый обмен, помните, что путь к каталогу должен быть указан в формате Linux (например, /mnt/exchange/). Этот каталог должен быть смонтирован на сервере, где крутится служба ragent.

Рекомендация по формату EnterpriseData

Рассмотрим современный стандарт обмена — EnterpriseData. Фирма «1С» активно переводит все типовые решения на этот формат. Его главное преимущество для Linux-систем заключается в том, что он изначально спроектирован для работы через HTTP-сервисы.

При использовании EnterpriseData взаимодействие происходит асинхронно и через стандартные веб-протоколы. Это избавляет разработчика от необходимости следить за правами на папки или регистром имен файлов, так как данные передаются в теле HTTP-пакетов.

Подведем итоги: для успешного подключения одной базы 1С к другой на сервере Linux необходимо отказаться от устаревшей технологии COM. Рассмотрим переход на публикацию баз через веб-сервер и использование Web-сервисов или OData. Если же используется файловый путь, необходимо строго следить за правами пользователя usr1cv8 и корректностью путей в стиле POSIX.

← На главную