При настройке интеграции 1С со сторонними приложениями через механизм Внешние источники данных разработчики нередко сталкиваются с ситуацией, когда на диске есть файл с расширением .db, но при попытке подключиться к нему платформа либо не видит таблицы, либо выдает ошибку о некорректном пути. Проанализируем, почему возникает эта проблема и как правильно настроить соединение.
Классическая ошибка заключается в предположении, что любое расширение .db относится исключительно к таблицам СУБД Paradox. В строке подключения часто указывают драйвер Microsoft Paradox Driver (*.db ). Однако в архитектуре Paradox файл .db представляет собой не всю базу целиком, а лишь отдельную таблицу, в то время как сама «база» — это каталог на диске. Поэтому при попытке указать путь к конкретному файлу драйвер выдает ошибку или отображает сам файл вместо списка таблиц.
На практике расширение .db является универсальным контейнером. Его используют самые разные СУБД, чаще всего — SQLite, а также Firebird, Berkeley DB и другие. Если файл базы данных представляет собой единый файл размером в десятки или сотни мегабайт, внутри которого хранятся все таблицы, индексы и триггеры, то почти наверняка перед нами база SQLite.
Прежде чем подбирать строку подключения, определим истинный формат файла. Для этого разберем простой и надежный способ проверки сигнатуры файла:
.db в любом шестнадцатеричном (hex) или текстовом редакторе.SQLite format 3 с нулевым байтом на конце.Убедившись, что заголовок содержит сигнатуру SQLite, перейдем к правильной настройке подключения платформы 1С к этому источнику.
Для взаимодействия платформы «1С:Предприятие» с SQLite через механизм внешних источников данных потребуется установленный в операционной системе SQLite3 ODBC Driver. Разберем ключевой нюанс, на котором часто спотыкаются разработчики: соответствие разрядности драйвера и клиента 1С.
Рассмотрим синтаксис строки подключения для объекта метаданных ВнешнийИсточникДанных. После установки правильного драйвера сформируем строку соединения:
Минимальный вариант строки подключения выглядит следующим образом:
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 задает время ожидания освобождения файла базы в миллисекундах, если к нему одновременно обращается сторонний процесс, что предотвращает внезапные сбои при чтении данных.
При добавлении таблиц внешнего источника в состав конфигурации обратим внимание на архитектурные различия между СУБД:
ПервичноеКлючевоеПоле. Если в исходной таблице SQLite нет явного ключа PRIMARY KEY, сопоставим ключевое поле 1С со скрытой системной колонкой rowid..db, при обращении из 1С на запись могут возникать системные исключения. По этой причине внешние источники данных на базе SQLite рекомендуется использовать преимущественно в режиме чтения данных.Если нет необходимости менять метаданные конфигурации и добавлять полноценный внешний источник данных, подключимся к базе 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С.