К статье
Практический материал

Администрирование · 11 мин

Как подключиться к базе данных SQL из 1С

Способы подключения 1С к базе данных SQL: через строку соединения, COM-объект ADODB и внешние источники данных. Настройка, примеры кода, типичные ошибки.

Подключение 1С к внешней базе данных SQL требуется, когда нужно читать или записывать данные напрямую, минуя промежуточные файлы: выгрузить остатки из учётной системы, забрать заказы с сайта, сверить справочники с другой конфигурацией. В зависимости от задачи используются разные механизмы — прямое подключение через ADODB, внешние источники данных или COM-соединение с другой базой 1С.

Выбор способа зависит от трёх факторов: тип СУБД (MS SQL Server, PostgreSQL, MySQL), режим работы 1С (файловый или клиент-серверный) и направление обмена (только чтение или чтение с записью). Ниже разобраны основные сценарии с примерами кода, настройкой прав и проверкой результата.

Прежде чем писать код, убедитесь, что сам SQL-сервер доступен с компьютера, где работает 1С: проверьте сетевую связь, открытый порт и учётные данные. Большинство проблем с подключением возникает не из-за ошибок в коде, а из-за закрытого брандмауэра или отключённого протокола TCP/IP на стороне сервера.

Какой способ подключения выбрать

В 1С нет единственного «правильного» метода работы с SQL. Прямое подключение через ADODB даёт полный контроль: вы выполняете произвольные запросы, хранимые процедуры, управляете транзакциями. Минус — весь код нужно писать вручную и сопровождать самостоятельно.

Внешние источники данных — штатный механизм платформы. Вы описываете таблицы SQL-базы в конфигураторе, и 1С работает с ними почти как с собственными объектами: можно строить запросы на встроенном языке, выводить данные в отчёты СКД. Ограничение — требуется настройка ODBC-драйвера, а производительность при больших объёмах ниже, чем у прямых запросов.

Если источник данных — другая информационная база 1С, правильнее использовать COM-соединение (V83.COMConnector), а не лезть в её SQL-таблицы напрямую. Структура таблиц 1С на уровне СУБД недокументирована и меняется между релизами, поэтому прямые запросы к базе 1С — ненадёжное решение.

Сравнение способов подключения

ADODB (COM)

Подходит для произвольных запросов к MS SQL, MySQL, PostgreSQL. Требует ручного кода, но даёт полный контроль над транзакциями и параметрами.

Внешние источники данных

Подходит для постоянной интеграции: таблицы видны в запросах и отчётах 1С. Нужен настроенный ODBC-драйвер, сложнее отладка.

COMConnector

Только для подключения к другой базе 1С. Работает через объектную модель, а не через SQL-таблицы.

Подготовка: доступы, драйверы и сеть

До написания кода проверьте три вещи. Первое — сетевая доступность: с машины, где выполняется код 1С (это может быть сервер 1С, а не ваш компьютер), должен быть доступен сервер СУБД по нужному порту. Для MS SQL это обычно 1433, для PostgreSQL — 5432, для MySQL — 3306. Проверить можно командой telnet или Test-NetConnection в PowerShell.

Второе — учётная запись. Создайте в SQL-базе отдельного пользователя с минимально необходимыми правами: для чтения достаточно SELECT по конкретным таблицам или представлениям. Не используйте административные учётные записи вроде sa в коде обмена — это прямой риск для данных.

Третье — провайдер данных. Для ADODB на компьютере, где исполняется код, должен быть установлен OLE DB-провайдер или ODBC-драйвер соответствующей СУБД. Для MS SQL обычно доступен встроенный SQLOLEDB или более современный MSOLEDBSQL. Для PostgreSQL и MySQL драйвер нужно установить отдельно, причём разрядность драйвера должна совпадать с разрядностью процесса 1С.

Подключение через ADODB: пошагово

Самый универсальный способ — создать COM-объект ADODB.Connection и выполнить запрос. Код работает в толстом клиенте и на сервере 1С (в Windows-окружении). В тонком и веб-клиенте COM-объекты недоступны — там подключение нужно выносить на сервер.

Типовой порядок действий: создать объект соединения, открыть его со строкой подключения, выполнить запрос через объект Recordset, обойти результат построчно, закрыть соединение. Обязательно оборачивайте код в попытку-исключение и закрывайте соединение в любом случае, иначе на SQL-сервере будут копиться зависшие сессии.

bsl
Попытка
	Соединение = Новый COMОбъект("ADODB.Connection");
	СтрокаПодключения = "Provider=SQLOLEDB;Data Source=SQLSERVER;Initial Catalog=ExchangeDB;User ID=reader;Password=Secret123;";
	Соединение.Open(СтрокаПодключения);
	Набор = Соединение.Execute("SELECT Code, Name FROM dbo.Goods");
	Пока НЕ Набор.EOF Цикл
		Сообщить(Набор.Fields("Code").Value + " — " + Набор.Fields("Name").Value);
		Набор.MoveNext();
	КонецЦикла;
	Соединение.Close();
Исключение
	Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;

Строка подключения различается в зависимости от СУБД и провайдера. Для MS SQL с Windows-аутентификацией вместо логина и пароля указывается параметр Integrated Security=SSPI — тогда используются права учётной записи, под которой работает процесс 1С. Для PostgreSQL и MySQL строка строится через ODBC-драйвер с указанием его имени.

При передаче параметров в запрос не склеивайте их в текст запроса конкатенацией — это открывает путь к SQL-инъекциям и ломается на спецсимволах. Используйте объект ADODB.Command с параметрами или, минимум, экранируйте строковые значения.

Настройка внешних источников данных

