Работа с внешними базами данных — одна из самых востребованных задач при интеграции 1С:Предприятие с другими системами. Получение данных из SQL в позволяет автоматизировать обмен информацией между платформой и сторонними СУБД, такими как Microsoft SQL Server, PostgreSQL, MySQL или Oracle. Эта процедура актуальна для синхронизации каталогов, миграции данных, аналитики и многих других бизнес-задач.

В этой статье мы разберём 5 проверенных способов извлечения данных из SQL в 1С, включая прямые запросы через ADODB.Connection, использование HTTP-Сервисов, COM-объектов, а также современные подходы с применением REST API и ODBC. Каждый метод сопровождается практическими примерами кода, таблицами сравнения и предупреждениями о типичных ошибках. Если вы администратор, разработчик или аналитик, работающий с 1С 8.3, этот материал поможет оптимизировать обмен данными без потери производительности.

Особое внимание уделим нюансам безопасности, ограничениям платформы и способам обработки больших объёмов данных. Все примеры адаптированы под актуальные версии 1С:Предприятие 8.3.20+ и современные СУБД.

1. Прямое подключение к SQL через ADODB.Connection

Наиболее универсальный способ — использование ADODB.Connection (ActiveX Data Objects). Этот метод работает практически с любой SQL-базой, поддерживающей OLE DB или ODBC. Основное преимущество — высокая скорость выполнения запросов и минимальные накладные расходы.

Чтобы подключиться к базе Microsoft SQL Server, достаточно нескольких строк кода на встроенном языке :


// Создаём объект подключения

Подключение = Новый COMОбъект("ADODB.Connection");

// Указываем строку подключения (пример для SQL Server)

СтрокаПодключения = "Provider=SQLOLEDB;Data Source=ИМЯ_СЕРВЕРА;Initial Catalog=ИМЯ_БАЗЫ;User ID=ПОЛЬЗОВАТЕЛЬ;Password=ПАРОЛЬ;";

// Открываем соединение

Подключение.Open(СтрокаПодключения);

// Выполняем запрос

Запрос = Новый COMОбъект("ADODB.Recordset");

Запрос.Open("SELECT * FROM Клиенты WHERE ДатаРегистрации > '2023-01-01'", Подключение);

// Обрабатываем результаты

Пока Не Запрос.EOF Цикл

Сообщить(Запрос.Fields("Наименование").Value);

Запрос.MoveNext();

КонецЦикла;

// Закрываем соединение

Запрос.Close();

Подключение.Close();

Для других СУБД строка подключения будет отличаться. Например, для PostgreSQL через ODBC используйте:

СтрокаПодключения = "Driver={PostgreSQL Unicode};Server=localhost;Port=5432;Database=test_db;Uid=postgres;Pwd=12345;";
⚠️ Внимание: При работе с ADODB.Connection в 1С:Предприятие 8.3 на 64-битных системах может потребоваться включение режима совместимости с 32-битными компонентами. Также убедитесь, что на сервере установлены соответствующие драйверы OLE DB/ODBC для вашей СУБД.
  • 🔹 Плюсы: Высокая скорость, гибкость, поддержка транзакций.
  • 🔸 Минусы: Требует настройки драйверов, возможны проблемы с кодировкой.
  • 🔶 Когда использовать: Для регулярного обмена данными между и SQL-базой в фоновом режиме.

Установить драйвер OLE DB/ODBC для вашей СУБД|Проверить права доступа пользователя SQL|Настроить брандмауэр для порта СУБД|Протестировать строку подключения в внешнем инструменте (например, DBeaver)

-->

2. Использование ODBC для интеграции с 1С

ODBC (Open Database Connectivity) — стандартный интерфейс для работы с базами данных. В его можно использовать через тот же ADODB.Connection или специализированные обработки. Главное преимущество ODBC — кроссплатформенность и поддержка большинства СУБД.

Для настройки ODBC-соединения:

  1. Установите драйвер ODBC для вашей СУБД (например, Microsoft ODBC Driver for SQL Server).
  2. Создайте источник данных в Панель управления → Администрирование → Источники данных ODBC.
  3. В используйте строку подключения с указанием имени источника:
    СтрокаПодключения = "Driver={SQL Server};Server=myServer;Database=myDB;Uid=user;Pwd=password;";
