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

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

Как подключиться к SQL из 1С

Как подключиться к SQL из 1С: ADO, внешние источники данных, COM и запросы к SQL Server. Пошаговая настройка, примеры кода, типичные ошибки и FAQ.

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

Важно сразу различать две ситуации. Первая — сама информационная база 1С уже работает на SQL Server, и тогда «подключение» настраивается на уровне сервера 1С и консоли кластера, без программирования. Вторая — из кода 1С нужно обратиться к произвольной SQL-базе (MS SQL, MySQL, PostgreSQL), которая к 1С отношения не имеет. Именно второй сценарий требует выбора технологии доступа и написания кода.

Ниже разобраны основные способы подключения, примеры кода, требования к окружению и проверка результата. Все действия с продуктивными базами выполняйте только на учётной записи с минимально необходимыми правами и после резервного копирования.

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

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

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

ADO (ADODB.Connection через COM)

Подходит для разовых выборок и обменов из кода. Работает только на Windows, требует установленного OLE DB/ODBC драйвера, соединение открывается на каждый сеанс.

Внешние источники данных (ВИД)

Штатный механизм платформы: таблицы SQL видны в конфигураторе как объекты метаданных, доступны в запросах и отчётах. Требует настройки ODBC и прав, работает в тонком и веб-клиенте.

HTTP-сервисы / веб-сервисы

SQL-базу оборачивают в API на стороне сервера. Подходит для облачных и кроссплатформенных сценариев, но требует разработки промежуточного сервиса.

Файловый обмен (CSV, XML, JSON)

Самый простой вариант без прямого подключения. Подходит для периодической загрузки, но не даёт актуальных данных в реальном времени.

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

Подключение через ADO из кода 1С

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

Строка подключения для MS SQL Server через OLE DB выглядит так: указываются провайдер, сервер, база и способ аутентификации. Для Windows-аутентификации используется Integrated Security=SSPI, для SQL-аутентификации — логин и пароль.

bsl
Соединение = Новый COMОбъект("ADODB.Connection");
СтрокаПодключения = "Provider=SQLOLEDB;Data Source=SQLSERVER\INSTANCE;Initial Catalog=MyBase;Integrated Security=SSPI;";
Соединение.Open(СтрокаПодключения);

НаборЗаписей = Соединение.Execute("SELECT Code, Name FROM dbo.Goods");
Пока НЕ НаборЗаписей.EOF Цикл
    Код = НаборЗаписей.Fields("Code").Value;
    Наименование = НаборЗаписей.Fields("Name").Value;
    НаборЗаписей.MoveNext();
КонецЦикла;

НаборЗаписей.Close();
Соединение.Close();

Для MySQL и PostgreSQL вместо SQLOLEDB используется ODBC-драйвер: сначала в системе настраивается DSN (или строка подключения с указанием драйвера), затем то же самое соединение открывается через ADODB.Connection. Текст запроса при этом пишется на диалекте SQL целевой СУБД, а не на языке запросов 1С.

Обязательно закрывайте набор записей и соединение после использования, а сам код оборачивайте в попытку/исключение: при сетевом сбое незакрытое соединение останется висеть на SQL-сервере до тайм-аута. Пароль не следует хранить в открытом виде в коде — используйте защищённое хранилище или параметры, задаваемые администратором.

Подключение через внешние источники данных

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

Настройка внешнего источника данных
  1. 1
    Установите на сервере 1С ODBC-драйвер целевой СУБД (например, ODBC Driver for SQL Server)
  2. 2
    Создайте системный DSN в оснастке «Источники данных ODBC» с той же разрядностью, что и сервер 1С
  3. 3
    В конфигураторе добавьте объект «Внешние источники данных» и укажите строку подключения или DSN
  4. 4
    Добавьте таблицы: выберите их из списка объектов базы, платформа сама прочитает структуру полей
  5. 5
    Опубликуйте конфигурацию и проверьте в пользовательском режиме, что данные таблиц открываются

Важный нюанс — разрядность. Сервер 1С 64-бит видит только 64-разрядные DSN, а 32-битный клиент — только 32-разрядные. Если источник настроен, но таблицы «не видны», в первую очередь проверяйте, в какой оснастке ODBC создан DSN и на той ли машине он создан, где выполняется код.

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

