При интеграции 1С:Предприятия со сторонними СУБД (например, MySQL) разработчики нередко сталкиваются с ситуацией, когда в файловой информационной базе подключение через ODBC или COM-соединение ADODB.Connection работает стабильно, а при переходе на клиент-серверный вариант (SQL) возникают ошибки инициализации драйвера или поиска источника данных. Разберем детально, почему это происходит, как разрядность процессов ОС влияет на работу библиотек и как правильно настроить окружение.
Рассмотрим две ключевые ошибки, возникающие при попытке установить соединение:
DRIVER={...}, либо служба не видит пользовательский DSN.Главный принцип работы с динамическими библиотеками (DLL) и COM-объектами в Windows гласит: разрядность драйвера должна строго совпадать с разрядностью процесса, который его загружает.
Проанализируем структуру работы платформы 1С:
1cv8.exe. Если установлена 32-битная версия платформы, то используется 32-битный ODBC-драйвер, и подключение проходит успешно.1cv8c.exe или 1cv8.exe), а на стороне сервера функционирует служба кластера 1С (как правило, 64-битный процесс rphost.exe).rphost.exe (64-битный), требующий наличия установленного 64-битного драйвера на сервере.В 64-битных версиях Windows присутствуют два раздельных диспетчера ODBC, о чем важно помнить при настройке DSN и установке драйверов:
C:\Windows\System32\odbcad32.exe (открывается по умолчанию через панель управления). Настраивает источники данных для 64-битных процессов (включая сервер 1С rphost.exe).C:\Windows\SysWOW64\odbcad32.exe. Отвечает за источники данных для 32-битных клиентов и 32-битного Конфигуратора.Важный момент: На сервере и рабочих станциях могут одновременно сосуществовать обе версии драйвера одного производителя (например, MySQL Connector/ODBC x86 и x64). Они регистрируются в реестре независимо друг от друга.
Выясним разницу между двумя подходами к интеграции:
В клиент-серверной базе работа с объектами метаданных ветки ВнешниеИсточникиДанных всегда делегируется кластеру серверов 1С. Следовательно, на сервере 1С обязательно должен быть установлен 64-битный ODBC-драйвер, а строка подключения должна быть доступна служебной учетной записи, под которой стартует служба 1C:Enterprise 8.3 Server Agent (например, USR1CV8).
Здесь всё зависит от директивы компиляции процедуры, где создается COM-объект. Если код выполняется под директивой &НаКлиенте, объект ADODB.Connection создается на рабочем месте пользователя, и обращение идет к локальному 32-битному драйверу. Если под директивой &НаСервере — создание происходит в контексте службы 1С на сервере, и требуется 64-битный драйвер.
Разберем по шагам, как выстроить надежную схему взаимодействия с базой MySQL:
Выполнять прямое подключение к внешним СУБД на клиенте крайне не рекомендуется: это создает зависимость от настроек каждого пользовательского ПК и снижает безопасность. Весь код работы с базой данных следует выносить в серверные модули.
Для корректной работы драйверов MySQL Connector/ODBC версий 5.3 или 8.0 предварительно установите на сервер пакеты Microsoft Visual C++ Redistributable соответствующей версии (x64 для сервера 1С).
Установите 64-битный драйвер (например, MySQL Connector/ODBC 5.3 (64-bit) или 8.0 (64-bit)). Запустите C:\Windows\System32\odbcad32.exe, перейдите на вкладку «Драйверы» и скопируйте точное наименование установленного драйвера. Например, для версии 5.3 наименование может выглядеть как MySQL ODBC 5.3 Unicode Driver.
Посмотрим на пример правильного формирования строки соединения и вызова на сервере:
&НаСервере
Функция ПодключитьсяКMySQLНаСервере(Сервер, База, Пользователь, Пароль)
// Формируем строку подключения с точным именем установленного 64-битного драйвера
СтрокаПодключения = "DRIVER={MySQL ODBC 5.3 Unicode Driver};"
+ "SERVER=" + СокрЛП(Сервер) + ";"
+ "DATABASE=" + СокрЛП(База) + ";"
+ "UID=" + СокрЛП(Пользователь) + ";"
+ "PWD=" + СокрЛП(Пароль) + ";"
+ "OPTION=3;";
Попытка
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.ConnectionString = СтрокаПодключения;
Соединение.Open();
Возврат Соединение;
Исключение
ЗаписьЖурналаРегистрации("Интеграция MySQL",
УровеньЖурналаРегистрации.Ошибка,,,
ОписаниеОшибки());
ВызватьИсключение "Не удалось подключиться к MySQL: " + ОписаниеОшибки();
КонецПопытки;
КонецФункции
Если используется механизм DSN (Data Source Name), создавайте его исключительно на вкладке «Системный DSN» (System DSN), а не «Пользовательский DSN». Пользовательские DSN привязаны к профилю конкретного администратора и недоступны сервисной учетной записи USR1CV8.
Если настройка и поддержка ODBC-драйверов на сервере вызывает трудности, рассмотрим современные альтернативы:
HTTPСоединение и HTTPЗапрос, передавая данные в формате JSON, что полностью исключает зависимость от сторонних ODBC-драйверов и разрядности операционной системы.