Почему подключение к MySQL через ODBC работает в файловой базе 1С, но выдает ошибку в клиент-серверном режиме?

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

При интеграции 1С:Предприятия со сторонними СУБД (например, MySQL) разработчики нередко сталкиваются с ситуацией, когда в файловой информационной базе подключение через ODBC или COM-соединение ADODB.Connection работает стабильно, а при переходе на клиент-серверный вариант (SQL) возникают ошибки инициализации драйвера или поиска источника данных. Разберем детально, почему это происходит, как разрядность процессов ОС влияет на работу библиотек и как правильно настроить окружение.

Анализ причин возникновения ошибок

Рассмотрим две ключевые ошибки, возникающие при попытке установить соединение:

  1. [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию. Ошибка означает, что процесс, инициирующий подключение, обращается к диспетчеру ODBC своей разрядности, но в списке зарегистрированных системных драйверов отсутствует точное строковое совпадение с параметром DRIVER={...}, либо служба не видит пользовательский DSN.
  2. Системная ошибка 193 (%1 не является приложением Win32). Данная ошибка напрямую указывает на конфликт разрядности: 32-битный процесс пытается загрузить 64-битную DLL-библиотеку драйвера (или наоборот, 64-битный рабочий процесс сервера пытается использовать 32-битный драйвер).

Разрядность процессов: клиент против сервера

Главный принцип работы с динамическими библиотеками (DLL) и COM-объектами в Windows гласит: разрядность драйвера должна строго совпадать с разрядностью процесса, который его загружает.

Проанализируем структуру работы платформы 1С:

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

Диспетчеры ODBC в 64-битной операционной системе Windows

В 64-битных версиях Windows присутствуют два раздельных диспетчера ODBC, о чем важно помнить при настройке DSN и установке драйверов:

  1. 64-битный диспетчер: C:\Windows\System32\odbcad32.exe (открывается по умолчанию через панель управления). Настраивает источники данных для 64-битных процессов (включая сервер 1С rphost.exe).
  2. 32-битный диспетчер: C:\Windows\SysWOW64\odbcad32.exe. Отвечает за источники данных для 32-битных клиентов и 32-битного Конфигуратора.

Важный момент: На сервере и рабочих станциях могут одновременно сосуществовать обе версии драйвера одного производителя (например, MySQL Connector/ODBC x86 и x64). Они регистрируются в реестре независимо друг от друга.

Различие механизмов: Внешние источники данных и COM-объект ADODB

Выясним разницу между двумя подходами к интеграции:

  1. Механизм «Внешние источники данных» (ВИД):

    В клиент-серверной базе работа с объектами метаданных ветки ВнешниеИсточникиДанных всегда делегируется кластеру серверов 1С. Следовательно, на сервере 1С обязательно должен быть установлен 64-битный ODBC-драйвер, а строка подключения должна быть доступна служебной учетной записи, под которой стартует служба 1C:Enterprise 8.3 Server Agent (например, USR1CV8).

  2. Прямое соединение через ADODB.Connection:

    Здесь всё зависит от директивы компиляции процедуры, где создается COM-объект. Если код выполняется под директивой &НаКлиенте, объект ADODB.Connection создается на рабочем месте пользователя, и обращение идет к локальному 32-битному драйверу. Если под директивой &НаСервере — создание происходит в контексте службы 1С на сервере, и требуется 64-битный драйвер.

Пошаговый алгоритм настройки стабильного подключения

Разберем по шагам, как выстроить надежную схему взаимодействия с базой MySQL:

  1. Перенос логики подключения на сторону сервера:

    Выполнять прямое подключение к внешним СУБД на клиенте крайне не рекомендуется: это создает зависимость от настроек каждого пользовательского ПК и снижает безопасность. Весь код работы с базой данных следует выносить в серверные модули.

  2. Установка необходимых пакетов на сервере 1С:

    Для корректной работы драйверов MySQL Connector/ODBC версий 5.3 или 8.0 предварительно установите на сервер пакеты Microsoft Visual C++ Redistributable соответствующей версии (x64 для сервера 1С).

  3. Установка и проверка драйвера:

    Установите 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.

  4. Формирование строки подключения в коде 1С:

    Посмотрим на пример правильного формирования строки соединения и вызова на сервере:

    
    &НаСервере
    Функция ПодключитьсяКMySQLНаСервере(Сервер, База, Пользователь, Пароль)
        
        // Формируем строку подключения с точным именем установленного 64-битного драйвера
        СтрокаПодключения = "DRIVER={MySQL ODBC 5.3 Unicode Driver};"
            + "SERVER=" + СокрЛП(Сервер) + ";"
            + "DATABASE=" + СокрЛП(База) + ";"
            + "UID=" + СокрЛП(Пользователь) + ";"
            + "PWD=" + СокрЛП(Пароль) + ";"
            + "OPTION=3;";
        
        Попытка
            Соединение = Новый COMОбъект("ADODB.Connection");
            Соединение.ConnectionString = СтрокаПодключения;
            Соединение.Open();
            Возврат Соединение;
        Исключение
            ЗаписьЖурналаРегистрации("Интеграция MySQL", 
                УровеньЖурналаРегистрации.Ошибка,,, 
                ОписаниеОшибки());
            ВызватьИсключение "Не удалось подключиться к MySQL: " + ОписаниеОшибки();
        КонецПопытки;
        
    КонецФункции
    
  5. Настройка прав системной службы:

    Если используется механизм DSN (Data Source Name), создавайте его исключительно на вкладке «Системный DSN» (System DSN), а не «Пользовательский DSN». Пользовательские DSN привязаны к профилю конкретного администратора и недоступны сервисной учетной записи USR1CV8.

Альтернативные варианты интеграции

Если настройка и поддержка ODBC-драйверов на сервере вызывает трудности, рассмотрим современные альтернативы:

  1. MariaDB Connector/ODBC: Полностью совместим с серверами MySQL, однако часто проще устанавливается и менее требователен к версиям системных библиотек Windows.
  2. HTTP-сервисы и REST API: Наиболее универсальный подход для интеграции с веб-сайтами (например, OpenCart). В этом случае 1С взаимодействует с сайтом через объекты платформы HTTPСоединение и HTTPЗапрос, передавая данные в формате JSON, что полностью исключает зависимость от сторонних ODBC-драйверов и разрядности операционной системы.
← На главную