При разработке интеграций между 1С и сторонними базами данных СУБД MySQL разработчики часто сталкиваются с непонятным на первый взгляд поведением: код получения данных прекрасно отрабатывает при запуске вручную из сеанса 1С:Предприятие, но выдает ошибку при выполнении того же кода в регламентном или фоновом задании.
Типичный текст ошибки выглядит следующим образом:
Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию
Разберем подробнее причины возникновения этой ошибки, выясним технические нюансы работы серверных процессов 1С и рассмотрим по шагам, как настроить корректное соединение с MySQL.
Главная причина кроется в разрядности (архитектуре) рабочих процессов, которые исполняют ваш код:
1cv8.exe. На большинстве рабочих станций используется 32-битный клиент 1С. Соответственно, при установлении COM-соединения система запрашивает 32-битный ODBC-драйвер, установленный в операционной системе. Если он присутствует, подключение проходит успешно.rphost.exe. Если на вашем сервере установлен 64-битный сервер 1С:Предприятие, рабочий процесс rphost.exe является 64-битным. 64-битный процесс операционной системы физически не может загрузить 32-битную библиотеку (DLL) драйвера ODBC. В результате Windows сообщяет, что указанный в строке соединения драйвер не найден.Даже если вы скопировали строку подключения (ConnectionString) один в один, разница в архитектуре исполнителя приводит к сбою.
Для исправления ошибки проанализируем разрядность сервера 1С и установим соответствующий коннектор:
1C:Enterprise Server x86-64).mysql-connector-odbc-X.X.X-winx64.msi) непосредственно на сервер, где запущен рабочий процесс rphost.exe.После установки 64-битного драйвера рабочий процесс сервера 1С сможет успешно загрузить необходимый модуль в память.
Если вы настраиваете подключение не прямой строкой, а через DSN (Data Source Name), обратите внимание на различие утилит конфигурирования в 64-битной Windows:
C:\Windows\System32\odbcad32.exe — настраивает 64-битные DSN. Используйте именно эту утилиту для настройки источников данных для 64-битного сервера 1С!C:\Windows\SysWOW64\odbcad32.exe — настраивает 32-битные DSN (несмотря на название папки SysWOW64). Они видны только 32-битным приложениям (например, тонкому клиенту x86).Важный момент при работе с DSN: Для регламентных заданий источник данных обязательно должен создаваться на вкладке Системный DSN (System DSN). DSN, созданный на вкладке "Пользовательский DSN", создается в контексте конкретного пользователя и не будет виден службе сервера 1С (обычно работающей под специальным пользователем usr1cv8).
Рассмотрим пример правильного формирования строки соединения с базой MySQL через COM-объект ADODB.Connection.
Обратите внимание: название драйвера в параметре DRIVER={...} должно строго, буква в букву, совпадать с именем драйвера в Диспетчере ODBC вашей системы.
Функция ПодключитьсяКMySQL()
// Формируем строку подключения с использованием 64-битного драйвера
// Рекомендуется использовать Unicode Driver для корректной работы с кириллицей
ПараметрыПодключения = "DRIVER={MySQL ODBC 8.0 Unicode Driver};"
+ "SERVER=192.168.0.2;"
+ "PORT=3306;"
+ "DATABASE=my_base;"
+ "USER=user_name;"
+ "PASSWORD=secret_password;"
+ "OPTION=3;"
+ "CHARSET=utf8mb4;";
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.ConnectionString = ПараметрыПодключения;
Попытка
Соединение.Open();
Возврат Соединение;
Исключение
ЗаписьЖурналаРегистрации("Подключение к MySQL",
УровеньЖурналаРегистрации.Ошибка, , ,
ОписаниеОшибки());
ВызватьИсключение "Не удалось подключиться к СУБД MySQL: " + ОписаниеОшибки();
КонецПопытки;
КонецФункции
Проанализируем дополнительные ключевые параметры, которые предотвратят ошибки кодировки и разрывов связи при выполнении регламентных заданий:
DRIVER={MySQL ODBC 8.0 Unicode Driver} — рекомендуется использовать современную Unicode-версию драйвера вместо устаревших версий вроде MySQL ODBC 3.51 Driver.CHARSET=utf8mb4; — задает кодировку взаимодействия. Это предотвращает появление "крякозябр" при передаче строковых данных на кириллице.STMT=SET NAMES utf8mb4; — команда, исполняемая сразу после открытия сессии, гарантирует совпадение кодировок со стороны сервера MySQL.OPTION=3 — специальный битовый флаг драйвера MySQL ODBC, включающий поддержку полного описания таблиц и корректное связывание полей.Если администрирование драйверов ODBC на сервере вызывает сложности или инфраструктура постоянно меняется, рассмотрим альтернативные подходы к обмену данными:
HTTPСоединение и получает JSON-ответы, что полностью исключает зависимость от сторонних COM-объектов и системных ODBC-драйверов.Таким образом, для устранения ошибки достаточно установить 64-битный драйвер MySQL Connector/ODBC на сервер приложений 1С и убедиться, что строка подключения указывает правильное имя установленного драйвера.