Как настроить подключение 1С к базе данных MySQL через ODBC?

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

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

Настройка сервера базы данных MySQL на ОС Debian

Чаще всего проблема невозможности подключения кроется в настройках безопасности самого сервера MySQL. По умолчанию во многих дистрибутивах (например, Debian 8) MySQL принимает соединения только с локального хоста. Разберем шаги, которые необходимо выполнить для открытия доступа:

  1. Редактирование конфигурационного файла. Нам необходимо найти файл my.cnf. В системах Debian и Ubuntu он обычно располагается по пути /etc/mysql/my.cnf. В этом файле нужно найти параметр bind-address. Если там указано 127.0.0.1, сервер будет игнорировать внешние запросы. Чтобы разрешить подключения со всех IP-адресов, закомментируйте эту строку символом # или замените значение на 0.0.0.0.
  2. Перезапуск службы. Чтобы изменения вступили в силу, выполним команду в консоли: /etc/init.d/mysql restart.
  3. Настройка прав доступа в MySQL. Даже если порт открыт, сервер может отклонить соединение из-за отсутствия прав у пользователя. Нам нужно зайти в консоль MySQL под администратором и выдать права конкретному пользователю для подключения с удаленного хоста:
    
    GRANT ALL PRIVILEGES ON имя_вашей_базы.* TO 'имя_пользователя'@'%' IDENTIFIED BY 'пароль_пользователя';
    FLUSH PRIVILEGES;
    
    Использование символа % означает, что пользователю разрешено подключаться с любого IP-адреса. В целях безопасности рекомендуется вместо % указывать конкретный IP-адрес сервера 1С.

Разрядность драйверов и системные утилиты Windows

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

Важный момент: в 64-битных версиях Windows стандартная утилита «Настройка источников данных ODBC» из панели управления показывает только 64-битные драйверы. Если вы установили 32-битный драйвер и не видите его в списке, запустите специальную версию утилиты по адресу: C:\Windows\SysWOW64\odbcad32.exe. Именно здесь настраиваются источники данных для 32-битных приложений.

Программное подключение из 1С

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


ПараметрыСоединения = "DRIVER={MySQL ODBC 5.3 Unicode Driver};"
                    + "SERVER=" + СокрЛП(СерверIP) + ";"
                    + "PORT=3306;"
                    + "DATABASE=" + СокрЛП(ИмяБазы) + ";"
                    + "UID=" + СокрЛП(Логин) + ";"
                    + "PWD=" + СокрЛП(Пароль) + ";"
                    + "STMT=SET NAMES cp1251;Option=3;";

Connection = Новый COMОбъект("ADODB.Connection");
Попытка
    Connection.Open(ПараметрыСоединения);
    Сообщить("Соединение успешно установлено!");
Исключение
    Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;

Обратите внимание на параметр STMT=SET NAMES cp1251. Он принудительно устанавливает кодировку обмена данными, что критично для корректного отображения текста. Параметр Option=3 включает базовую совместимость драйвера с запросами ADO.

Выполнение запросов и очистка данных

После того как соединение установлено, мы можем выполнять SQL-запросы. Рассмотрим ситуацию, когда после получения данных из MySQL нам необходимо очистить таблицу в исходной базе. Для этого эффективнее всего использовать метод Execute объекта соединения, так как он не требует создания тяжеловесного объекта RecordSet.

Проанализируем пример кода для очистки таблицы:


ТекстЗапроса = "TRUNCATE TABLE ИмяВашейТаблицы";
Попытка
    Connection.Execute(ТекстЗапроса);
    Сообщить("Таблица успешно очищена.");
Исключение
    Сообщить("Не удалось очистить таблицу: " + ОписаниеОшибки());
КонецПопытки;

Команда TRUNCATE работает быстрее, чем DELETE, так как она полностью пересоздает таблицу, а не удаляет строки по одной, что существенно экономит ресурсы при работе с большими объемами данных.

Альтернативный метод: Внешние источники данных

Выясним, есть ли более современный способ интеграции. Начиная с версии платформы 8.2.14, в 1С доступен механизм Внешние источники данных. Вместо написания кода на ADO, вы можете добавить таблицы MySQL непосредственно в дерево метаданных конфигурации. Это позволит работать с внешними данными с помощью привычного Языка запросов 1С и значительно упростит разработку форм и отчетов на основе данных из MySQL.

Рекомендация по безопасности: проброс порта 3306 наружу через роутер является рискованным шагом. Если безопасность данных критична, рассмотрите использование SSH-туннеля или VPN-соединения между сервером 1С и сервером MySQL. В этом случае в строке подключения 1С вы будете указывать SERVER=127.0.0.1, а трафик будет безопасно инкапсулироваться внутри защищенного канала.

← На главную