СУБД Драйвер ODBC Пример строки подключения
Microsoft SQL Server SQL Server Native Client Driver={SQL Server};Server=localhost;Database=test;Uid=sa;Pwd=123;
PostgreSQL psqlODBC Driver={PostgreSQL Unicode};Server=localhost;Port=5432;Database=mydb;Uid=postgres;Pwd=123;
MySQL MySQL ODBC 8.0 Driver={MySQL ODBC 8.0 Unicode Driver};Server=localhost;Database=mydb;User=root;Password=123;Option=3;

Для упрощения работы с ODBC в можно использовать обработку "УниверсальныйОбменДанными", которая входит в стандартную поставку платформы. Она позволяет настраивать обмен без написания кода.

⚠️ Внимание: При работе с ODBC в кластерном варианте 1С:Предприятие убедитесь, что драйверы установлены на всех рабочих серверах. В противном случае обмен будет работать нестабильно.

Microsoft SQL Server|PostgreSQL|MySQL|Oracle|Другую-->

3. Обмен данными через HTTP-Сервисы и REST API

Если прямые подключения к SQL-базе невозможны (например, из-за сетевых ограничений), альтернативой станет использование HTTP-Сервисов или REST API. В этом случае отправляет запрос на промежуточный сервер, который взаимодействует с SQL и возвращает данные в формате JSON или XML.

Пример запроса к REST API из :

// Создаём HTTP-соединение

HTTPСоединение = Новый HTTPСоединение("api.example.com", 80, "", "");

HTTPЗапрос = Новый HTTPЗапрос("/clients?date=2023-01-01");

// Отправляем GET-запрос

Ответ = HTTPСоединение.Получить(HTTPЗапрос);

// Обрабатываем JSON-ответ

Данные = Новый ЧтениеJSON;

Данные.УстановитьСтроку(Ответ.ПолучитьТекст());

Результат = Данные.Прочитать();

// Выводим результаты

Для Каждого Клиент Из Результат.Клиенты Цикл

Сообщить(Клиент.Наименование);

КонецЦикла;

  • 📌 Преимущества:
    • ✅ Нет необходимости устанавливать драйверы на сервере .
    • ✅ Безопасность: данные передаются по HTTPS.
    • ✅ Гибкость: можно использовать любую СУБД, к которой есть API.
  • 🚫 Недостатки:
    • ❌ Дополнительная нагрузка на промежуточный сервер.
    • ❌ Задержки при большом объёме данных.

Для ускорения обмена рекомендуется:

  • 🔹 Использовать пагинацию (?limit=100&offset=0).
  • 🔹 Кэшировать часто запрашиваемые данные.
  • 🔹 Применять сжатие (gzip) для уменьшения трафика.
💡

Если ваш REST API поддерживает WebHooks, настройте уведомления об изменениях в SQL-базе. Это позволит получать данные только при их обновлении, а не опрашивать сервер постоянно.

4. Работа с COM-объектами для специфических задач

Для некоторых СУБД (например, Oracle или IBM DB2) может потребоваться использование специализированных COM-объектов. Этот метод подходит для нестандартных задач, когда стандартные подходы не работают.

Пример подключения к Oracle через OracleObject:

// Создаём объект Oracle

OracleConn = Новый COMОбъект("OracleInProcServer.XOraSession");

// Подключаемся к базе

OracleConn.UserName = "scott";

OracleConn.Password = "tiger";

OracleConn.Connect("DB_Server");

// Выполняем запрос

OracleRS = OracleConn.CreateDynaset("SELECT * FROM employees WHERE salary > 5000", 0);

// Обрабатываем результаты

Пока OracleRS.EOF = Ложь Цикл

Сообщить(OracleRS.Fields("ename").Value);

OracleRS.MoveNext();

КонецЦикла;

Основные нюансы работы с COM-объектами:

  • 🔧 Требуется регистрация библиотеки на сервере (regsvr32).
  • 🔧 Возможны конфликты версий библиотек.
  • 🔧 Не все объекты поддерживают 64-битную архитектуру.
