Как настроить подключение 1С к базе данных SQLite на Ubuntu в качестве внешнего источника данных?

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

При работе сервера 1С:Предприятие на операционной системе Linux, в частности на Ubuntu, разработчики часто сталкиваются с необходимостью интеграции с локальными базами данных SQLite. Процесс настройки внешних источников данных (ВИД) в этой среде существенно отличается от привычной работы в Windows. Мы часто сталкиваемся с ошибками типа SQLSTATE: IM002 (источник данных не найден) или странным поведением кодировок, когда текст отображается «через букву». Рассмотрим подробно, как правильно настроить связку 1С и SQLite в среде Linux, разберем причины типовых ошибок и способы их устранения.

Разбор архитектуры подключения

Прежде чем приступать к правке конфигурационных файлов, проанализируем, как именно 1С взаимодействует с SQLite. В системе Linux сервер 1С (процесс rphost) не умеет работать с SQLite напрямую. Он использует прослойку в виде диспетчера драйверов unixODBC. Схема взаимодействия выглядит следующим образом: 1С -> unixODBC -> Драйвер SQLite ODBC -> Файл базы данных .db.

Для успешной работы нам необходимо настроить три уровня доступа:

  1. Установить необходимые пакеты в ОС.
  2. Зарегистрировать драйвер в системных конфигах odbcinst.ini.
  3. Обеспечить права доступа для пользователя, от имени которого запущен сервер 1С.

Шаг 1: Установка и базовая настройка драйверов

Первым делом убедимся, что в системе установлены пакеты unixodbc, odbcinst и сам драйвер libsqliteodbc. В Ubuntu это делается стандартным менеджером пакетов. После установки крайне важно проверить содержимое файла /etc/odbcinst.ini. Разберем типичную ошибку: указание относительных путей к библиотекам драйвера.

В конфигурационном файле /etc/odbcinst.ini часто пишут просто имя файла Driver=libsqlite3odbc.so. Для сервера 1С этого недостаточно, так как он может не найти библиотеку в стандартных путях поиска. Нам необходимо указать полный абсолютный путь. Проанализируем пример правильной настройки:


[SQLite3]
Description=SQLite3 ODBC Driver
Driver=/usr/lib/x86_64-linux-gnu/odbc/libsqlite3odbc.so
Setup=/usr/lib/x86_64-linux-gnu/odbc/libsqlite3odbc.so
UsageCount=1

Чтобы найти точное расположение файла в вашей системе, воспользуйтесь командой find /usr -name "libsqlite3odbc.so". Это исключит ошибку IM002, которая часто возникает именно из-за того, что диспетчер unixODBC не может загрузить бинарный файл драйвера.

Шаг 2: Настройка прав доступа (пользователь usr1cv8)

Одной из неочевидных проблем является разграничение прав в Linux. По умолчанию сервер 1С работает под учетной записью usr1cv8. Если файл базы данных test.db был создан другим пользователем (например, администратором srvadmin), то 1С может не иметь прав на его открытие.

Выясним важную особенность SQLite: при работе с базой данных драйвер создает временные journal-файлы в той же директории, где лежит основной файл. Это означает, что пользователю usr1cv8 нужны права на запись не только на сам файл БД, но и на всю папку, в которой он находится.

Рассмотрим команды для настройки прав:


# Передаем владение папкой и файлом пользователю 1С
sudo chown -R usr1cv8:grp1cv8 /home/srvadmin/Documents/sqlite_data/
# Устанавливаем необходимые права доступа
sudo chmod 755 /home/srvadmin/Documents/sqlite_data/
sudo chmod 664 /home/srvadmin/Documents/sqlite_data/test.db

Шаг 3: Проблема «Аутентификационный контекст отсутствует»

При попытке настроить подключение через Конфигуратор 1С, запущенный на Windows-машине (клиент-серверный вариант), нажатие на кнопку выбора таблиц часто вызывает ошибку «Аутентификационный контекст клиента отсутствует в рабочем процессе». Проанализируем причину: Конфигуратор пытается вызвать GUI драйвера ODBC, который физически находится на Linux-сервере. Это невозможно.

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

Шаг 4: Устранение искажения кодировки («Нвйоък» вместо «Новый объект»)

Если после подключения вы обнаружили, что вместо нормального кириллического текста отображаются странные сокращения или текст «через букву», это признак несоответствия кодировок UTF-8 (в которой хранит данные SQLite) и UTF-16 (которую использует 1С). Драйвер ошибочно интерпретирует размер символа.

Чтобы это исправить, нам нужно передать специфические параметры драйверу. Это можно сделать двумя способами:

Способ А: Через системный DSN. Отредактируйте файл /etc/odbc.ini (не путать с odbcinst.ini), создав именованный источник данных:


[MySqliteDB]
Description=My SQLite database
Driver=SQLite3
Database=/home/srvadmin/Documents/sqlite_data/test.db
# Ключевой параметр для исправления кодировки:
NoWChar=1
StepAPI=0

В строке соединения в 1С в этом случае достаточно написать: DSN=MySqliteDB;.

Способ Б: Через строку соединения. Если вы не хотите использовать odbc.ini, добавьте параметры прямо в строку подключения в Конфигураторе:

DRIVER={SQLite3};Database=/path/to/db.db;NoWChar=1;StepAPI=0;

Шаг 5: Переменные окружения сервера 1С

Иногда сервер 1С не «видит» конфигурационные файлы unixODBC, если они расположены в нестандартных местах или если служба запущена с ограниченным окружением. Посмотрим, как принудительно указать пути к конфигам через системные переменные. В скрипте запуска сервера 1С (обычно это /opt/1cv8/x86_64/current/srv1cv83 или юнит systemd) желательно убедиться в наличии следующих переменных:

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

sudo systemctl restart srv1cv83

Итоги

Подводя итог, можно сказать, что стабильная работа 1С с SQLite на Ubuntu возможна только при соблюдении трех условий: использование полных путей к библиотекам драйвера в odbcinst.ini, предоставление полных прав пользователю usr1cv8 на папку с базой данных и корректная настройка параметров NoWChar для обработки UTF-8. Использование системного DSN является более предпочтительным методом, так как позволяет тестировать подключение независимо от 1С с помощью системной утилиты isql -v MySqliteDB.

← На главную