Разработчики, привыкшие к среде ОС Windows, при интеграции 1С с другими СУБД традиционно используют COM-соединение и технологию ADO с помощью конструкции Новый COMОбъект("ADODB.Connection"). Однако при переносе сервера 1С на операционные системы семейства Linux этот подход полностью теряет работоспособность, поскольку технология COM является платформозависимой и не поддерживается в Linux-окружении.
В этой статье мы подробно разберем, как решить задачу прямого подключения к базе данных MySQL с сервера 1С под управлением Linux (на примере Debian/Ubuntu). Мы научимся программно изменять параметры соединения в режиме «1С:Предприятие», настраивать системный драйвер ODBC и обходить типичные ошибки совместимости СУБД и платформы.
Давайте проанализируем архитектуру клиент-серверного взаимодействия. Если серверная часть вашей 1С запущена на Linux, у вас есть три основных пути интеграции с MySQL:
HTTPСоединение и возвращает структурированный JSON.В рамках этой статьи мы подробно рассмотрим первый метод — подключение через внешние источники данных с использованием ODBC, так как он позволяет выполнять полноценные SQL-запросы без программирования дополнительных веб-интерфейсов.
Прежде чем писать код в 1С, необходимо подготовить саму операционную систему Linux. Платформа 1С использует системный менеджер драйверов unixODBC для связи с MySQL. Давайте настроим его.
Подключитесь к терминалу вашего Linux-сервера по SSH и выполните установку менеджера пакетов ODBC:
sudo apt-get update
sudo apt-get install unixodbc unixodbc-dev
Теперь необходимо скачать и установить сам коннектор MySQL ODBC. Обратите внимание на критически важный момент: использование старых версий драйверов (например, 5.1) часто приводит к синтаксическим ошибкам. В частности, драйвер версии 5.1 некорректно экранирует имена колонок, содержащие символы подчеркивания (например, cam_name или cam_id), возвращая ошибку SQLSTATE: 42000 (Error 1064) при попытке построения динамических списков. Для стабильной работы следует устанавливать версию драйвера 5.3 или выше (вплоть до 8.0).
Также важно правильно выбрать архитектуру драйвера: если у вас запущен 64-битный сервер «1С:Предприятие», то и драйвер ODBC должен быть строго 64-битным.
После установки коннектора необходимо зарегистрировать его в системе. Конфигурация ODBC в Linux хранится в двух файлах:
/etc/odbcinst.ini — здесь описываются установленные в системе драйверы СУБД./etc/odbc.ini — здесь описываются конкретные источники данных (DSN), хотя для динамического подключения из 1С заполнять этот файл необязательно.Откроем файл /etc/odbcinst.ini для редактирования и добавим описание нашего драйвера. Обратите внимание на использование именно Unicode-версии драйвера (символ w в названии библиотеки libmyodbc5w.so). Использование ANSI-версии (с буквой a) приведет к тому, что русские символы в текстовых полях превратятся в вопросительные знаки.
[MySQL ODBC 5.3 Unicode Driver]
Description = ODBC for MySQL
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc5w.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc5S.so
FileUsage = 1
Убедитесь, что пути к файлам .so соответствуют реальному расположению библиотек в вашей файловой системе Linux.
Перейдем к разработке в 1С. Для того чтобы предоставить пользователям возможность самостоятельно настраивать параметры соединения (IP-адрес сервера, порт, логин, пароль, имя базы данных) без захода в конфигуратор, мы воспользуемся возможностями объекта ПараметрыСоединенияВнешнегоИсточникаДанных.
Предположим, что в конфигураторе у вас уже добавлен пустой внешний источник данных с именем СайтИнтернетМагазина. Нам не нужно жестко прописывать строку соединения в его свойствах. Вместо этого мы будем формировать ее динамически.
Рассмотрим пример кода, который считывает параметры из пользовательских настроек (например, реквизитов формы) и выполняет безопасное подключение на стороне сервера:
&НаСервере
Процедура ПодключитьсяКMySQLНаСервере()
// Инициализируем объект параметров соединения
ПараметрыСоединения = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
// Формируем динамическую строку подключения для Linux-окружения.
// Обратите внимание: имя драйвера DRIVER должно точно совпадать
// с заголовком секции в файле /etc/odbcinst.ini на вашем Linux-сервере.
СтрокаПодключения = "
|DRIVER={MySQL ODBC 5.3 Unicode Driver};
|SERVER=" + Объект.АдресСервера + ";
|PORT=" + Объект.ПортПодключения + ";
|DATABASE=" + Объект.ИмяБазыДанных + ";
|UID=" + Объект.ИмяПользователя + ";
|PWD=" + Объект.ПарольПользователя + ";
|CHARSET=utf8;";
ПараметрыСоединения.СтрокаСоединения = СтрокаПодключения;
Попытка
// Устанавливаем параметры для внешнего источника данных
ВнешниеИсточникиДанных.СайтИнтернетМагазина.УстановитьОбщиеПараметрыСоединения(ПараметрыСоединения);
// Пытаемся открыть соединение
ВнешниеИсточникиДанных.СайтИнтернетМагазина.УстановитьСоединение();
Сообщить("Соединение с MySQL успешно установлено!");
Исключение
ВызватьИсключение "Не удалось подключиться к базе MySQL. Описание ошибки: " + ОписаниеОшибки();
КонецПопытки;
КонецПроцедуры
После того как соединение успешно установлено, вы можете работать с таблицами внешнего источника данных при помощи стандартного механизма запросов 1С. Давайте разберем пример чтения данных из таблицы пользователей внешней базы:
&НаСервере
Функция ПолучитьТаблицуПользователейMySQL() Экспорт
ТаблицаРезультат = Новый ТаблицаЗначений;
// Перед запросом убедимся, что соединение активно
Попытка
ВнешниеИсточникиДанных.СайтИнтернетМагазина.УстановитьСоединение();
Исключение
ЗаписатьЛогСобытий("Ошибка подключения к внешней СУБД: " + ОписаниеОшибки());
Возврат ТаблицаРезультат;
КонецПопытки;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаПользователей.id КАК Идентификатор,
| ТаблицаПользователей.login КАК Логин,
| ТаблицаПользователей.email КАК Почта
|ИЗ
| ВнешнийИсточникДанных.СайтИнтернетМагазина.Таблица.users КАК ТаблицаПользователей";
Попытка
ТаблицаРезультат = Запрос.Выполнить().Выгрузить();
Исключение
Сообщить("Ошибка выполнения запроса к MySQL: " + ОписаниеОшибки());
КонецПопытки;
Возврат ТаблицаРезультат;
КонецФункции
При интеграции СУБД MySQL и 1С под управлением ОС Linux разработчики нередко сталкиваются со специфическими ошибками. Рассмотрим наиболее частые из них и способы их локализации.
Если вы подключаетесь к современной версии MySQL 8.x, процесс подключения со стороны Linux-сервера 1С может завершиться ошибкой аутентификации. Это связано с тем, что в MySQL 8.0 по умолчанию применяется новый алгоритм шифрования паролей caching_sha2_password, с которым многие версии ODBC-драйверов работать не умеют.
Решение: Нам необходимо изменить метод шифрования пароля для конкретного пользователя, под которым 1С подключается к MySQL. Для этого выполните следующий SQL-запрос в вашей базе данных MySQL:
ALTER USER 'user_1c'@'%' IDENTIFIED WITH mysql_native_password BY 'ваш_надежный_пароль';
FLUSH PRIVILEGES;
Эта команда переведет учетную запись на использование классического плагина авторизации mysql_native_password, совместимого со всеми версиями драйверов ODBC.
Эта ошибка часто возникает при использовании динамических списков на форме 1С, связанных с таблицами внешних источников данных. Причина кроется в синтаксическом несовпадении генерируемого платформой 1С SQL-запроса и возможностями парсера конкретного ODBC-драйвера. Драйверы версии 5.1 часто падают при экранировании символов подчеркивания или специальных типов данных (таких как UUID или дата с таймзоной).
Решение:
Строку.Придерживаясь этих правил, вы сможете построить отказоустойчивую архитектуру обмена данными между «1С:Предприятием» и внешними базами данных MySQL на инфраструктуре под управлением ОС Linux.