Особый случай: база 1С сама развёрнута на SQL Server

Если под «подключением к SQL» понимается перевод файловой базы 1С на SQL Server, процедура выполняется не кодом, а административными инструментами. Сначала устанавливаются SQL Server и сервер 1С:Предприятия, затем в консоли кластера создаётся новая информационная база с указанием типа СУБД, имени сервера и имени базы данных.

При создании базы через консоль кластера 1С сама создаёт пустую базу данных на SQL Server, либо можно заранее создать её вручную в SQL Server Management Studio. Учётная запись, от имени которой работает сервер 1С, должна иметь права на создание и изменение этой базы. Далее в базу загружается выгрузка (.dt) из файловой версии через конфигуратор.

Напрямую «открыть» базу 1С средствами SQL Server и читать её таблицы запросами технически возможно, но структура хранения не документирована для прямой работы, а запись в таблицы в обход платформы гарантированно приводит к рассогласованию данных и потере поддержки. Для аналитики поверх базы 1С корректнее использовать реплики, выгрузки или штатные механизмы доступа.

Проверка подключения и диагностика ошибок

После настройки подключение нужно проверить изолированно от прикладного кода. Для ODBC это делается кнопкой «Проверить подключение» в настройке DSN, для ADO — простейшим запросом вида SELECT 1. Только после успешного теста имеет смысл отлаживать бизнес-логику.

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

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

Тест DSN в оснастке ODBC
Норма

Сообщение об успешном подключении

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

Ошибка входа, таймаут или «драйвер не найден»

Запрос SELECT 1 из кода 1С
Норма

Запрос выполняется без исключения

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

Ошибка создания COM-объекта или открытия соединения

Чтение реальной таблицы
Норма

Возвращаются строки с ожидаемыми значениями

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

Пустой результат при заведомо заполненной таблице или ошибка прав доступа

Кодировка строковых полей
Норма

Кириллица читается корректно

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

Вопросительные знаки или «кракозябры» — несовпадение collation/драйвера

Типичные ошибки при подключении: «Поставщик данных не найден» (не установлен драйвер нужной разрядности), «Ошибка входа пользователя» (неверный логин или не включена SQL-аутентификация на сервере), «Таймаут истёк» (сервер недоступен по сети или закрыт порт, по умолчанию для MS SQL — TCP 1433). Каждая из них локализуется на уровне теста DSN, до запуска кода 1С.

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

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

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

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

Итог

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

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

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

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

COM-объекты ADODB на Linux недоступны, поэтому прямой ADO-способ не работает. Варианты: внешние источники данных с ODBC-драйвером для Linux, подключение через промежуточный HTTP-сервис или выполнение обмена на отдельном Windows-узле с последующей передачей данных.

Чем внешние источники данных лучше ADO?

Таблицы ВИД становятся частью метаданных: их можно использовать в запросах 1С, отчётах СКД, формах и динамических списках без написания кода подключения. ADO гибче для произвольных запросов и записи, но требует программирования каждого обращения и ручного управления соединением.

Почему возникает ошибка «Класс не зарегистрирован» при создании ADODB.Connection?

Код выполняется в среде, где нет COM: это 64-разрядный сервер без установленного 64-битного провайдера, Linux-сервер или веб-клиент. Проверьте, на какой стороне (клиент или сервер) исполняется код, и установите соответствующий OLE DB/ODBC драйвер нужной разрядности.

Можно ли из 1С выполнять хранимые процедуры SQL Server?

Да, через ADODB.Command с типом команды «хранимая процедура» и передачей параметров. Это предпочтительнее прямых запросов на запись: логика изменения данных остаётся на стороне SQL, поддерживаются транзакции и контроль прав на уровне процедуры.

Как безопасно передать пароль от SQL в код 1С?

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

Что делать, если запрос к SQL из 1С выполняется очень медленно?

Сначала выполните тот же запрос в Management Studio и посмотрите план выполнения: чаще всего не хватает индекса по полям фильтрации. Сократите выборку условиями, заберите только нужные поля, а массовую обработку перенесите в фоновое задание, чтобы не блокировать сеанс пользователя.