Как подключить 1С 8 к СУБД MySQL на сервере под управлением Linux

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

Разработчики, привыкшие к среде ОС Windows, при интеграции 1С с другими СУБД традиционно используют COM-соединение и технологию ADO с помощью конструкции Новый COMОбъект("ADODB.Connection"). Однако при переносе сервера 1С на операционные системы семейства Linux этот подход полностью теряет работоспособность, поскольку технология COM является платформозависимой и не поддерживается в Linux-окружении.

В этой статье мы подробно разберем, как решить задачу прямого подключения к базе данных MySQL с сервера 1С под управлением Linux (на примере Debian/Ubuntu). Мы научимся программно изменять параметры соединения в режиме «1С:Предприятие», настраивать системный драйвер ODBC и обходить типичные ошибки совместимости СУБД и платформы.

Почему не работает COM-объект и какие есть альтернативы

Давайте проанализируем архитектуру клиент-серверного взаимодействия. Если серверная часть вашей 1С запущена на Linux, у вас есть три основных пути интеграции с MySQL:

  1. Использование внешних источников данных (ВИД). Это штатный механизм платформы «1С:Предприятие». Он работает на уровне сервера через стандартный интерфейс ODBC. Параметры подключения можно задавать динамически прямо в коде.
  2. Разработка HTTP-сервиса (REST API) на стороне MySQL. Это наиболее безопасный и современный архитектурный подход. Мы создаем небольшую прокладку на PHP, Python или Go, которая принимает запросы от 1С по протоколу HTTP с помощью объекта HTTPСоединение и возвращает структурированный JSON.
  3. Внешние компоненты Native API. Использование специализированных кроссплатформенных библиотек (написанных на C++ или Rust), которые загружаются в 1С как макеты и общаются с MySQL напрямую по TCP/IP без необходимости настройки ODBC в операционной системе.

В рамках этой статьи мы подробно рассмотрим первый метод — подключение через внешние источники данных с использованием ODBC, так как он позволяет выполнять полноценные SQL-запросы без программирования дополнительных веб-интерфейсов.

Шаг 1. Установка и настройка ODBC-драйвера в Linux

Прежде чем писать код в 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 для редактирования и добавим описание нашего драйвера. Обратите внимание на использование именно 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.

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

Перейдем к разработке в 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. Описание ошибки: " + ОписаниеОшибки();
    КонецПопытки;

КонецПроцедуры

Шаг 3. Получение данных с помощью запроса 1С

После того как соединение успешно установлено, вы можете работать с таблицами внешнего источника данных при помощи стандартного механизма запросов 1С. Давайте разберем пример чтения данных из таблицы пользователей внешней базы:


&НаСервере
Функция ПолучитьТаблицуПользователейMySQL() Экспорт

    ТаблицаРезультат = Новый ТаблицаЗначений;
    
    // Перед запросом убедимся, что соединение активно
    Попытка
        ВнешниеИсточникиДанных.СайтИнтернетМагазина.УстановитьСоединение();
    Исключение
        ЗаписатьЛогСобытий("Ошибка подключения к внешней СУБД: " + ОписаниеОшибки());
        Возврат ТаблицаРезультат;
    КонецПопытки;

    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ТаблицаПользователей.id КАК Идентификатор,
        |   ТаблицаПользователей.login КАК Логин,
        |   ТаблицаПользователей.email КАК Почта
        |ИЗ
        |   ВнешнийИсточникДанных.СайтИнтернетМагазина.Таблица.users КАК ТаблицаПользователей";

    Попытка
        ТаблицаРезультат = Запрос.Выполнить().Выгрузить();
    Исключение
        Сообщить("Ошибка выполнения запроса к MySQL: " + ОписаниеОшибки());
    КонецПопытки;

    Возврат ТаблицаРезультат;

КонецФункции

Шаг 4. Решение возможных проблем и подводных камней

При интеграции СУБД MySQL и 1С под управлением ОС Linux разработчики нередко сталкиваются со специфическими ошибками. Рассмотрим наиболее частые из них и способы их локализации.

Проблема 1. Ошибка авторизации в СУБД MySQL версии 8.0 и выше

Если вы подключаетесь к современной версии 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.

Проблема 2. Ошибка "SQLSTATE: 42000" при выводе в Динамический Список

Эта ошибка часто возникает при использовании динамических списков на форме 1С, связанных с таблицами внешних источников данных. Причина кроется в синтаксическом несовпадении генерируемого платформой 1С SQL-запроса и возможностями парсера конкретного ODBC-драйвера. Драйверы версии 5.1 часто падают при экранировании символов подчеркивания или специальных типов данных (таких как UUID или дата с таймзоной).

Решение:

  1. Обновите драйвер на стороне Linux до версии 5.3 или 8.0.
  2. Если обновление драйвера невозможно, зайдите в конфигуратор 1С и в настройках полей внешней таблицы вручную измените типы данных "проблемных" колонок (например, даты или уникальные идентификаторы) на простую Строку.
  3. Попробуйте временно убирать из колонок динамического списка по одному полю, чтобы локализовать то поле, на чьем типе данных драйвер спотыкается.

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

← На главную