Как восстановить работу ODBC подключения к MySQL после обновления платформы 1С

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При обновлении платформы 1С:Предприятие часто возникают ситуации, когда отлаженные годами механизмы внешней интеграции перестают работать. Одной из наиболее распространенных проблем является сбой подключения к базам данных MySQL через драйвер ODBC. Пользователи сталкиваются с системным сообщением: «Источник данных не найден и не указан драйвер, используемый по умолчанию». В этой статье мы подробно разберем, почему это происходит, и как правильно настроить связку 1С и MySQL, учитывая разрядность систем и особенности современных кодировок.

Анализируем причину сбоя: Разрядность платформы и драйверов

Первым делом проанализируем ситуацию с разрядностью (битностю) установленного программного обеспечения. Это критически важный момент, так как 32-битное приложение не может использовать 64-битные драйверы ODBC, и наоборот. Рассмотрим, как определить разрядность вашей 1С.

Если исполняемые файлы платформы расположены в папке C:\Program Files (x86)\1cv8, это означает, что вы используете 32-битную версию 1С. Несмотря на то, что сама операционная система Windows может быть 64-битной, для корректной работы 1С потребуется именно 32-битный драйвер MySQL ODBC.

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

  1. 64-битный диспетчер: C:\Windows\System32\odbcad32.exe — он виден в «Панели управления» по умолчанию.
  2. 32-битный диспетчер: C:\Windows\SysWOW64\odbcad32.exe — именно здесь нужно настраивать источник данных (DSN), если ваша 1С 32-битная.

Если вы установили драйвер и настроили DSN через стандартное меню «Администрирование», скорее всего, вы сделали это для 64-битной среды. В этом случае 32-битная 1С просто не «увидит» этот драйвер в списке доступных.

Решение проблемы с кодировкой Unknown character set utf8mb4

После того как проблема с разрядностью решена, может возникнуть следующая ошибка: Driver Unknown character set: 'utf8mb4'. Проанализируем причину её появления. Современные версии MySQL (8.0 и выше) используют кодировку utf8mb4 по умолчанию. Однако старые версии драйверов (например, серия 5.3) могут не знать об этой кодировке, что приводит к разрыву соединения сразу после авторизации.

Рассмотрим два варианта решения этой проблемы:

Вариант 1: Изменение строки подключения. Мы можем принудительно указать драйверу использовать стандартную кодировку utf8. Для этого в строку подключения (ConnectionString) необходимо добавить параметр CHARSET=utf8;.

Вариант 2: Обновление драйвера. Рекомендуется установить более современный драйвер, например, MySQL ODBC 8.0 Unicode Driver. Но будьте внимательны: при обновлении драйвера необходимо изменить его имя в коде 1С, иначе система снова выдаст ошибку «Драйвер не найден».

Пример правильного формирования строки подключения в 1С

Посмотрим на практический пример кода. Предположим, мы обновили драйвер до версии 8.0. Нам нужно составить строку подключения так, чтобы она учитывала все параметры сервера, базы данных и безопасности. Разберем структуру кода:


// Параметры подключения к MySQL
Сервер = "192.168.1.8";
БазаДанных = "autoshop";
Пользователь = "admin_user";
Пароль = "StrongPassword123";
Порт = "3306";

// Формируем строку соединения для драйвера версии 8.0
// Обратите внимание на точное название драйвера в фигурных скобках
СтрокаСоединения = "DRIVER={MySQL ODBC 8.0 Unicode Driver};"
                + "SERVER=" + Сервер + ";"
                + "PORT=" + Порт + ";"
                + "DATABASE=" + БазаДанных + ";"
                + "UID=" + Пользователь + ";"
                + "PWD=" + Пароль + ";"
                + "CHARSET=utf8;" // Принудительная установка кодировки
                + "OPTION=3;";    // Дополнительные опции драйвера
                
// Создаем объект подключения через COM
Попытка
    Connection = Новый COMОбъект("ADODB.Connection");
    Connection.ConnectionString = СтрокаСоединения;
    Connection.Open();
    Сообщить("Соединение с MySQL успешно установлено!");
Исключение
    Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;

В данном примере мы используем объект ADODB.Connection, который является стандартным способом работы с внешними источниками через OLE DB провайдер для ODBC. Важно, чтобы название драйвера в DRIVER={...} в точности соответствовало тому, что указано в колонке «Имя» в диспетчере ODBC вашей системы.

Проверка соединения с помощью файла .UDL

Если подключение из 1С по-прежнему не проходит, разберем методику диагностики с помощью универсального файла канала передачи данных (Universal Data Link). Это позволит нам исключить влияние кода 1С и проверить работоспособность связки «ОС — Драйвер — MySQL».

  1. Создайте на рабочем столе обычный текстовый файл и переименуйте его, изменив расширение с .txt на .udl (например, test.udl).
  2. Запустите файл двойным кликом.
  3. На вкладке «Поставщик» выберите «Microsoft OLE DB Provider for ODBC Drivers».
  4. На вкладке «Соединение» выберите пункт «Использовать строку соединения» и вставьте туда сформированную ранее строку (без кавычек 1С).
  5. Нажмите кнопку «Проверить соединение».

Важное замечание: Если вы создаете .udl файл в корне диска C:\ или в папках Program Files, операционная система может блокировать его работу из-за ограничений прав доступа. Всегда используйте пользовательские папки для проведения тестов.

Нюансы работы в клиент-серверном режиме

Проанализируем ситуацию, если ваша база 1С работает в клиент-серверном варианте. Здесь кроется важный нюанс: где именно выполняется код подключения? Если код выполняется в модуле, работающем «НаСервере», то драйвер ODBC должен быть установлен на сервере приложений 1С, а не на локальном компьютере пользователя.

Более того, в этом случае важна разрядность именно серверной части 1С. Если сервер 1С 64-битный (что является стандартом для современных систем), то и драйвер MySQL ODBC на сервере должен быть 64-битным. В системном диспетчере ODBC на сервере необходимо создать «Системный DSN» (System DSN), так как «Пользовательский DSN» создается для конкретной учетной записи и служба 1С (работающая обычно под пользователем USR1CV8) его просто не увидит.

Итоги и рекомендации

Подводя итог, можно составить краткий чек-лист для восстановления работы ODBC после обновления платформы:

Соблюдение этих правил позволит вам быстро восстановить интеграцию и обеспечить стабильный обмен данными между 1С и внешними базами данных MySQL.

← На главную