Интеграция 1С с внешними базами данных, такими как MySQL, часто вызывает трудности на этапе настройки сетевого доступа и выбора правильных драйверов. В этой статье мы подробно разберем процесс настройки стабильного соединения, начиная от конфигурации сервера на ОС Debian и заканчивая написанием программного кода в 1С для работы с данными.
Чаще всего проблема невозможности подключения кроется в настройках безопасности самого сервера MySQL. По умолчанию во многих дистрибутивах (например, Debian 8) MySQL принимает соединения только с локального хоста. Разберем шаги, которые необходимо выполнить для открытия доступа:
my.cnf. В системах Debian и Ubuntu он обычно располагается по пути /etc/mysql/my.cnf. В этом файле нужно найти параметр bind-address. Если там указано 127.0.0.1, сервер будет игнорировать внешние запросы. Чтобы разрешить подключения со всех IP-адресов, закомментируйте эту строку символом # или замените значение на 0.0.0.0./etc/init.d/mysql restart.
GRANT ALL PRIVILEGES ON имя_вашей_базы.* TO 'имя_пользователя'@'%' IDENTIFIED BY 'пароль_пользователя';
FLUSH PRIVILEGES;
% означает, что пользователю разрешено подключаться с любого IP-адреса. В целях безопасности рекомендуется вместо % указывать конкретный IP-адрес сервера 1С.Проанализируем важный нюанс: разрядность драйвера ODBC должна соответствовать разрядности приложения, которое инициирует соединение. Если вы используете 32-битную платформу 1С (что является частым случаем для рабочих мест пользователей), то вам необходимо устанавливать именно 32-битный драйвер MySQL ODBC (x86), даже если сама операционная система Windows — 64-битная.
Важный момент: в 64-битных версиях Windows стандартная утилита «Настройка источников данных ODBC» из панели управления показывает только 64-битные драйверы. Если вы установили 32-битный драйвер и не видите его в списке, запустите специальную версию утилиты по адресу: C:\Windows\SysWOW64\odbcad32.exe. Именно здесь настраиваются источники данных для 32-битных приложений.
Рассмотрим, как правильно сформировать строку соединения. Мы рекомендуем использовать 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, а трафик будет безопасно инкапсулироваться внутри защищенного канала.