Автоматизация · 12 мин
Как связать MySQL и 1С: рабочие способы интеграции
Практическое руководство по связке MySQL и 1С: обмен через COM и ADO, внешние источники данных, промежуточные сервисы, типичные ошибки и проверка результата.
Связка MySQL и 1С нужна, когда учётная система должна обмениваться данными с сайтом, интернет-магазином, CRM или собственным веб-приложением, которое хранит данные в MySQL. Типичные сценарии: выгрузка товаров и цен из 1С на сайт, загрузка заказов с сайта в 1С, синхронизация остатков склада с витриной, передача данных в аналитическую систему.
Прямого «родного» коннектора MySQL в платформе 1С нет, поэтому интеграцию строят одним из проверенных путей: через ADO/ODBC-драйвер, через механизм внешних источников данных, через промежуточный веб-сервис (HTTP API) или через файловый обмен. У каждого способа есть свои условия применения, ограничения по производительности и требования к безопасности.
Ниже разобраны четыре рабочих подхода, порядок настройки самого популярного из них (ADO через ODBC), способы проверки результата и типичные ошибки, из-за которых обмен ломается или работает медленно.
Выбор способа интеграции под вашу задачу
Прежде чем настраивать соединение, определите характер обмена: направление (из 1С в MySQL, из MySQL в 1С или двусторонний), частоту (раз в день, каждые 5 минут, в реальном времени) и объём (сотни или миллионы записей). От этого зависит архитектура решения.
Сравнение вариантов интеграции
Подходит для прямых SQL-запросов из кода 1С: выгрузка товаров, загрузка заказов по расписанию. Ограничение: работает только там, где установлен драйвер (обычно Windows-сервер 1С), нужно следить за разрядностью.
Таблицы MySQL отображаются в 1С как объекты конфигурации, к ним можно обращаться из запросов и отчётов. Ограничение: чувствителен к схеме данных, сложнее отлаживать, не во всех режимах совместимости доступен полный функционал.
1С обращается к веб-API (PHP, Python, Node.js), а тот работает с MySQL. Подходит для постоянной двусторонней синхронизации и работы через интернет. Ограничение: нужна разработка и поддержка сервиса.
Самый простой и надёжный вариант для редких выгрузок: 1С формирует файл, скрипт на стороне сайта загружает его в MySQL. Ограничение: нет мгновенной актуальности данных.
Если сайт и 1С находятся в одной сети и обмен идёт по расписанию, ADO + ODBC — самый быстрый в освоении путь. Если база MySQL расположена на внешнем хостинге, прямое подключение из 1С часто невозможно из-за ограничений хостера (закрытый порт 3306, привязка к localhost), и тогда единственный разумный вариант — HTTP-сервис или файловый обмен.
Подготовка MySQL: пользователь, права и доступ
Создайте в MySQL отдельного пользователя для интеграции — не используйте root и не используйте учётную запись самого сайта. Это ограничит ущерб при утечке пароля и упростит аудит: по логам будет видно, какие запросы выполняла именно интеграция.
CREATE USER 'integration_1c'@'%' IDENTIFIED BY 'StrongPassword123';
GRANT SELECT, INSERT, UPDATE ON shop_db.* TO 'integration_1c'@'%';
FLUSH PRIVILEGES;Выдавайте минимально необходимые права: если 1С только выгружает товары, достаточно INSERT и UPDATE на конкретные таблицы; если только читает заказы — достаточно SELECT. Право DELETE давайте только при реальной необходимости.
Проверьте, что MySQL принимает внешние подключения: в конфигурации сервера параметр bind-address не должен быть ограничен только 127.0.0.1, если подключение идёт с другой машины, а брандмауэр должен пропускать порт 3306 с адреса сервера 1С. В пользователе MySQL хост '%' разрешает подключение отовсюду — для боевой среды лучше указать конкретный IP сервера 1С.
Способ 1. Прямое подключение через ADO и ODBC
Это самый распространённый способ: из встроенного языка 1С создаётся COM-объект ADODB.Connection, который подключается к MySQL через установленный ODBC-драйвер. Работает в толстом и тонком клиенте при условии, что драйвер установлен на машине, где исполняется код (на сервере 1С — для серверных вызовов).
Порядок подготовки: скачайте MySQL Connector/ODBC с официального сайта MySQL, установите версию той же разрядности, что и процесс, который будет выполнять подключение. Для 64-разрядного сервера 1С нужен 64-битный драйвер; если код выполняется в 32-битном клиенте — 32-битный. Настраивать системный DSN необязательно — строку подключения можно передать целиком.
Соединение = Новый COMОбъект("ADODB.Connection");
СтрокаПодключения = "Driver={MySQL ODBC 8.0 Unicode Driver};Server=192.168.1.10;Port=3306;Database=shop_db;User=integration_1c;Password=StrongPassword123;Option=3;";
Соединение.Open(СтрокаПодключения);
НаборЗаписей = Новый COMОбъект("ADODB.Recordset");
НаборЗаписей.Open("SELECT id, name, price FROM products", Соединение);
Пока НЕ НаборЗаписей.EOF Цикл
// обработка полей: НаборЗаписей.Fields("name").Value
НаборЗаписей.MoveNext();
КонецЦикла;
НаборЗаписей.Close();
Соединение.Close();Обращайте внимание на имя драйвера в строке подключения — оно должно точно совпадать с именем, зарегистрированным в системе (посмотреть можно в «Администратор источников данных ODBC»). Имена у разных версий коннектора отличаются, и неверное имя — самая частая причина ошибки «Provider cannot be found».
Для записи данных используйте параметризованные запросы через ADODB.Command или хотя бы экранируйте строки: конкатенация пользовательских данных прямо в текст SQL-запроса создаёт риск SQL-инъекции даже внутри закрытой системы.
Способ 2. Внешние источники данных
Механизм внешних источников данных (ВИД) позволяет подключить таблицы MySQL к конфигурации так, чтобы они выглядели как объекты 1С: их можно использовать в запросах, отчётах на СКД, динамических списках. Это удобно, когда данные MySQL нужно показывать пользователям в интерфейсе 1С без физической загрузки в базу.
Настройка делается в конфигураторе: создаётся объект «Внешний источник данных», в нём — таблицы с указанием полей и типов, затем в параметрах прописывается строка подключения ODBC. При изменении структуры таблиц на стороне MySQL описание в конфигурации нужно обновлять вручную, иначе возникнут ошибки несоответствия типов.
ВИД оправданы для справочных данных и отчётности, но для высокочастотной записи (например, регистрация каждого заказа сайта) прямой ADO-вызов или промежуточный сервис обычно надёжнее и проще в отладке.
Способ 3. Промежуточный HTTP-сервис
Когда база MySQL стоит на веб-хостинге и прямой доступ закрыт, между 1С и MySQL ставят небольшой сервис: скрипт на PHP/Python/Node.js, который принимает HTTP-запросы от 1С, выполняет операции с базой и возвращает результат в JSON. Со стороны 1С используется объект HTTPСоединение.
Этот вариант даёт полный контроль над логикой: сервис может валидировать данные, писать логи, обрабатывать конфликты и работать по HTTPS с авторизацией по токену. Минус — нужна разработка и сопровождение самого сервиса, а также защита API: как минимум секретный токен в заголовке, HTTPS и ограничение по IP при возможности.
- 1Разверните на стороне сайта скрипт-эндпоинт, принимающий POST-запросы с JSON-телом и проверяющий токен авторизации
- 2Реализуйте в нём операции: приём товаров/цен от 1С, отдача новых заказов, подтверждение обработки
- 3В 1С создайте регламентное задание, которое по расписанию вызывает эндпоинты через HTTPСоединение
- 4Добавьте механизм подтверждений: 1С помечает заказ как загруженный только после успешного ответа, сайт — только после подтверждения из 1С
- 5Протестируйте на копии базы: отправьте тестовый товар, проверьте его появление в MySQL, затем тестовый заказ в обратную сторону
Способ 4. Файловый обмен как простая альтернатива
Если требования к оперативности невысокие (обмен раз в час или раз в день), самый устойчивый вариант — файловый: 1С формирует CSV, XML или JSON и передаёт его на сервер по SFTP/FTP или через тот же HTTP-запрос, а скрипт на стороне сайта разбирает файл и обновляет MySQL. В обратную сторону сайт выгружает заказы в файл, который 1С забирает и загружает.
Преимущество подхода — отказоустойчивость: при недоступности одной из сторон файл просто дождётся следующего цикла, а ошибки легко диагностируются по содержимому файла. Для интернет-магазинов на 1С-Битрикс и подобных платформах часто используется готовый формат CommerceML, который 1С умеет формировать штатно.
Проверка результата и типичные ошибки
После настройки обязательно проверьте обмен на тестовых данных и убедитесь, что результат виден на обеих сторонах. Не ограничивайтесь отсутствием ошибок в журнале — откройте таблицу MySQL и убедитесь, что записи реально появились и содержат корректные значения, включая кириллицу и дробные числа.
Как проверить результат
Кириллические названия в MySQL отображаются без кракозябр; соединение и таблицы в utf8mb4
Вопросительные знаки или искажённые символы — несоответствие кодировки соединения
Цены и количества совпадают с 1С, даты в правильном формате
Округлённые суммы, даты 1970 года или NULL — ошибки преобразования типов
Повторный запуск обмена не создаёт дублирующих записей, обновляет существующие
Каждый прогон добавляет новые строки — не реализован поиск по ключу
Регламентное задание отрабатывает несколько суток без ошибок в журнале
Периодические таймауты или обрывы — проблемы сети или слишком большие пакеты данных
Перед запуском обмена в рабочую базу сделайте резервную копию таблиц MySQL, которые будет трогать интеграция, и сначала прогоните обмен в тестовой копии сайта. Особенно это важно для операций UPDATE и DELETE: один неверный WHERE без ключевого условия способен обнулить цены по всему каталогу.
Частые вопросы
Можно ли подключиться к MySQL из 1С без установки ODBC-драйвера?
Штатного встроенного коннектора MySQL в платформе нет, поэтому для прямого соединения драйвер ODBC (или сторонняя COM/.NET-компонента) необходим. Альтернатива без драйвера — обмен через HTTP-сервис или файлы: в этом случае 1С использует только стандартные средства работы с HTTP и файлами.
Работает ли связка с MySQL в клиент-серверном варианте 1С?
Да, но драйвер ODBC и сетевой доступ к MySQL нужны на том узле, где исполняется код. Если код выполняется в серверном контексте, драйвер ставится на сервер 1С, а не на компьютеры пользователей. Проверьте также, что учётная запись службы сервера 1С имеет доступ к сети.
Что делать, если хостинг запрещает внешние подключения к MySQL?
Типичное ограничение виртуального хостинга. В этом случае прямое подключение из 1С невозможно: используйте промежуточный скрипт на самом хостинге (HTTP API), который 1С вызывает по HTTPS, либо файловый обмен через FTP/SFTP, который хостинги обычно разрешают.
Как синхронизировать остатки, чтобы не гонять весь каталог каждый раз?
Ведите в 1С признак изменения: план обмена, регистрация изменений или просто сравнение по дате последней выгрузки. Выгружайте только товары, изменившиеся с прошлого сеанса, а полную выгрузку оставьте для начальной загрузки или редкой сверки. На стороне MySQL обновляйте записи по уникальному ключу товара.
Какой способ выбрать для интернет-магазина с заказами в реальном времени?
Для мгновенной передачи заказов надёжнее всего HTTP-сервис: сайт сразу после оформления заказа отправляет его в 1С (или складывает в очередь, которую 1С забирает каждые несколько минут). Прямое ADO-подключение к базе сайта для этой задачи хрупче: оно зависит от доступности сети и схемы таблиц конкретной CMS.
Безопасно ли хранить данные подключения в коде 1С?
Нет, пароль в открытом виде в общем модуле — плохая практика: он попадёт в выгрузки конфигурации и копии базы. Храните параметры в защищённом хранилище, в отдельном файле настроек с ограниченным доступом или запрашивайте у пользователя с особыми правами. Пользователь MySQL при этом должен иметь минимально необходимые права.
Что важно запомнить
Прямого коннектора MySQL в 1С нет: используйте ADO + ODBC для запросов из кода, внешние источники данных для отчётов, HTTP-сервис для постоянной двусторонней синхронизации и файловый обмен для редких выгрузок. Создайте отдельного пользователя MySQL с минимальными правами, проверяйте кодировку и отсутствие дублей на тестовых данных, а перед запуском в рабочую базу сделайте резервную копию.