Администрирование · 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-базам, поэтому используются несколько обходных и штатных механизмов. У каждого есть свои ограничения по производительности, безопасности и поддержке.
Сравнение способов подключения
Подходит для разовых выборок и обменов из кода. Работает только на Windows, требует установленного OLE DB/ODBC драйвера, соединение открывается на каждый сеанс.
Штатный механизм платформы: таблицы SQL видны в конфигураторе как объекты метаданных, доступны в запросах и отчётах. Требует настройки ODBC и прав, работает в тонком и веб-клиенте.
SQL-базу оборачивают в API на стороне сервера. Подходит для облачных и кроссплатформенных сценариев, но требует разработки промежуточного сервиса.
Самый простой вариант без прямого подключения. Подходит для периодической загрузки, но не даёт актуальных данных в реальном времени.
Если задача — регулярно читать справочники или остатки из SQL-базы прямо в отчётах 1С, рациональнее всего внешние источники данных. Если нужно выполнить несколько запросов по расписанию из регламентного задания — достаточно ADO. Если база находится в другой сети или в облаке, прямое подключение часто запрещено политиками безопасности, и тогда единственный корректный путь — промежуточный сервис.
Подключение через ADO из кода 1С
Классический способ — создать COM-объект ADODB.Connection и выполнить SQL-запросы напрямую. Метод работает в толстом и тонком клиенте на Windows, а также на сервере 1С под Windows, если там установлен нужный провайдер данных.
Строка подключения для MS SQL Server через OLE DB выглядит так: указываются провайдер, сервер, база и способ аутентификации. Для Windows-аутентификации используется Integrated Security=SSPI, для SQL-аутентификации — логин и пароль.
Соединение = Новый 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С ODBC-драйвер целевой СУБД (например, ODBC Driver for SQL Server)
- 2Создайте системный DSN в оснастке «Источники данных ODBC» с той же разрядностью, что и сервер 1С
- 3В конфигураторе добавьте объект «Внешние источники данных» и укажите строку подключения или DSN
- 4Добавьте таблицы: выберите их из списка объектов базы, платформа сама прочитает структуру полей
- 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. Только после успешного теста имеет смысл отлаживать бизнес-логику.
Как проверить результат
Сообщение об успешном подключении
Ошибка входа, таймаут или «драйвер не найден»
Запрос выполняется без исключения
Ошибка создания COM-объекта или открытия соединения
Возвращаются строки с ожидаемыми значениями
Пустой результат при заведомо заполненной таблице или ошибка прав доступа
Кириллица читается корректно
Вопросительные знаки или «кракозябры» — несовпадение collation/драйвера
Типичные ошибки при подключении: «Поставщик данных не найден» (не установлен драйвер нужной разрядности), «Ошибка входа пользователя» (неверный логин или не включена SQL-аутентификация на сервере), «Таймаут истёк» (сервер недоступен по сети или закрыт порт, по умолчанию для MS SQL — TCP 1433). Каждая из них локализуется на уровне теста DSN, до запуска кода 1С.
Производительность и безопасность
Прямые запросы через 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 и посмотрите план выполнения: чаще всего не хватает индекса по полям фильтрации. Сократите выборку условиями, заберите только нужные поля, а массовую обработку перенесите в фоновое задание, чтобы не блокировать сеанс пользователя.