Как подключиться из 1С к базе данных Firebird?

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

При интеграции 1С со сторонними учетными системами или кассовым ПО разработчики часто сталкиваются с необходимостью прямого чтения или записи данных в СУБД Firebird. Однако при попытке установить соединение через COM-объект ADODB.Connection нередко возникает ошибка: «Источник данных не найден и не указан драйвер, используемый по умолчанию».

В этой статье мы подробно разберем, почему возникает данная ошибка, как правильно сформировать строку подключения, какие нюансы необходимо учесть при работе с разрядностью библиотек и какие существуют альтернативные способы взаимодействия с Firebird.

Причины возникновения ошибки ODBC

Проанализируем основные факторы, вызывающие сбой при попытке вызова метода Open объекта ADODB.Connection:

  1. Несоответствие разрядности (битности) платформы 1С и драйвера. Если клиент 1С или служба сервера 1С запущена в 32-битном режиме (x86), то и ODBC-драйвер Firebird вместе с клиентской библиотекой должны быть 32-битными. Для 64-битного сервера или клиента 1С требуется 64-битный драйвер.
  2. Некорректное наименование драйвера в строке подключения. Символы авторских прав, такие как знак ®, скопированные из справочников, диспетчер ODBC Windows не всегда может сопоставить с записью в реестре. Точное имя драйвера, зарегистрированного в системе, обычно пишется как Firebird/InterBase(r) driver или заключается в фигурные скобки.
  3. Отсутствие пути к клиентской библиотеке. Драйверу ODBC для выполнения сетевого протокола требуется библиотека fbclient.dll (или gds32.dll). Если путь к ней не указан в параметре client или библиотека отсутствует в системных каталогах, подключение завершится ошибкой.

Формирование строки подключения через ADODB

Разберем рабочий пример формирования строки подключения. Для стабильной работы обязательно укажем драйвер, путь к серверу и файлу базы данных, учетные данные, кодировку и полный путь к библиотеке fbclient.dll.

Посмотрим на пример строки подключения:


Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.ConnectionTimeOut = 60;
Соединение.CursorLocation = 3; // adUseClient

СтрокаПодключения = "Driver=Firebird/InterBase(r) driver;"
    + "Dbname=192.168.151.225/3050:D:\CR\MAIN.GDB;"
    + "UID=SYSDBA;"
    + "PWD=masterkey;"
    + "CHARSET=WIN1251;"
    + "client=C:\Program Files (x86)\FireBird\FireBird_2_1\BIN\fbclient.dll;";

Попытка
    Соединение.Open(СтрокаПодключения);
    Сообщить("Соединение с базой Firebird успешно установлено!");
Исключение
    Сообщить("Не удалось подключиться к базе Firebird: " + ОписаниеОшибки());
КонецПопытки;

Универсальная функция подключения к Firebird

Рассмотрим пример готовой функции на языке 1С, принимающей структуру параметров и возвращающей инициализированный объект соединения. В функции предусмотрена проверка обязательных реквизитов и экранирование спецсимволов.


