Как подключиться к базе данных Firebird (.fdb) из 1С и настроить загрузку данных

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

В практике автоматизации часто возникает задача интеграции 1С со сторонними системами, например, со СКУД (Системами контроля и управления доступом). Одной из популярных систем является Кронверк, использующая в качестве хранилища базу данных Firebird (файлы с расширением .fdb). В этой статье мы подробно разберем, как установить стабильное соединение между 1С и Firebird, исправим типовые ошибки подключения и оптимизируем код загрузки данных.

Шаг 1. Подготовительный этап: драйверы и разрядность

Прежде чем приступать к написанию кода в 1С, необходимо подготовить среду окружения. Для работы через COM-объект нам потребуется установленный в системе ODBC-драйвер для Firebird.

Важный нюанс: разрядность (битовость) драйвера должна строго соответствовать разрядности приложения 1С, которое инициирует подключение. Если вы используете 32-битный клиент 1С (что встречается чаще всего), необходимо установить именно 32-битный ODBC Firebird Driver, даже если сама операционная система 64-битная. Если же код выполняется на стороне 64-битного сервера 1С, потребуется 64-битный драйвер.

Шаг 2. Формирование строки подключения

Одной из первых проблем, с которой сталкиваются разработчики, является ошибка Unable to complete network request to host. Она возникает, когда путь к файлу указан неверно или не определен протокол взаимодействия. Рассмотрим правильный формат строки подключения.

Проанализируем ситуацию: просто указать локальный путь E:\base.fdb часто бывает недостаточно, так как сервер Firebird ожидает обращения через сетевой протокол. Правильнее указывать путь с использованием имени хоста или IP-адреса.

Разберем пример кода для инициализации соединения:


&НаКлиенте
Процедура ПодключитьсяКБазе()
    ПутьКБазе = "localhost:E:\ibnet.fdb"; // Указываем хост и полный путь
    мСоединение = Новый COMОбъект("ADODB.Connection");
    
    // Формируем Connection String
    мСоединение.ConnectionString = "driver=Firebird/InterBase® driver;
    |Dialect=3;
    |CHARSET=utf-8;
    |Uid=SYSDBA;
    |Pwd=masterkey;
    |Dbname=" + СокрЛП(ПутьКБазе);
    
    мСоединение.ConnectionTimeOut = 60;
    мСоединение.CursorLocation = 3; // adUseClient
    
    Попытка
        мСоединение.Open();
        Сообщить("Соединение успешно установлено!");
    Исключение
        Сообщить("Ошибка подключения: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Шаг 3. Решение проблем с авторизацией

Если вы получили ошибку Your user name and password are not defined, это означает, что параметры Uid и Pwd указаны неверно или не воспринимаются сервером. В стандартных инсталляциях Firebird по умолчанию используется пользователь SYSDBA с паролем masterkey.

Обратите внимание на регистр: иногда требуется вводить логин заглавными буквами. Также в некоторых версиях СКУД разработчики меняют стандартный пароль. Если база принадлежит сторонней системе, стоит уточнить реквизиты доступа в документации к этой системе.

Шаг 4. Настройка псевдонимов (Aliases)

Для повышения надежности и удобства администрирования рекомендуется использовать файл aliases.conf, который находится в корневой папке установленного сервера Firebird. Выясним, как это упрощает работу:

  1. Откройте файл aliases.conf на сервере, где лежит база.
  2. Добавьте строку вида: skud_base = E:\Data\ibnet.fdb.
  3. Перезапустите службу Firebird.
  4. Теперь в 1С в параметре Dbname можно указывать просто IP_Сервера:skud_base.

Шаг 5. Получение данных и типичные ошибки в логике запросов

Рассмотрим ситуацию, когда соединение установлено, но данные загружаются некорректно. Распространенная ошибка — попытка одновременного перебора двух разных наборов записей (Recordset) в одном цикле. Посмотрим на примере, как нельзя делать, и как исправить этот подход.

Ошибочный подход: использование двух независимых запросов и одного метода MoveNext. В этом случае данные о сотрудниках и их подразделениях перемешаются, так как их количество и порядок в таблицах базы СКУД не совпадают.

Правильный подход: использование SQL-запроса с соединением таблиц через JOIN. Это гарантирует, что каждому сотруднику будет соответствовать именно его подразделение.


&НаКлиенте
Функция ВыполнитьЗагрузку()
    Connection = ВыполнитьПодключениеКБД();
    Если Connection = Неопределено Тогда Возврат Ложь; КонецЕсли;

    RecordSet = Новый COMОбъект("ADODB.Recordset");
    
    // Используем JOIN для объединения сотрудников (OWNER) и отделов (WORKSITE)
    ТекстЗапроса = "
    |SELECT 
    |  O.OW_LASTNAME, 
    |  O.OW_FIRSTNAME, 
    |  O.OW_MIDDLENAME, 
    |  O.OW_ID, 
    |  W.WS_FULLNAME 
    |FROM OWNER O
    |LEFT JOIN WORKSITE W ON O.OW_WS_ID = W.WS_ID
    |WHERE O.OW_IS_DELETED = 0"; // Пример фильтра по активным сотрудникам

    Попытка
        RecordSet.Open(ТекстЗапроса, Connection);
    Исключение
        Сообщить("Ошибка в SQL запросе: " + ОписаниеОшибки());
        Возврат Ложь;
    КонецПопытки;

    Пока RecordSet.EOF = 0 Цикл
        ФИО = СтрШаблон("%1 %2 %3", 
            RecordSet.Fields("OW_LASTNAME").Value, 
            RecordSet.Fields("OW_FIRSTNAME").Value, 
            RecordSet.Fields("OW_MIDDLENAME").Value);
        
        КодСКУД = Строка(RecordSet.Fields("OW_ID").Value);
        ПодразделениеНаименование = RecordSet.Fields("WS_FULLNAME").Value;

        // Здесь вызываем серверную процедуру для поиска или создания сотрудника в 1С
        ОбработатьДанныеСотрудника(ФИО, КодСКУД, ПодразделениеНаименование);

        RecordSet.MoveNext();
    КонецЦикла;

    RecordSet.Close();
    Connection.Close();
КонецФункции

Шаг 6. Работа с кодировкой

Если при получении данных из Firebird вы видите непонятные символы («кракозябры»), значит, кодировка в базе данных отличается от UTF-8. В старых версиях Firebird (1.5, 2.0) часто использовалась кодировка WIN1251. В этом случае в строке подключения замените CHARSET=utf-8 на CHARSET=WIN1251.

Альтернативный вариант: Внешние источники данных

Проанализируем еще один современный способ интеграции, доступный в платформе 1С 8.3 — механизм Внешних источников данных. Вместо написания кода на ADO, вы можете добавить базу Firebird непосредственно в дерево конфигурации:

  1. В конфигураторе перейдите в ветку «Внешние источники данных».
  2. Добавьте новый источник и настройте строку соединения через мастер.
  3. Выберите нужные таблицы (OWNER, WORKSITE).
  4. Платформа создаст объекты, к которым можно будет обращаться с помощью обычных запросов 1С (ВЫБРАТЬ ... ИЗ ВнешнийИсточникДанных.Кронверк.Таблица.OWNER).

Преимущество этого метода: вы работаете со сторонними данными так же, как со справочниками 1С, с поддержкой типизации и визуального конструирования запросов. Для интерактивного создания и тестирования параметров подключения к сторонним СУБД подойдёт конструктор подключения к внешним источникам.

Подводя итог, можно сказать, что наиболее стабильным решением для подключения к Firebird является использование ADODB.Connection с явно указанным IP-адресом сервера и корректно настроенным ODBC-драйвером нужной разрядности. Не забывайте использовать JOIN в SQL-запросах, чтобы избежать логических ошибок при сопоставлении данных из разных таблиц.

← На главную