Внешние источники данных настраиваются в конфигураторе: ветка «Общие» — «Внешние источники данных». При добавлении источника указывается тип СУБД, строка подключения и список таблиц, которые нужно видеть в 1С. Платформа считывает структуру таблиц и создаёт их описание в метаданных.

После публикации конфигурации таблицы внешнего источника доступны в конструкторе запросов и в СКД наравне со справочниками и регистрами. Это удобно для отчётов: пользователь строит отчёт по внешним данным обычными средствами, не зная о том, что данные лежат в другой СУБД.

Учтите ограничения: внешние источники требуют ODBC-драйвер на каждом рабочем месте (или на сервере 1С в клиент-серверном режиме), соединение открывается при первом обращении, а при недоступности SQL-сервера пользователь получит ошибку в момент обращения к данным. Для критичных отчётов предусмотрите обработку такой ситуации.

Проверка подключения и результата

Начинайте отладку с минимального запроса, который гарантированно возвращает результат, — например, SELECT 1 или выбор одной строки из заведомо существующей таблицы. Если минимальный запрос не выполняется, проблема в соединении: сети, драйвере или правах. Если выполняется, а рабочий запрос падает — проблема в самом запросе или правах на конкретные объекты.

Полезная практика — логировать факт подключения, время выполнения запроса и количество полученных записей. Это позволяет отличить «данных нет в источнике» от «запрос не выполнился», которые внешне выглядят одинаково — пустой результат.

Контрольные точки

Как проверить результат

Открытие соединения
Норма

Метод Open отработал без исключения, соединение открыто

Тревожный признак

Ошибка вида «сервер не найден», «истекло время ожидания», «доступ запрещён»

Выполнение запроса
Норма

Recordset получен, количество записей соответствует ожиданию

Тревожный признак

Пустой набор при заведомо существующих данных или ошибка синтаксиса

Завершение работы
Норма

Соединение закрыто явно, на SQL-сервере нет зависших сессий

Тревожный признак

Сессии накапливаются после каждого обмена

Типичные ошибки и их устранение

Ошибка «Поставщик данных не найден» означает, что OLE DB-провайдер или ODBC-драйвер не установлен либо не той разрядности. Проверьте разрядность процесса 1С и установите соответствующую версию драйвера. Ошибка «Вход пользователя не выполнен» — неверный логин, пароль или у SQL-логина нет доступа к указанной базе.

Ошибки тайм-аута при удалённом сервере чаще всего связаны с закрытым портом или тем, что MS SQL слушает только локальные подключения. В конфигураторе SQL Server должен быть включён протокол TCP/IP, а служба браузера SQL Server — запущена, если используется именованный экземпляр.

Типичные ошибки
01
Хранение пароля от SQL открытым текстом в коде общего модуля — пароль виден всем, у кого есть доступ к конфигурации; используйте защищённое хранилище или параметры соединения вне кода.
02
Открытие нового соединения на каждую запись в цикле — резкое падение производительности; открывайте соединение один раз и выполняйте запросы пакетно.
03
Запись напрямую в таблицы базы 1С на уровне SQL — нарушение целостности данных и отказ поддержки; для записи используйте объектные механизмы.
04
Игнорирование исключений без закрытия соединения — накопление зависших сессий на SQL-сервере до исчерпания лимита подключений.

Безопасность и производительность

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

По производительности: выбирайте только нужные поля и строки (WHERE на стороне SQL), а не выгружайте таблицу целиком с последующей фильтрацией в 1С. При больших объёмах используйте пакетную обработку — читайте данные порциями. Для регулярных обменов оформляйте код как регламентное задание с обработкой ошибок и уведомлением администратора о сбоях.

Итог

Что важно запомнить

Для разовых запросов к SQL используйте ADODB с обработкой исключений и явным закрытием соединения; для постоянной интеграции — внешние источники данных; к другой базе 1С подключайтесь через COMConnector, а не напрямую в её таблицы. Перед отладкой кода проверьте сеть, драйвер нужной разрядности и права учётной записи — большинство проблем решается на этом этапе.

Частые вопросы

Можно ли подключиться к SQL из тонкого или веб-клиента 1С?

Напрямую через COM-объекты — нет, они недоступны в тонком и веб-клиенте. Подключение выполняется в серверном контексте: код с ADODB помещается в серверную процедуру, а клиент только вызывает её. Альтернатива — внешние источники данных, которые работают через сервер 1С штатно.

Как подключиться к PostgreSQL или MySQL, если стандартного провайдера нет?

Установите официальный ODBC-драйвер соответствующей СУБД той же разрядности, что и процесс 1С. Затем в строке подключения укажите драйвер по имени, например Driver={PostgreSQL Unicode};Server=...;Database=...;. Проверить корректность строки можно заранее через тестовое подключение в настройках ODBC в Windows.

Безопасно ли читать данные напрямую из SQL-таблиц другой базы 1С?

Технически чтение возможно и не повреждает данные, но структура таблиц недокументирована и может измениться после обновления конфигурации — запросы перестанут работать или начнут возвращать неверные данные. Для стабильной интеграции используйте COM-соединение, веб-сервисы или HTTP-сервисы, опубликованные в базе-источнике.

Почему подключение работает у разработчика, но не у пользователей?

Чаще всего дело в контексте выполнения: у разработчика код выполняется локально в толстом клиенте, где установлен драйвер, а у пользователей — на сервере 1С, где драйвера нет или закрыт сетевой доступ к SQL-серверу. Проверьте драйвер, сеть и права именно на сервере 1С:Предприятия.

Как защитить пароль от SQL-базы в коде 1С?

Не храните пароль в тексте модуля. Варианты: параметры внешнего источника данных (платформа хранит их отдельно), защищённые настройки в хранилище значений с ограниченным доступом, файл настроек на сервере с правами только для учётной записи службы 1С, либо Windows-аутентификация, где пароль вообще не требуется.