Как подключить 1С к базе данных Firebird: решение проблем с разрядностью и драйверами ODBC

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

Подключение 1С к внешним базам данных, таким как Firebird или InterBase, часто сопровождается трудностями, которые не проявляются при проверке через стандартные консольные утилиты. Основная сложность заключается в несовпадении архитектуры (разрядности) приложения 1С и установленных в системе драйверов ODBC, а также в правах доступа при выполнении кода на стороне сервера. В этой статье мы подробно разберем, как настроить стабильное соединение, проанализируем типичные ошибки и рассмотрим готовые примеры кода.

Проблема разрядности: Клиент против Сервера

Первое, с чем мы сталкиваемся — это разница между выполнением кода &НаКлиенте и &НаСервере. Если ваше клиентское приложение 1С является 32-разрядным, оно будет успешно использовать 32-битные драйверы ODBC. Однако, как только код переносится в модуль сервера (который в современных реализациях почти всегда 64-разрядный), система перестает "видеть" 32-битные драйверы. Проанализируем ситуацию: диспетчер драйверов ODBC в 64-битной Windows разделен на две части. Один находится в System32 (для 64-бит), другой в SysWOW64 (для 32-бит). Для успешной работы сервера 1С необходимо установить именно 64-разрядный ODBC драйвер Firebird.

Важно помнить: файл базы данных .fdb сам по себе не имеет жесткой "битности", но клиентская библиотека fbclient.dll, через которую работает драйвер, должна строго соответствовать разрядности вызывающего приложения (в нашем случае — сервера 1С).

Настройка подключения через COM-объект ADODB

Рассмотрим классический способ подключения с использованием технологии ADO. Этот метод гибкий, так как позволяет динамически формировать строку подключения в коде. Посмотрим на пример рабочего кода для получения данных из системы СКУД на базе Firebird:


&НаКлиенте
Процедура ПодключитьсяКFirebird()
    
    // Формируем строку подключения
    // Обратите внимание на использование драйвера и кодировки
    АдресБД = "192.168.1.10/3050:C:\Bases\SKUD_BASE.FDB";
    Пользователь = "SYSDBA";
    Пароль = "masterkey";
    
    Соединение = Новый COMОбъект("ADODB.Connection");
    СтрокаСоединения = "DRIVER=Firebird/InterBase(r) driver; " +
                       "CHARSET=WIN1251; " +
                       "Uid=" + Пользователь + "; " +
                       "Pwd=" + Пароль + "; " +
                       "Dbname=" + АдресБД;
    
    Соединение.ConnectionTimeOut = 30;
    Соединение.CursorLocation = 3;
    
    Попытка
        Соединение.Open(СтрокаСоединения);
        Сообщить("Соединение с Firebird успешно установлено!");
    Исключение
        Сообщить("Ошибка подключения: " + ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    // Пример выполнения запроса
    ТекстЗапроса = "SELECT FIRST 10 FULLNAME, TABNUM FROM USERS ORDER BY FULLNAME";
    RecordSet = Новый COMОбъект("ADODB.Recordset");
    
    Попытка
        RecordSet.Open(ТекстЗапроса, Соединение);
        Пока RecordSet.EOF() = 0 Цикл
            ФИО = RecordSet.Fields("FULLNAME").Value;
            ТабельныйНомер = RecordSet.Fields("TABNUM").Value;
            Сообщить("Сотрудник: " + ФИО + " (ТН: " + ТабельныйНомер + ")");
            RecordSet.MoveNext();
        КонецЦикла;
        RecordSet.Close();
    Исключение
        Сообщить("Ошибка при выполнении запроса: " + ОписаниеОшибки());
    КонецПопытки;
    
    Соединение.Close();
    
КонецПроцедуры

В данном примере мы используем ADODB.Connection для открытия сессии и ADODB.Recordset для получения результатов. Если этот код запускается на сервере, убедитесь, что в строке DRIVER указано точное имя драйвера, как оно отображается в 64-битном администраторе ODBC. Для расширения возможностей обмена можно использовать набор методов для выполнения запросов и модификации данных Firebird через ADO.

Использование Внешних источников данных

Наиболее современным и производительным способом работы с Firebird в 1С является механизм Внешних источников данных. Рассмотрим преимущества этого подхода:

  1. Строгая типизация: Таблицы внешней базы выглядят в 1С как обычные объекты метаданных.
  2. Использование языка запросов 1С: Вы можете писать запросы к Firebird на привычном языке, используя Запрос и МенеджерВременныхТаблиц.
  3. Производительность: Платформа берет на себя оптимизацию соединений и передачу данных.

Для настройки выполним следующие шаги:

После этого работа с данными сводится к простому коду:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   ВнешнийИсточник.ФИО КАК ФИО,
    |   ВнешнийИсточник.ДатаВхода КАК ДатаВхода
    |ИЗ
    |   ВнешнийИсточникДанных.СКУД.Таблица.События КАК ВнешнийИсточник
    |ГДЕ
    |   ВнешнийИсточник.ДатаВхода >= &ДатаНачала";

Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ТекущаяДата()));
Результат = Запрос.Выполнить().Выгрузить();

Разбор ошибки: "Your user name and password are not defined"

Проанализируем специфическую ошибку SQLSTATE: 08004, Номер ошибки: -902. Часто пользователи интерпретируют её буквально — как неверный логин или пароль. Однако в контексте Firebird и 1С это часто означает одну из трех системных проблем:

  1. Несоответствие версии клиентской библиотеки: Драйвер ODBC пытается загрузить fbclient.dll, которая не может корректно авторизоваться на сервере из-за различий в протоколах (например, сервер версии 2.1, а драйвер версии 3.0).
  2. Отсутствие прав доступа к файлу безопасности: Процесс сервера Firebird не может прочитать файл security2.fdb, где хранятся пользователи, из-за ограничений прав ОС на удаленном компьютере.
  3. Архитектурный конфликт: Попытка использовать 64-битный драйвер для прямого обращения к файлу базы, который "заблокирован" 32-битным сервисом Firebird.

Чтобы выяснить точную причину, попробуйте изменить формат DBNAME в строке подключения. Вместо прямого пути к файлу используйте формат IP-адрес/Порт:Путь_к_файлу. Это заставит драйвер работать через сетевой протокол TCP/IP, делегируя авторизацию серверной части Firebird, что снимает большинство проблем с правами доступа к файлам.

Рекомендации по стабильной работе

Для обеспечения бесперебойной связи между 1С и Firebird придерживайтесь следующих правил:

Рассмотренные методы позволяют интегрировать 1С с любыми СКУД или производственными системами, использующими Firebird, обеспечивая надежный обмен данными как в интерактивном режиме, так и в регламентных заданиях на сервере. При необходимости можно воспользоваться готовой конфигурацией для интеграции 1С со СКУД PERCo-S-20.

← На главную