Как подключить 1С на сервере Linux к внешней базе данных Firebird на Windows?

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

Рассмотрим распространенную задачу: сервер 1С работает под управлением ОС Linux (например, RedOS или Astra Linux с её спецификой настройки зависимостей), а данные для обмена находятся во внешней базе данных Firebird, которая расположена на отдельном сервере с Windows. При попытке настроить подключение из обработки 1С может возникнуть ошибка "Компьютер 'имя_сервера' недоступен!", даже если сетевая доступность и драйверы настроены верно. Разберемся, почему так происходит и как правильно организовать такое подключение.

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

Причина ошибки: использование COM-объектов на Linux-сервере

Часто разработчики, привыкшие работать в среде Windows, пытаются использовать для подключения к внешним базам данных технологию ADO через COM-объекты. Посмотрим на пример кода, который приводит к ошибке в нашей ситуации:


СтрокаПодключения = "driver=Firebird/InterBase(r) driver;Dialect=2.5;CHARSET=CYRL;" + "Uid=" + 
    Пользователь + 
    ";Pwd=" + Пароль + 
    ";Dbname=" + Хост + ":" + ПутьКБазе;

// Попытка создать COM-объект
Connection = Новый COMОбъект("ADODB.Connection");        
Connection.ConnectionTimeOut = ConnectionTimeOut;
Connection.CursorLocation = 3;

Connection.Open(СтрокаПодключения);

Этот код отлично работает, если он выполняется на клиенте или сервере 1С под управлением Windows. Однако, если COM-объект никак не хочет устанавливаться или работать на сервере 1С под управлением Linux (в серверном модуле или в регламентном задании), он неизбежно вызовет ошибку.

Ключевой момент: технология COM (Component Object Model) и, соответственно, объекты типа ADODB.Connection — это неотъемлемая часть операционной системы Windows. В Linux этой технологии не существует. Поэтому сервер 1С на Linux просто не может создать такой объект, что и приводит к ошибке. Сообщение "Компьютер недоступен" в данном случае является misleading (вводящим в заблуждение), так как реальная причина — невозможность создать COM-объект в текущей операционной системе.

Шаг 1. Подготовка окружения на сервере 1С (Linux)

Чтобы 1С на Linux смогла "увидеть" внешнюю базу данных, необходимо настроить ODBC-подключение на уровне операционной системы. Этот шаг является обязательной основой для дальнейшей работы.

  1. Установка unixODBC. Это менеджер ODBC-драйверов для Linux-систем. Установите его с помощью пакетного менеджера вашего дистрибутива:

    Для RedOS, CentOS, Fedora: sudo yum install unixODBC

    Для Debian, Ubuntu: sudo apt-get install unixodbc

    Иногда могут потребоваться дополнительные скрипты для настройки окружения для корректной сборки или работы внешних компонентов.

  2. Установка ODBC-драйвера Firebird. Скачайте с официального сайта Firebird ODBC-драйвер для Linux, соответствующий разрядности вашего сервера 1С (скорее всего, x64). Распакуйте архив и установите его согласно инструкции.

  3. Регистрация драйвера в odbcinst.ini. Необходимо сообщить системе о новом драйвере. Для этого отредактируйте файл /etc/odbcinst.ini (или создайте его, если он отсутствует) и добавьте секцию для Firebird. Путь к библиотеке libOdbcFb.so может отличаться в зависимости от того, куда вы установили драйвер.

    
    [Firebird]
    Description=InterBase/Firebird ODBC Driver
    Driver64=/usr/lib64/libOdbcFb.so
    Setup64=/usr/lib64/libOdbcFb.so
    Threading=1
    FileUsage=1
    
  4. Проверка подключения через isql. Это самый важный этап диагностики. Он позволяет проверить, работают ли драйвер, сетевые настройки и firewall независимо от 1С. Для проверки используется консольная утилита isql. Для удобства можно создать DSN (Data Source Name) в файле /etc/odbc.ini, но можно подключиться и без него, напрямую указав строку подключения.

    Проверку лучше выполнять командой, используя параметры из вашей строки подключения:

    isql -v -k "DRIVER={Firebird};UID=sysdba;PWD=masterkey;DBNAME=192.168.22.1:C:\base\CER.NEW.GDB"

    Если вы видите приглашение SQL>, значит, подключение на уровне ОС и драйвера успешно установлено.

Шаг 2. Настройка сервера Firebird (Windows)

Убедитесь, что сервер с базой Firebird готов принимать внешние подключения.

Шаг 3. Правильное подключение из 1С: Внешние источники данных

Для кросс-платформенной работы с внешними базами данных в 1С существует специальный механизм — "Внешние источники данных". Он работает нативно как на Windows, так и на Linux, и является предпочтительным способом интеграции. Если вы используете несколько версий платформы, вам может пригодиться консольное переключение между платформами для быстрой настройки служб.

Разберем по шагам, как его настроить:

  1. Откройте конфигуратор вашей базы 1С.
  2. В дереве объектов конфигурации найдите ветку "Внешние источники данных" и добавьте новый источник, назовем его, например, "КормОптима".
  3. В свойствах нового источника укажите Тип: ODBC.
  4. Самое главное — правильно составить Строку подключения. Она будет очень похожа на ту, что мы использовали для isql:

    Driver={Firebird};Uid=sysdba;Pwd=masterkey;Dbname=192.168.22.1:C:\base\CER.NEW.GDB;CHARSET=CYRL;

    Здесь:

    • Driver={Firebird} — имя драйвера, которое мы указали в квадратных скобках в файле odbcinst.ini.
    • Uid и Pwd — логин и пароль для доступа к базе Firebird.
    • Dbname=192.168.22.1:C:\base\CER.NEW.GDB — важнейший параметр. Он состоит из IP-адреса Windows-сервера и полного пути к файлу базы данных на этом Windows-сервере. Не пытайтесь изменить путь на Linux-формат. Драйвер сам правильно обработает этот путь и передаст его серверу Firebird.
    • CHARSET=CYRL — указание кодировки для корректной работы с кириллицей.
  5. После сохранения настроек источника, раскройте его ветку. Нажмите "Получить список таблиц". Если все настроено верно, 1С подключится к Firebird и покажет список доступных таблиц, представлений и хранимых процедур.
  6. Вы можете добавить нужные таблицы в состав внешнего источника. После этого с ними можно работать в коде 1С с помощью запросов, как будто это таблицы самой 1С. При работе на сервере без графического интерфейса не забудьте про установку комьюнити-лицензии разработчика, чтобы иметь возможность полноценно тестировать обмен.

Пример запроса к внешнему источнику:


ТекстЗапроса = "ВЫБРАТЬ
               |    ДанныеИзFirebird.Поле1,
               |    ДанныеИзFirebird.Поле2
               |ИЗ
               |    ВнешнийИсточник.КормОптима.GET_TABLE КАК ДанныеИзFirebird
               |ГДЕ
               |    ДанныеИзFirebird.GUID = &GUID";

Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("GUID", ВашGUID);

Результат = Запрос.Выполнить().Выгрузить();

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

← На главную