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

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

1С ADO: что это такое и как использовать подключение к внешним базам данных

1С ADO — что это такое, как работает технология ADODB в 1С: подключение к SQL Server, Access и Excel, строки подключения, типичные ошибки и альтернативы COM.

1С ADO — это способ обращения из встроенного языка 1С к внешним базам данных через технологию Microsoft ActiveX Data Objects (ADO). В коде это выглядит как создание COM-объектов ADODB.Connection и ADODB.Recordset через конструктор Новый COMОбъект(). Технология позволяет напрямую выполнять SQL-запросы к Microsoft SQL Server, Access, Excel, MySQL и другим источникам, для которых существует OLE DB-провайдер или ODBC-драйвер.

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

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

Что такое ADO и как она связана с 1С

ADO (ActiveX Data Objects) — компонентная технология Microsoft для доступа к данным. Она представляет собой надстройку над OLE DB и предоставляет простой объектную модель: подключение, команда, набор записей. Приложение обращается к данным через провайдера — драйвер, который «умеет» общаться с конкретной СУБД или форматом файла.

Платформа 1С:Предприятие умеет создавать COM-объекты через конструкцию Новый COMОбъект("ADODB.Connection"). Это и есть точка входа: 1С выступает клиентом, который через ADO отправляет SQL-запросы внешней базе и читает результаты построчно. Сама платформа при этом ничего не знает о структуре чужой базы — вся логика, включая синтаксис SQL, ложится на разработчика.

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

Какие объекты ADO используются в коде 1С

Работа строится вокруг трёх основных объектов. Первый — ADODB.Connection: хранит строку подключения, открывает и закрывает сеанс, позволяет выполнять команды напрямую методом Execute(). Второй — ADODB.Command: описывает параметризованную команду с текстом запроса и параметрами, что снижает риск SQL-инъекций. Третий — ADODB.Recordset: результат выборки, по которому проходят циклом.

Типичный цикл чтения данных выглядит так: создать соединение, открыть его, выполнить запрос, получить Recordset, перебрать записи через MoveNext() до признака конца EOF, закрыть набор и соединение. Пропуск закрытия объектов — частая причина утечек памяти и зависших сессий на стороне SQL Server.

bsl
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.ConnectionString = "Provider=SQLOLEDB;Data Source=SERVER;Initial Catalog=Shop;User ID=user;Password=pass;";
Соединение.Open();
Набор = Соединение.Execute("SELECT Code, Name FROM Goods");
Пока НЕ Набор.EOF Цикл
    Сообщить(Набор.Fields("Name").Value);
    Набор.MoveNext();
КонецЦикла;
Набор.Close();
Соединение.Close();

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

Строка подключения: из чего состоит и как её собрать

Строка подключения (ConnectionString) — ключевой элемент, в котором чаще всего кроются ошибки. Она состоит из пар «параметр=значение», разделённых точкой с запятой. Минимальный набор: провайдер (Provider), сервер (Data Source), база данных (Initial Catalog) и способ аутентификации.

Для SQL Server с провайдером SQLOLEDB аутентификация бывает двух видов: SQL-аутентификация с явным логином и паролем (User ID=...;Password=...) или Windows-аутентификация (Integrated Security=SSPI). Второй вариант безопаснее — пароль не хранится в коде, но требует, чтобы у учётной записи, под которой работает 1С, были права на целевую базу.

Для файловых источников строка отличается. Для Excel применяется провайдер Microsoft ACE OLEDB с параметром Extended Properties="Excel 12.0;HDR=YES", где HDR=YES означает, что первая строка — заголовки. Для старых форматов и Access используется Jet-провайдер, который существует только в 32-битной версии — это критично при выборе разрядности клиента 1С.

Источник данныхПровайдер / драйверОсобенность
MS SQL ServerSQLOLEDB, MSOLEDBSQLПоддержка Windows- и SQL-аутентификации
Excel (xlsx)Microsoft.ACE.OLEDB.12.0Требуется установленный ACE, разрядность должна совпадать с клиентом 1С
Access (mdb)Microsoft.Jet.OLEDB.4.0Только 32-битная среда
MySQL, PostgreSQLЧерез ODBC (MSDASQL)Нужен предварительно настроенный DSN или строка ODBC-драйвера

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

Прежде чем писать код, проверьте подключение вне 1С. Самый быстрый способ — создать пустой файл с расширением .udl, открыть его, выбрать провайдера, заполнить параметры и нажать «Проверить подключение». Если тест проходит, готовую строку можно скопировать из файла в код 1С — это исключает ошибки в синтаксисе.

Порядок действий
  1. 1
    Определите СУБД источника и установите подходящий OLE DB/ODBC-драйвер той же разрядности, что и клиент 1С
  2. 2
    Проверьте подключение через UDL-файл или тестовый ODBC-источник вне 1С
  3. 3
    Создайте в коде COMОбъект ADODB.Connection и задайте строку подключения
  4. 4
    Откройте соединение, выполните тестовый SELECT с ограничением числа строк
  5. 5
    Переберите Recordset, преобразуйте значения полей к типам 1С
  6. 6
    Закройте Recordset и Connection, обернув работу в Попытка/Исключение с гарантированным закрытием

Обязательно оборачивайте работу с ADO в конструкцию Попытка ... Исключение ... КонецПопытки. Сетевые сбои, отсутствие драйвера и неверные права проявляются как исключения COM, и без обработки пользователь получит непонятную системную ошибку. В блоке исключения фиксируйте текст ошибки и закрывайте объекты, если они были открыты.

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

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

Создание COM-объекта
Норма

Объект создаётся без исключения

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

