Разработка и Конфигурация · 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 или файловый обмен.
Сравнение способов получения данных
Прямой запрос из кода 1С. Подходит для разовых и регламентных выгрузок. Требует установленного OLE DB/ODBC-драйвера и доступа по сети к SQL-серверу.
Таблицы SQL видны в 1С как объекты метаданных, можно строить отчёты СКД. Подходит для постоянного доступа к справочникам и регистрам. Требователен к настройке.
Промежуточный сервис отдаёт данные в JSON. Безопаснее, работает через интернет. Требует разработки сервиса на стороне SQL.
Выгрузка из SQL в CSV/XML с последующей загрузкой в 1С. Просто и надёжно, но без оперативности.
Важно учитывать и разрядность платформы 1С: COM-подключение ADO создаётся в контексте того процесса, где выполняется код. Если код выполняется на сервере 1С, драйвер должен быть установлен именно на сервере, а не на клиентской машине.
Прямое подключение через ADO из кода 1С
ADO (ActiveX Data Objects) — самый распространённый способ выполнить произвольный SQL-запрос из 1С. Подключение создаётся через COM-объект ADODB.Connection, результат возвращается в виде набора записей ADODB.Recordset, который обходится в цикле.
Соединение = Новый 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.
Соединение = Новый HTTPСоединение("api.example.local", 443,,,,, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/goods?date=2026-01-01");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен);
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
Данные = ПрочитатьJSON(Чтение);
КонецЕсли;Преимущество подхода — контроль: сервис отдаёт только разрешённые данные, логирует обращения и защищает базу от произвольных запросов. Недостаток — нужна разработка и поддержка самого сервиса, а также токенная или иная аутентификация.
Загрузка полученных данных в объекты 1С
Получение набора записей — только половина задачи. Дальше данные нужно корректно записать в 1С: сопоставить с существующими объектами, создать новые, не задвоить справочники. Базовое правило — искать объект по ключевому реквизиту (коду, артикулу, внешнему идентификатору), а не по наименованию, которое может отличаться регистром и пробелами.
- 1Получите набор записей из SQL одним из способов выше
- 2Проверьте структуру: количество полей, типы, наличие NULL
- 3Для каждой строки найдите объект 1С по внешнему идентификатору или коду
- 4При отсутствии — создайте новый объект и заполните реквизиты
- 5Записывайте порциями с фиксацией транзакции, а не всё одним пакетом
- 6Зафиксируйте количество обработанных и пропущенных строк в журнале
Для больших объёмов используйте загрузку в таблицу значений с последующей пакетной обработкой — так проще контролировать ошибки и повторять неудачные строки. Запись десятков тысяч объектов по одному в цикле без порционной фиксации может занять часы и заблокировать работу пользователей.
Проверка результата и типичные ошибки
После загрузки сверьте контрольные числа: количество строк в SQL-выборке и количество созданных/обновлённых объектов в 1С должны сходиться. Расхождение почти всегда означает дубликаты ключей, потерянные NULL или ошибки преобразования типов.
Как проверить результат
Совпадает с числом обработанных записей
Часть строк пропущена без записи в журнале
NULL преобразованы в пустые значения явно
Ошибка приведения типов на отдельных строках
Форматы соответствуют ожиданиям, суммы сходятся
Смещение дат, потеря копеек, перепутанные разряды
Поиск по ключу не создаёт повторных объектов
В справочнике появились задвоенные элементы
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-сервис. Всегда работайте под учётной записью только на чтение, проверяйте контрольные количества и загружайте данные порциями с поиском объектов по внешнему ключу.