⚠️ Внимание: Использование COM-объектов может привести к утечкам памяти в , если не освобождать ресурсы явно. Всегда вызывайте методы Close() или Disconnect() после работы.
Как проверить доступность COM-объекта в 1С?

Чтобы убедиться, что COM-объект доступен в вашей системе, выполните в следующий код:

Попытка

Объект = Новый COMОбъект("Имя.Объекта");

Сообщить("Объект доступен!");

Исключение

Сообщить("Ошибка: " + ОписаниеОшибки());

КонецПопытки;

Если объект недоступен, проверьте его регистрацию в реестре Windows (HKEY_CLASSES_ROOT) и права доступа.

5. Автоматизация обмена через внешние обработки и расширения

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

  • 📦 "Универсальный обмен данными" (входит в стандартную поставку ).
  • 📦 "Коннектор SQL" (от сторонних разработчиков).
  • 📦 "ETL-инструменты (например, Talend или Pentaho) для сложных трансформаций.

Пример настройки обмена через стандартную обработку:

  1. Откройте Файл → Открыть → [Каталог 1С]\ext\UnivExch\UnivExch.epf.
  2. Выберите тип источника данных — ODBC или SQL.
  3. Укажите параметры подключения и SQL-запрос.
  4. Настройте правила сопоставления полей.
  5. Запустите обмен в тестовом режиме.
Инструмент Тип лицензии Поддерживаемые СУБД Особенности
Универсальный обмен данными Бесплатно (входит в 1С) Любые (через ODBC) Простой интерфейс, но ограниченная функциональность
Коннектор SQL (Infostart) Платный SQL Server, PostgreSQL, MySQL Поддержка транзакций, логирование
ETL-Tools (Talend) Бесплатно/Платный Все популярные СУБД Сложная настройка, но высокая гибкость

Для крупных проектов рекомендуется использовать ETL-инструменты, так как они позволяют:

  • 🔹 Настраивать сложные трансформации данных.
  • 🔹 Автоматизировать обмен по расписанию.
  • 🔹 Вести лог ошибок и повторять неудачные операции.
💡

Готовые обработки ускоряют настройку обмена, но для нестандартных задач (например, обработки BLOB-полей или работы с NoSQL) может потребоваться кастомная разработка.

6. Обработка больших объёмов данных: оптимизация и типичные ошибки

При работе с большими наборами данных (десятки тысяч записей) прямые запросы к SQL могут приводить к зависаниям или переполнению памяти. Чтобы избежать проблем, следуйте рекомендациям:

  • 🔸 Используйте пакетную обработку: Разбивайте данные на порции по 100–1000 записей.
  • 🔸 Отключайте ненужные поля: Запрашивайте только те колонки, которые необходимы.
  • 🔸 Применяйте индексы: Убедитесь, что в SQL-базе проиндексированы поля, используемые в WHERE.
  • 🔸 Используйте временные таблицы: Для сложных отчётов предварительно сохраняйте данные во временные таблицы SQL.

Пример оптимизированного запроса:

// Вместо:

Запрос.Open("SELECT * FROM БольшаяТаблица", Подключение);

// Лучше:

Запрос.Open("SELECT TOP 1000 Id, Наименование, Дата FROM БольшаяТаблица WHERE Дата > '2023-01-01' ORDER BY Дата", Подключение);

⚠️ Внимание: При обмене данными между и SQL избегайте использования SELECT * — это может привести к загрузке сотен ненужных полей и значительному увеличению времени выполнения. Всегда явно перечисляйте требуемые колонки.

Типичные ошибки и их решения:

Ошибка Причина Решение
Ошибка OLE: 80040e14 Синтаксическая ошибка в SQL-запросе Проверьте запрос в SQL Management Studio
Не удалось создать объект COM Не установлен драйвер или нет прав Установите драйвер и запустите от имени администратора
Данные не обновляются в Отсутствует COMMIT в транзакции Добавьте Подключение.Execute("COMMIT")

7. Безопасность при интеграции 1С и SQL

