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

Разработка и Конфигурация · 9 мин

Как получить данные из SQL в 1С

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

Задача получить данные из SQL-базы в 1С возникает при интеграции с корпоративными хранилищами, сайтами, учётными системами и отчётными витринами. Под «SQL-базой» чаще всего понимают Microsoft SQL Server, но те же подходы работают с PostgreSQL, MySQL и другими СУБД через соответствующие драйверы.

Ключевой выбор — способ подключения: напрямую через ADO из кода 1С, через механизм внешних источников данных, через промежуточный HTTP-сервис или через файловый обмен. У каждого варианта есть условия применения, ограничения по безопасности и требования к правам доступа.

Ниже разобраны практические сценарии с примерами кода на встроенном языке 1С, критериями выбора метода, проверкой результата и типичными ошибками, которые приводят к потере данных или блокировкам базы.

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

Выбор зависит от трёх факторов: частоты обмена, объёма данных и того, кто контролирует SQL-базу. Если база ваша и обмен нужен редко — достаточно прямого запроса через ADO. Если данные нужны регулярно и в режиме реального времени — рассмотрите внешние источники данных. Если SQL-база принадлежит другой системе и прямой доступ закрыт политикой безопасности — единственный корректный путь это API или файловый обмен.

Сравнение способов получения данных

ADO (COM)

Прямой запрос из кода 1С. Подходит для разовых и регламентных выгрузок. Требует установленного OLE DB/ODBC-драйвера и доступа по сети к SQL-серверу.

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

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

HTTP-сервис / API

Промежуточный сервис отдаёт данные в JSON. Безопаснее, работает через интернет. Требует разработки сервиса на стороне SQL.

Файловый обмен

Выгрузка из SQL в CSV/XML с последующей загрузкой в 1С. Просто и надёжно, но без оперативности.

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

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

ADO (ActiveX Data Objects) — самый распространённый способ выполнить произвольный SQL-запрос из 1С. Подключение создаётся через COM-объект ADODB.Connection, результат возвращается в виде набора записей ADODB.Recordset, который обходится в цикле.

1c
Соединение = Новый COMОбъект("ADODB.Connection");
СтрокаПодключения = "Provider=SQLOLEDB;Data Source=SQLSERVER;Initial Catalog=Store;User ID=reader;Password=***";
Соединение.Open(СтрокаПодключения);
Набор = Соединение.Execute("SELECT Code, Name, Price FROM dbo.Goods");
Пока НЕ Набор.EOF Цикл
	Код = Набор.Fields("Code").Value;
	Наименование = Набор.Fields("Name").Value;
	// обработка строки
	Набор.MoveNext();
КонецЦикла;
Набор.Close();
Соединение.Close();

Строка подключения зависит от драйвера. Для Microsoft SQL Server используют SQLOLEDB или более современный MSOLEDBSQL, для PostgreSQL и MySQL — соответствующие ODBC-драйверы с синтаксисом Driver={...};Server=...;Database=.... Проверить корректность строки подключения можно заранее через файл с расширением .udl в Windows.

Обязательно закрывайте Recordset и Connection в конце работы, а при обмене большими объёмами — оборачивайте код в попытку/исключение, чтобы при ошибке соединение не осталось висеть на SQL-сервере. Открытые соединения со временем исчерпывают пул и приводят к отказам в обслуживании.

Внешние источники данных: таблицы SQL внутри 1С

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

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

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

Получение данных через HTTP-сервис

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

1c
Соединение = Новый HTTPСоединение("api.example.local", 443,,,,, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/goods?date=2026-01-01");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен);
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
	Чтение = Новый ЧтениеJSON;
	Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
	Данные = ПрочитатьJSON(Чтение);
КонецЕсли;

Преимущество подхода — контроль: сервис отдаёт только разрешённые данные, логирует обращения и защищает базу от произвольных запросов. Недостаток — нужна разработка и поддержка самого сервиса, а также токенная или иная аутентификация.

Загрузка полученных данных в объекты 1С

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

Порядок загрузки данных
  1. 1
    Получите набор записей из SQL одним из способов выше
  2. 2
    Проверьте структуру: количество полей, типы, наличие NULL
  3. 3
    Для каждой строки найдите объект 1С по внешнему идентификатору или коду
  4. 4
    При отсутствии — создайте новый объект и заполните реквизиты
  5. 5
    Записывайте порциями с фиксацией транзакции, а не всё одним пакетом
  6. 6
    Зафиксируйте количество обработанных и пропущенных строк в журнале

Для больших объёмов используйте загрузку в таблицу значений с последующей пакетной обработкой — так проще контролировать ошибки и повторять неудачные строки. Запись десятков тысяч объектов по одному в цикле без порционной фиксации может занять часы и заблокировать работу пользователей.

Проверка результата и типичные ошибки

После загрузки сверьте контрольные числа: количество строк в SQL-выборке и количество созданных/обновлённых объектов в 1С должны сходиться. Расхождение почти всегда означает дубликаты ключей, потерянные NULL или ошибки преобразования типов.

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

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

Количество строк
Норма

Совпадает с числом обработанных записей

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

Часть строк пропущена без записи в журнале

Значения NULL
Норма

NULL преобразованы в пустые значения явно

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

Ошибка приведения типов на отдельных строках

Даты и числа
Норма

Форматы соответствуют ожиданиям, суммы сходятся

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

Смещение дат, потеря копеек, перепутанные разряды

Дубликаты
Норма

Поиск по ключу не создаёт повторных объектов

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

В справочнике появились задвоенные элементы

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

FAQ

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

Да. Через ADO используется объект ADODB.Command с типом команды «хранимая процедура» и параметрами. Это предпочтительный способ при работе с чужими базами: владелец базы публикует процедуру с фиксированным набором возвращаемых полей, а вызывающая сторона не зависит от структуры таблиц.

Что делать, если COMОбъект("ADODB.Connection") выдаёт ошибку?

Проверьте три вещи: установлен ли OLE DB/ODBC-драйвер нужной разрядности на том компьютере, где выполняется код (сервер 1С, а не клиент); не запрещено ли создание COM-объектов настройками безопасности; корректна ли строка подключения — её удобно проверить через .udl-файл.

Как получить данные из PostgreSQL или MySQL?

Принцип тот же: устанавливается ODBC-драйвер соответствующей СУБД, а в строке подключения указывается Driver вместо Provider. Далее работа с Recordset ничем не отличается от сценария с MS SQL.

Как организовать регулярный обмен по расписанию?

Создайте регламентное задание в 1С, которое вызывает процедуру загрузки на сервере. Учтите, что регламентные задания в файловой базе работают только при запущенном сеансе; в клиент-серверном варианте они выполняются сервером автономно.

Безопасно ли давать 1С прямой доступ к SQL-базе?

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

Что выбрать для одноразовой миграции данных?

Для разовой миграции проще всего файловый обмен: выгрузка из SQL в CSV или XML и загрузка типовой обработкой. Это исключает риски прямого подключения и позволяет проверить данные до записи в 1С.

Итог

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

Для разовых выгрузок используйте ADO с аккуратным закрытием соединений, для постоянного доступа — внешние источники данных, для обмена между сетями — HTTP-сервис. Всегда работайте под учётной записью только на чтение, проверяйте контрольные количества и загружайте данные порциями с поиском объектов по внешнему ключу.