Функция ПодключитьFireBird(ПараметрыПодключения, ОбъектПодключения) Экспорт

    Перем АдресСервера;
    Перем ПутьКБазе;
    Перем Пользователь;
    Перем Пароль;
    Перем Кодировка;

    Если НЕ ПараметрыПодключения.Свойство("Сервер", АдресСервера) Тогда
        АдресСервера = "127.0.0.1";
    КонецЕсли;

    Если НЕ ПараметрыПодключения.Свойство("База", ПутьКБазе) Тогда
        ВызватьИсключение "Не указан путь к базе данных Firebird!";
    КонецЕсли;

    Если НЕ ПараметрыПодключения.Свойство("Пользователь", Пользователь) Тогда
        Пользователь = "SYSDBA";
    КонецЕсли;

    Если НЕ ПараметрыПодключения.Свойство("Пароль", Пароль) Тогда
        Пароль = "masterkey";
    КонецЕсли;

    Если НЕ ПараметрыПодключения.Свойство("Кодировка", Кодировка) Тогда
        Кодировка = "WIN1251";
    КонецЕсли;

    Попытка
        ОбъектПодключения = Новый COMОбъект("ADODB.Connection");
    Исключение
        ВызватьИсключение "Ошибка создания объекта ADODB.Connection: " + ОписаниеОшибки();
    КонецПопытки;

    // Экранируем кавычки в пути к базе при необходимости
    ПутьКБазе = СтрЗаменить(ПутьКБазе, """", """""");

    СтрокаПодключения = "Driver=Firebird/Interbase(r) driver;"
        + "Dialect=3;"
        + "CHARSET=" + Кодировка + ";"
        + "DBNAME=" + АдресСервера + ":" + ПутьКБазе + ";";

    Попытка
        ОбъектПодключения.Open(СтрокаПодключения, Пользователь, Пароль);
        Возврат Истина;
    Исключение
        ОбъектПодключения = Неопределено;
        ВызватьИсключение "Ошибка подключения к Firebird: " + ОписаниеОшибки();
    КонецПопытки;

КонецФункции

Особенности работы на сервере 1С и права доступа

Разберем по шагам правила настройки окружения, если код выполняется на стороне сервера 1С (например, в фоновом или регламентном задании):

  1. Установка драйвера на сервер. ODBC-драйвер и клиентская библиотека должны быть установлены непосредственно на физическом сервере, где функционирует служба 1C:Enterprise Server.
  2. Системный DSN. Если подключение настраивается через источник данных ODBC, его необходимо создавать исключительно во вкладке «Системный DSN» (System DSN) 64-битного или 32-битного диспетчера (в зависимости от разрядности службы сервера 1С). Источники из вкладки «Пользовательский DSN» службе сервера 1С недоступны.
  3. Права системной учетной записи. Пользователь операционной системы, от имени которого запущена служба сервера 1С (по умолчанию USR1CV8), должен иметь права на чтение каталога с файлом fbclient.dll и доступ к веткам реестра HKEY_LOCAL_MACHINE\SOFTWARE\ODBC.

Альтернативные способы интеграции с Firebird

Рассмотрим другие подходы к интеграции, которые могут оказаться удобнее или стабильнее в зависимости от архитектуры проекта:

  1. Внешние источники данных (ВИД). Механизм платформы 1С:Предприятие 8.3 позволяет подключить таблицы Firebird как полноценные объекты метаданных конфигурации через системный DSN. Это дает возможность строить запросы к таблицам СУБД на языке запросов 1С, связывать их с объектами конфигурации и выводить в динамические списки без написания низкоуровневого ADO-кода.
  2. Прямой OLE DB провайдер (IBProvider). Использование специализированного OLE DB провайдера вместо ODBC-драйвера позволяет повысить скорость выполнения запросов, исключить проблемы трансляции типов данных и работать с расширенными возможностями транзакций Firebird.
  3. HTTP-сервис / Промежуточный шлюз. При работе сервера 1С под управлением ОС Linux прямое использование COM-объектов невозможно. В таких сценариях целесообразно использовать микросервис-шлюз (например, на Python или Go), который подключается к Firebird через нативные драйверы и обменивается данными с 1С посредством формата JSON через объект HTTPСоединение.

Специфика чтения данных и типов полей

При выборке данных через объект ADODB.Recordset обратите внимание на следующие нюансы:

  1. Поля BLOB. Текстовые или двоичные поля типа BLOB большого размера при прямом обращении к значению поля могут возвращать COM-объект. Для их чтения в 1С применяют метод GetChunk() или считывание через ADODB.Stream.
  2. Значения NULL. Если колонка содержит неопределенные значения или пустые даты, прямое обращение к свойству Value может вызывать исключение типов в 1С. В тексте SQL-запроса рекомендуется оборачивать потенциально пустые поля функцией COALESCE(Поле, '').
← На главную