Как подключить базу с расширением .db через внешний источник данных в 1С?

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

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

Выясняем причину проблемы: почему драйвер Paradox не видит таблицы

Классическая ошибка заключается в предположении, что любое расширение .db относится исключительно к таблицам СУБД Paradox. В строке подключения часто указывают драйвер Microsoft Paradox Driver (*.db ). Однако в архитектуре Paradox файл .db представляет собой не всю базу целиком, а лишь отдельную таблицу, в то время как сама «база» — это каталог на диске. Поэтому при попытке указать путь к конкретному файлу драйвер выдает ошибку или отображает сам файл вместо списка таблиц.

На практике расширение .db является универсальным контейнером. Его используют самые разные СУБД, чаще всего — SQLite, а также Firebird, Berkeley DB и другие. Если файл базы данных представляет собой единый файл размером в десятки или сотни мегабайт, внутри которого хранятся все таблицы, индексы и триггеры, то почти наверняка перед нами база SQLite.

Определяем фактический формат файла базы данных

Прежде чем подбирать строку подключения, определим истинный формат файла. Для этого разберем простой и надежный способ проверки сигнатуры файла:

  1. Откроем файл с расширением .db в любом шестнадцатеричном (hex) или текстовом редакторе.
  2. Посмотрим на первые байты в заголовке файла.
  3. Если файл создан СУБД SQLite 3, то первые 16 байт всегда содержат явную ASCII-строку: SQLite format 3 с нулевым байтом на конце.
  4. Если перед нами Paradox, в заголовке будут находиться специфические бинарные сигнатуры версий (размеры блоков, смещения), а строковой сигнатуры SQLite там не будет.

Убедившись, что заголовок содержит сигнатуру SQLite, перейдем к правильной настройке подключения платформы 1С к этому источнику.

Настройка ODBC-драйвера и разрядность платформы

Для взаимодействия платформы «1С:Предприятие» с SQLite через механизм внешних источников данных потребуется установленный в операционной системе SQLite3 ODBC Driver. Разберем ключевой нюанс, на котором часто спотыкаются разработчики: соответствие разрядности драйвера и клиента 1С.

  1. Если настройка структуры внешнего источника данных и добавление таблиц осуществляются в Конфигураторе или через клиентское приложение разрядности x86 (32 бита), в Windows обязательно должен быть установлен 32-битный ODBC-драйвер.
  2. Если регламентные задания или серверные процедуры 1С выполняются на стороне 64-битного сервера «1С:Предприятия» (x86-64), в операционной системе сервера должен быть установлен 64-битный ODBC-драйвер.
  3. В смешанной среде (32-битный клиент и 64-битный сервер) необходимо установить обе версии драйвера SQLite3 ODBC Driver с одинаковыми системными именами. В противном случае платформа вернет системную ошибку об отсутствии подходящего драйвера источника данных.

Формирование строки подключения во внешнем источнике данных

Рассмотрим синтаксис строки подключения для объекта метаданных ВнешнийИсточникДанных. После установки правильного драйвера сформируем строку соединения:

Минимальный вариант строки подключения выглядит следующим образом:

DRIVER={SQLite3 ODBC Driver};Database=D:\base.db;

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


DRIVER={SQLite3 ODBC Driver};Database=D:\base.db;Timeout=5000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;LongNames=0;

Параметр Timeout=5000 задает время ожидания освобождения файла базы в миллисекундах, если к нему одновременно обращается сторонний процесс, что предотвращает внезапные сбои при чтении данных.

Особенности и ограничения работы 1С с таблицами SQLite

При добавлении таблиц внешнего источника в состав конфигурации обратим внимание на архитектурные различия между СУБД:

  1. Строгая типизация: SQLite использует динамическую типизацию (Type Affinity), позволяя хранить в одной и той же колонке строки и числа. Платформа 1С требует строгого описания типов для каждого поля таблицы. При импорте структуры убедимся, что типы полей во внешнем источнике 1С соответствуют фактическим типам данных в файле.
  2. Обязательное наличие первичного ключа: Механизм внешних источников данных 1С требует, чтобы каждая подключаемая таблица содержала поле или набор полей с признаком ПервичноеКлючевоеПоле. Если в исходной таблице SQLite нет явного ключа PRIMARY KEY, сопоставим ключевое поле 1С со скрытой системной колонкой rowid.
  3. Блокировка базы: SQLite блокирует весь файл целиком при выполнении операций записи. Если стороннее приложение интенсивно пишет в файл .db, при обращении из 1С на запись могут возникать системные исключения. По этой причине внешние источники данных на базе SQLite рекомендуется использовать преимущественно в режиме чтения данных.

Альтернативный вариант: чтение через объект ADODB.Connection

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


Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.ConnectionString = "DRIVER={SQLite3 ODBC Driver};Database=D:\base.db;";
Попытка
    Соединение.Open();
    Выборка = Соединение.Execute("SELECT * FROM ИмяТаблицы");
    Пока НЕ Выборка.EOF Цикл
        // Обработка полученных полей: Выборка.Fields("ИмяПоля").Value
        Выборка.MoveNext();
    КонецЦикла;
    Соединение.Close();
Исключение
    Сообщить("Ошибка подключения к SQLite: " + ОписаниеОшибки());
КонецПопытки;

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

← На главную