Интеграция 1С с веб‑сайтами: установка и настройка MySQL на локальном сервере

ИНТЕГРАЦИЯ 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С обменивается данными через внешний источник.

КритерийMySQLPostgreSQL
Типичный сценарийВнешняя система уже на 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.