ИНТЕГРАЦИЯ 1С С MYSQL: ПОДКЛЮЧЕНИЕ, ЗАПРОСЫ, ТИПИЧНЫЕ ОШИБКИ
Типовая задача: у компании есть сайт на MySQL (интернет-магазин на своей CMS, WordPress, Bitrix или самописный движок), а учёт ведётся в 1С. Нужно, чтобы 1С видела остатки и заказы напрямую в базе сайта — без промежуточного веб-сервиса, обмена файлами или ежечасной выгрузки. Для этого в 1С есть штатный механизм «Внешние источники данных»: он подключается к MySQL по ODBC и позволяет обращаться к таблицам сайта прямо из встроенного языка запросов 1С, как к обычным справочникам.
В статье разберём, как поставить драйвер, создать DSN, подключить источник в конфигураторе, написать запрос к внешним таблицам и на что смотреть, когда подключение падает с непонятной ошибкой. Отдельно — когда для той же задачи разумнее выбрать PostgreSQL вместо MySQL.
Что вы узнаете
- Чем внешний источник данных 1С отличается от обмена через веб-сервис или файлы обмена
- Как установить и настроить MySQL Connector/ODBC и системный DSN
- Как добавить внешний источник данных в конфигураторе и написать запрос к таблицам MySQL
- Какие ошибки подключения встречаются чаще всего и что за ними стоит на самом деле
- Когда для интеграции с 1С предпочтительнее MySQL, а когда — PostgreSQL
Внешний источник данных вместо веб-сервиса
Механизм внешних источников данных появился в платформе 1С:Предприятие начиная с версии 8.3.5 и с тех пор не менялся принципиально — он работает и в текущих релизах 8.3.2x. Это не обмен и не выгрузка: 1С обращается к таблицам стороннего сайта в момент выполнения запроса, через драйвер ODBC (или OLE DB, но на практике для MySQL почти всегда используют ODBC — OLE DB-провайдер для MySQL Oracle не поддерживает, а сторонние варианты менее стабильны).
Подход удобен для чтения: показать в 1С актуальные остатки сайта, свести заказы с сайта в единый список, дёрнуть таблицу пользователей CMS для сверки. Для двусторонней синхронизации с бизнес-логикой (валидация, история изменений, повторные попытки при сбое) внешний источник данных — не лучший инструмент: он не умеет транзакции на несколько таблиц и не терпит нестабильного канала связи. Если обмен нужен именно такой, дешевле поставить между 1С и сайтом отдельный сервис — например, на FastAPI, как в статье «Python 1С. Микросервис на FastAPI», или готовый модуль обмена, как в кейсе с WooCommerce и 1С.
Устанавливаем MySQL Connector/ODBC
Драйвер ставится на компьютер, где выполняется код 1С — то есть на сервер 1С в клиент-серверном варианте или на рабочую станцию в файловом. Скачивать нужно с официальной страницы dev.mysql.com/downloads/connector/odbc: там же есть архив старых сборок, если сайт работает на MySQL 5.7 и совместимость важнее свежих фич.
На момент написания статьи актуальна линейка Connector/ODBC 9.x (пришла на смену устаревшей нумерации 8.0.x) — она поддерживает MySQL Server 8.0, 8.4 LTS и 9.x. Для типового сайта на MySQL 8.0/8.4 берите последнюю сборку 9.x; для legacy-баз на 5.7 подойдёт архивная 8.0.x — с новым драйвером к серверу 5.7 иногда вылезают проблемы совместимости TLS.
Важный момент, из-за которого чаще всего не работает подключение: разрядность драйвера должна совпадать с разрядностью 1С. Актуальные версии платформы 1С:Предприятие — 64-битные, значит нужен драйвер Connector/ODBC 9.x именно x64. Если параллельно используется старая внешняя обработка под 32-битную 1С — придётся ставить обе версии драйвера одновременно, они не конфликтуют.
Настройка DSN (системного источника данных)
После установки драйвера создаём системный DSN — именно системный, а не пользовательский, иначе сервис 1С, запущенный под отдельной учётной записью, его не увидит:
- Открываем
Администрирование → Источники данных ODBC (64-разрядные)(odbcad32.exeизC:\Windows\System32— это и есть 64-битная версия, несмотря на путь). - Вкладка «Системный DSN» → «Добавить» → выбираем
MySQL ODBC 9.x Unicode Driver. - Заполняем:
TCP/IP Server— адрес сервера MySQL,Port— 3306 по умолчанию,User/Password— отдельная учётная запись только на чтение нужных таблиц,Database— имя базы сайта. - На вкладке Connection явно выставляем
Character Setвutf8mb4— иначе кириллица из 1С в фильтрах запроса придёт в MySQL кракозябрами. - Жмём «Test» и убеждаемся, что драйвер реально достучался до сервера, а не просто сохранил настройки.
Пример строки соединения, которую дальше будем использовать в 1С (без DSN, напрямую через драйвер — так источник данных не зависит от того, настроен ли DSN на конкретной машине):
DRIVER={MySQL ODBC 9.0 Unicode Driver};SERVER=192.168.1.50;PORT=3306;DATABASE=shop_db;UID=onec_reader;PWD=пароль_из_секретов;CHARSET=utf8mb4;
Добавляем внешний источник данных в конфигураторе
В конфигураторе 1С: правой кнопкой на ветке «Внешние источники данных» → «Добавить». Дальше:
- В свойствах источника указываем строку соединения (можно вставить строку выше целиком, конструктор для ODBC не обязателен).
- На вкладке «Таблицы» выбираем автозаполнение — платформа подключится к базе с указанными учётными данными и покажет список таблиц MySQL.
- Отмечаем нужные таблицы галкой — они появятся в дереве метаданных как обычные объекты внешнего источника, с полями и типами, определёнными по структуре MySQL.
Нюанс, который путает почти всех, кто настраивает это впервые: пароль от строки соединения в конфигурации не хранится. При каждом сеансе 1С источник нужно подключать программно — либо через форму «Администрирование → Общие настройки → Внешние источники данных», либо кодом при старте сеанса:
Источник = ВнешниеИсточникиДанных.ShopMySQL;
Если НЕ Источник.Соединение.Установлено() Тогда
Источник.Соединение.УстановитьПараметрыСоединения(
"DRIVER={MySQL ODBC 9.0 Unicode Driver};SERVER=192.168.1.50;PORT=3306;DATABASE=shop_db;CHARSET=utf8mb4;",
"onec_reader",
Пароль); // пароль — из хранилища настроек, не хардкод в модуле
Источник.Соединение.Установить();
КонецЕсли;
Пример запроса к таблицам MySQL из 1С
После подключения источника таблицы MySQL доступны языку запросов 1С почти как обычные объекты — с оговоркой, что это read-only проекция внешней таблицы, без индексов платформы и без части оптимизаций, которые 1С делает для своих собственных данных:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.sku КАК Артикул,
| Товары.price КАК Цена,
| Товары.stock КАК Остаток
|ИЗ
| ВнешнийИсточникДанных.ShopMySQL.Таблица.products КАК Товары
|ГДЕ
| Товары.stock > 0
|УПОРЯДОЧИТЬ ПО
| Товары.sku";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
// сопоставляем артикул сайта с номенклатурой 1С и обновляем цену/остаток
Сообщить(Выборка.Артикул + ": " + Выборка.Цена + " / " + Выборка.Остаток);
КонецЦикла;
Фильтровать и сортировать стоит именно в тексте запроса на стороне MySQL (как в примере выше), а не после выгрузки в 1С: внешний источник не всегда умеет опустить условие ГДЕ на сторону сервера, и на таблице в сотни тысяч строк разница — секунды против минут.
Типичные ошибки подключения
- «Диспетчер драйверов ODBC: источник данных не найден и не указан драйвер, используемый по умолчанию» — 1С обратилась к драйверу не той разрядности (32-битный драйвер при 64-битной 1С или наоборот), либо имя драйвера в строке соединения не совпадает с тем, что реально установлено. Проверяется через
odbcad32.exe— на вкладке «Драйверы» должен быть ровно тот драйвер, что указан вDRIVER=. - «Access denied for user '...'@'...'» — учётная запись MySQL создана с маской хоста, не совпадающей с адресом, откуда реально идёт запрос (например, пользователь заведён как
onec_reader@localhost, а 1С подключается с другого сервера). Пересоздать пользователя с корректным хостом или%для тестового контура. - «Can't connect to MySQL server on ... (10061)» — порт 3306 закрыт файрволом либо MySQL слушает только
127.0.0.1(типично для дефолтной установки на Linux,bind-address = 127.0.0.1вmy.cnf). Правится на стороне сервера MySQL, не 1С. - Кракозябры вместо кириллицы в результатах запроса — не совпадают кодировки клиента и таблицы. Проверить
CHARSET=utf8mb4в строке соединения и убедиться, что сама таблица MySQL создана вutf8mb4, а не вlatin1по умолчанию. - Подключение то работает, то нет, без видимой причины — почти всегда смешение 32- и 64-битных компонентов: часть служб 1С (например, фоновое задание) стартовала под другой разрядностью, чем интерактивный сеанс, где всё тестировалось руками.
MySQL или PostgreSQL: что выбрать для внешнего источника
Речь не о СУБД для самой информационной базы 1С (там типовой выбор — MS SQL Server или сборка PostgreSQL для 1С), а о том, на чём держать внешнюю систему, с которой 1С обменивается данными через внешний источник.
| Критерий | MySQL | PostgreSQL |
|---|---|---|
| Типичный сценарий | Внешняя система уже на MySQL: WordPress, большинство сборок Bitrix, многие самописные PHP-движки интернет-магазинов | Внешняя система на PostgreSQL: современные Django/Node.js-бэкенды, аналитические витрины, системы с требованием строгой типизации данных |
| ODBC-драйвер | Connector/ODBC от Oracle, единственный официальный вариант, регулярно обновляется | psqlODBC — тоже официальный и стабильный, ставится и настраивается аналогично |
| Типы данных | Более гибкая, местами нестрогая типизация (неявные преобразования, TEXT/BLOB без строгих ограничений) | Строгая типизация, есть нативный JSON/JSONB — удобно, если сайт хранит часть данных не в реляционном виде |
| Лицензирование | GPL с коммерческой альтернативой от Oracle — для встраивания в проприетарный продукт иногда нужна коммерческая лицензия | Permissive-лицензия (PostgreSQL License), ограничений на встраивание нет |
| Когда выбирать | Если внешняя система уже работает на MySQL — переносить её ради интеграции с 1С нет смысла, подключайтесь как есть | Если проектируете новую внешнюю систему с нуля именно под интеграцию с 1С — PostgreSQL чаще предпочтительнее из-за типов данных и лицензии |
Практический вывод: выбор СУБД для внешнего источника почти всегда уже сделан за вас — вы подключаетесь к тому, на чём работает существующий сайт или сервис. Обсуждать MySQL или PostgreSQL имеет смысл только на этапе проектирования новой внешней системы; для уже работающего MySQL-сайта городить миграцию исключительно ради удобства 1С — избыточно, разница в поддержке через ODBC для read-only интеграции несущественна.
Похожие статьи
Курсы по теме
Если вместо внешнего источника данных вам нужна полноценная интеграция 1С с внешним HTTP API на Python — с валидацией, авторизацией и защитой от прямого доступа к базе — на эту задачу отвечает курс «Python + 1С: защищённый OAuth 2 сервер».
Если задача шире — не просто читать данные сайта из 1С, а построить полноценный личный кабинет контрагента с заказами, остатками и ценами поверх 1С, — см. курс «B2B портал для 1С. Личный кабинет контрагента» на Django.