Ошибка «класс не зарегистрирован» — драйвер не установлен или не совпадает разрядность

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

Метод Open() отрабатывает, состояние соединения — открыто

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

Ошибка входа или тайм-аут — проверьте логин, права и доступность сервера по сети

Чтение данных
Норма

Recordset содержит записи, EOF становится истинным после последней строки

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

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

Типичные ошибки и ограничения технологии

Самая распространённая проблема — несовпадение разрядности. 64-битный клиент 1С не увидит 32-битный драйвер Jet или ACE, и наоборот. Симптом — ошибка «провайдер не зарегистрирован» при физически установленном драйвере. Решение: ставить драйвер нужной разрядности или запускать код на клиенте соответствующей архитектуры.

Типичные ошибки
01
Не закрывают Connection и Recordset — на SQL Server копятся зависшие сессии, со временем упирающиеся в лимит подключений
02
Подставляют пользовательский ввод прямо в текст SQL — получают уязвимость к SQL-инъекциям вместо использования ADODB.Command с параметрами
03
Игнорируют разрядность драйвера — код работает у разработчика и падает у пользователей с другой версией клиента
04
Читают большие таблицы целиком без WHERE и LIMIT — обмен занимает часы и блокирует сеть
05
Хранят пароль открытым текстом в общем модуле — учётные данные утекают вместе с выгрузкой конфигурации

Ещё одно ограничение — производительность. COM-вызовы медленнее нативных механизмов платформы, а построчный перебор Recordset на больших объёмах становится узким местом. Для регулярной загрузки сотен тысяч записей ADO подходит плохо: лучше рассмотреть выгрузку в файл или прямой обмен на уровне СУБД.

Когда ADO оправдан, а когда лучше выбрать альтернативу

ADO остаётся рабочим вариантом для разовых миграций, чтения данных из унаследованных систем и быстрых интеграций в закрытом Windows-контуре, где обе стороны под контролем. Технология проста, не требует доработки второй стороны и даёт прямой доступ к таблицам.

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

Сравнение вариантов

ADO через COM

Подходит для разовых выгрузок и старых систем; ограничения — только Windows, ручное управление соединением, зависимость от драйверов

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

Таблицы внешней СУБД видны как объекты конфигурации; удобно для постоянного доступа, но требует настройки и поддерживает не все СУБД

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

Кроссплатформенно и безопасно, работает через брандмауэры; требует доработки на стороне второй системы

Обмен через файлы

Просто и надёжно для регламентных обменов; не даёт оперативности в реальном времени

Маршрут решения

Как выбрать действие

Нужно один раз перенести данные из старой базы на SQL Server или AccessИспользуйте ADO-обработку с учётной записью только на чтение
Требуется постоянный доступ к таблицам SQL Server из отчётов 1СНастройте внешний источник данных в конфигурации
Вторая система работает на Linux или доступна только через интернетСогласуйте обмен через HTTP-сервисы или файлы
Клиент 1С 64-битный, а драйвер источника существует только в 32 битНе используйте ADO на этом рабочем месте — перенесите выполнение на подходящий клиент или смените механизм обмена

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

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

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

При переносе рабочей базы 1С на новый сервер ADO-интеграции часто «молча» ломаются: на новом сервере забывают установить OLE DB-провайдер. Добавьте в регламент миграции проверку тестового подключения — это занимает несколько минут и избавляет от поиска причины сбоя обмена в рабочее время.
ПЗ
Практическое замечание

Часто задаваемые вопросы

Работает ли ADO из 1С на сервере под Linux?

Нет. ADO — это COM-технология Microsoft и существует только в Windows. На Linux-сервере 1С вызов Новый COMОбъект завершится ошибкой. Для кроссплатформенных сценариев используют HTTP-сервисы, внешние компоненты по технологии Native API или обмен через файлы.

Почему возникает ошибка «провайдер не зарегистрирован», хотя драйвер установлен?

Чаще всего причина в разрядности: 64-битный клиент 1С не видит 32-битные драйверы и наоборот. Проверьте разрядность исполняемого файла 1С и установите соответствующую версию провайдера. Для старых драйверов вроде Jet 64-битной версии не существует вовсе.

Можно ли через ADO изменять данные в базе 1С из внешней программы?

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

Чем отличается SQLOLEDB от MSOLEDBSQL?

SQLOLEDB — старый провайдер, который поставляется с Windows и считается устаревшим. MSOLEDBSQL — современный провайдер Microsoft для SQL Server с поддержкой новых возможностей протокола. Для новых внедрений предпочтительнее MSOLEDBSQL, но его нужно устанавливать отдельно на каждую машину, где выполняется код.

Как защититься от SQL-инъекций при формировании запроса в 1С?

Не подставляйте пользовательский ввод в текст запроса конкатенацией строк. Используйте объект ADODB.Command с коллекцией Parameters: текст команды содержит placeholders, а значения передаются отдельно. Дополнительно ограничьте права учётной записи подключения только чтением нужных таблиц.

Подходит ли ADO для загрузки больших объёмов данных?

Для сотен тысяч и миллионов записей построчный перебор Recordset работает медленно. В таких задачах эффективнее выгрузить данные средствами самой СУБД в файл и загрузить его в 1С, либо организовать обмен на уровне СУБД. ADO разумно применять для выборок ограниченного размера.

Итог

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

1С ADO — это доступ к внешним базам через COM-объекты ADODB, работающий только в Windows и зависящий от установленных драйверов нужной разрядности. Для чтения используйте учётную запись с минимальными правами, проверяйте подключение через UDL-файл до написания кода и всегда закрывайте соединения. Для новых постоянных интеграций предпочтительнее внешние источники данных, HTTP-сервисы и планы обмена.