Обмен данными между системами всегда сопряжён с рисками утечки информации или несанкционированного доступа. Чтобы минимизировать угрозы:

  • 🔐 Используйте отдельного пользователя SQL с минимальными правами (только SELECT, если не требуется запись).
  • 🔐 Шифруйте соединение: Для ODBC настройте SSL, для HTTP — используйте HTTPS.
  • 🔐 Маскируйте чувствительные данные: Не храните пароли в открытом виде в коде . Используйте ХранилищеПараметров или Windows Authentication.
  • 🔐 Ведите логи: Регистрируйте все обращения к SQL-базе (время, пользователь, запрос).

Пример безопасного хранения параметров подключения:

// Сохраняем пароль в хранилище параметров

Хранилище = Новый ХранилищеПараметров("SQL_Connection_Params");

Хранилище.УстановитьПараметр("Password", ШифроватьСтроку("МойПароль123", "СекретныйКлюч"));

// Чтение пароля

ЗашифрованныйПароль = Хранилище.ПолучитьПараметр("Password");

Пароль = РасшифроватьСтроку(ЗашифрованныйПароль, "СекретныйКлюч");

⚠️ Внимание: Никогда не используйте учётные данные администратора SQL-сервера в коде . Создайте отдельного пользователя с правами только на необходимые таблицы и процедуры. Это снизит риск утечки данных даже при компрометации системы .

Для аудита безопасности рекомендуется:

  • 🔹 Настроить SQL Server Audit или аналогичные инструменты для вашей СУБД.
  • 🔹 Регулярно обновлять драйверы ODBC/OLE DB.
  • 🔹 Ограничивать IP-адреса, с которых разрешено подключение к SQL-серверу.

FAQ: Частые вопросы по обмену данными между 1С и SQL

❓ Как ускорить медленные запросы к SQL из 1С?

1. Проверьте наличие индексов на полях, используемых в WHERE и JOIN.

2. Разбивайте большие выборки на пакеты (например, по 1000 записей).

3. Используйте временные таблицы для промежуточных результатов.

4. Если возможно, перенесите логику фильтрации на сторону SQL (вместо того чтобы загружать все данные в и фильтровать их там).

❓ Можно ли подключиться к SQL из 1С без ADODB?

Да, альтернативные способы:

  • 🔹 HTTP-Сервисы (REST API).
  • 🔹 Файловый обмен (экспорт/импорт CSV, XML, JSON).
  • 🔹 COM-объекты для специфических СУБД.
  • 🔹 Внешние утилиты (например, SQLCMD для MS SQL Server).
❓ Почему при подключении к SQL из 1С возникает ошибка "Не удалось создать объект"?

Возможные причины:

  • 🔸 Не установлен драйвер OLE DB или ODBC.
  • 🔸 работает в 64-битном режиме, а драйвер — 32-битный (или наоборот).
  • 🔸 Нет прав на создание COM-объектов (проблема с DCOM).
  • 🔸 Антивирус блокирует доступ к реестру Windows.

Решение: Проверьте битность и драйверов, запустите платформу от имени администратора, временно отключите антивирус.

❓ Как обмениваться данными между 1С и SQL в реальном времени?

Для близкого к реальному времени обмена используйте:

  • 🔹 Триггеры SQL + HTTP-уведомления (webhooks).
  • 🔹 Service Broker (для MS SQL Server).
  • 🔹 RabbitMQ/Kafka как промежуточный брокер сообщений.

Пример архитектуры:

  1. Триггер в SQL при изменении данных отправляет сообщение в очередь RabbitMQ.
  2. подписывается на очередь и обрабатывает изменения.
❓ Какие ограничения есть у обмена данными через ODBC в 1С?

Основные ограничения:

  • 🔸 Максимальная длина строки в некоторых драйверах — 4000 символов.
  • 🔸 Проблемы с кодировкой (например, UTF-8 в Windows-1251).
  • 🔸 Нет поддержки некоторых типов данных (например, JSON в PostgreSQL).
  • 🔸 Замедление при большом количестве одновременных подключений.

Решение: Для сложных типов данных используйте REST API или ETL-инструменты.