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

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

Как подключиться из 1С к базе данных Oracle

Способы подключения 1С к базе данных Oracle: через ADO, OLE DB, внешние источники данных и COM. Настройка клиента, строки подключения, типичные ошибки.

Подключение 1С к базе данных Oracle — распространённая задача интеграции: например, когда учёт ведётся в 1С, а корпоративное хранилище или сторонняя система работают на Oracle. Прямого «родного» механизма подключения в платформе 1С нет, поэтому используются обходные пути: технология ADO через COM-объекты, внешние источники данных, либо промежуточные сервисы.

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

Важно понимать ограничение: COM-подключение (ADO) работает только на Windows-клиенте или Windows-сервере 1С, на котором установлен клиент Oracle (Oracle Client или Instant Client) с провайдером OLE DB либо ODBC-драйвером. Разрядность клиента Oracle должна совпадать с разрядностью процесса 1С: 32-битная платформа требует 32-битный клиент Oracle, 64-битная — 64-битный.

Что понадобится перед подключением

Прежде чем писать код, подготовьте окружение. Без этих компонентов любой способ подключения завершится ошибкой «Провайдер не зарегистрирован» или «Невозможно создать объект».

  • Oracle Client или Instant Client — установлен на компьютере, где выполняется код 1С (клиентская машина или сервер 1С, если код выполняется на сервере).
  • Провайдер доступа — Oracle Provider for OLE DB (OraOLEDB.Oracle), Microsoft OLE DB Provider for Oracle (устаревший) или ODBC-драйвер Oracle.
  • Настроенный TNS-алиас — запись в файле tnsnames.ora либо строка подключения в формате Easy Connect (хост:порт/сервис).
  • Учётные данные — логин и пароль пользователя Oracle с правами на нужные таблицы.
  • Совпадение разрядности — 32/64 бита клиента Oracle и процесса 1С должны совпадать.

Способ 1: подключение через ADO (COM-объект)

Это самый распространённый вариант для толстого клиента и серверного кода на Windows. Используется COM-объект ADODB.Connection, который обращается к Oracle через OLE DB или ODBC.

Пример кода на встроенном языке 1С:

СтрокаПодключения = "Provider=OraOLEDB.Oracle;Data Source=ORCL;User ID=user1;Password=secret;";

Попытка

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

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

Исключение

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

Возврат;

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

НаборЗаписей = Соединение.Execute("SELECT id, name FROM contractors WHERE rownum <= 100");

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

Сообщить(Строка(НаборЗаписей.Fields("id").Value) + " — " + НаборЗаписей.Fields("name").Value);

НаборЗаписей.MoveNext();

КонецЦикла;

НаборЗаписей.Close();

Соединение.Close();

Обратите внимание: в Oracle используется rownum для ограничения выборки, а не TOP, как в MS SQL. Имена полей в результирующем наборе обычно возвращаются в том регистре, в котором они созданы в базе, — учитывайте это при обращении к Fields.

1c
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=host:1521/ORCL;User ID=u;Password=p;";
Соединение.Open();

Варианты строк подключения

Строка подключения зависит от выбранного провайдера и способа адресации базы:

ПровайдерПример строкиОсобенности
OraOLEDB.OracleProvider=OraOLEDB.Oracle;Data Source=ORCL;User ID=u;Password=p;Родной провайдер Oracle, рекомендуемый вариант
ODBCDriver={Oracle in OraClient};Dbq=ORCL;Uid=u;Pwd=p;Работает там, где OLE DB недоступен; имя драйвера зависит от версии клиента
Easy ConnectData Source=host:1521/service_nameНе требует tnsnames.ora, удобно для быстрой настройки

Способ 2: внешние источники данных

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

Порядок настройки: в конфигураторе добавьте объект «Внешний источник данных», укажите тип СУБД и строку подключения, добавьте таблицы из списка доступных объектов схемы Oracle. После публикации конфигурации данные Oracle доступны из запросов 1С с использованием конструкции обращения к внешнему источнику.

Порядок настройки внешнего источника данных
  1. 1
    Установите Oracle Client нужной разрядности на сервер 1С
  2. 2
    В конфигураторе создайте объект «Внешний источник данных»
  3. 3
    Задайте строку подключения и проверьте соединение
  4. 4
    Добавьте нужные таблицы из списка объектов схемы Oracle
  5. 5
    Опубликуйте конфигурацию и проверьте чтение данных запросом

Преимущество подхода — декларативность: не нужно писать COM-код, данные доступны в СКД и динамических списках. Недостатки — требуется управляемое приложение, производительность ниже, чем у прямого ADO, а сложные типы данных Oracle могут не сопоставляться типам 1С.

Способ 3: обмен через промежуточный слой

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

  • Веб-сервисы — на стороне Oracle-инфраструктуры публикуется HTTP/REST-сервис, а 1С обращается к нему через HTTPСоединение. Это самый управляемый и безопасный вариант.
  • Брокеры сообщений и файловый обмен — выгрузка в CSV, XML, JSON с регламентной загрузкой в 1С.
  • Промежуточная база MS SQL или PostgreSQL — данные реплицируются в неё, а 1С подключается уже к ней штатными средствами.

Сравнение способов подключения

ADO через COM

Быстро реализуется, гибкий SQL. Только Windows, зависит от клиента Oracle, код сложно поддерживать.

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

Интеграция с СКД и запросами 1С без COM-кода. Требуется управляемое приложение, ниже производительность.

Веб-сервис

Кроссплатформенно, безопасно, контролируемый контракт обмена. Требует разработки сервиса на стороне Oracle.

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

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

Проверка подключения и отладка

Перед отладкой кода 1С проверьте доступность базы вне 1С: утилитой tnsping ORCL проверьте TNS-алиас, а sqlplus user/pass@ORCL — фактическое соединение. Если sqlplus не подключается, проблема в клиенте Oracle или сети, а не в коде 1С.

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

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

tnsping ORCL
Норма

Возвращает OK с временем отклика

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

TNS-03505: не удаётся разрешить имя — проверяйте tnsnames.ora

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

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

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

Ошибка создания COM-объекта — нет клиента Oracle или неверная разрядность

Выполнение запроса
Норма

Recordset открывается и содержит строки

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

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

Полезный приём: сначала проверьте ту же строку подключения через стандартный Windows-инструмент — создайте файл с расширением .udl, настройте соединение визуально и нажмите «Проверить подключение». Успешный тест там означает, что строка подключения корректна и проблему нужно искать в коде 1С.

Типичные ошибки
01
Несовпадение разрядности: 64-битный сервер 1С и 32-битный клиент Oracle — COM-объект не создаётся, ошибка неочевидна
02
Код выполняется на сервере, а клиент Oracle установлен только на машине разработчика — на сервере подключение падает
03
Использование синтаксиса MS SQL (TOP, ISNULL) в запросах к Oracle — ошибка выполнения
04
Пароль и логин хранятся открытым текстом в общем модуле — риск утечки учётных данных
05
Не закрываются Recordset и Connection — утечка соединений и исчерпание пула на стороне Oracle

Безопасность и ограничения

Никогда не встраивайте пароль от производственной базы Oracle напрямую в код конфигурации. Храните параметры подключения в защищённом хранилище, константах с ограниченным доступом или получайте их из внешних настроек. Учётной записи для интеграции выдавайте минимально необходимые права — для чтения справочников достаточно SELECT на конкретные таблицы или представления.

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

Итог

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

Прямое подключение из 1С к Oracle делается через ADO (COM) или внешние источники данных, оба варианта требуют клиент Oracle той же разрядности, что и процесс 1С. Проверяйте соединение сначала вне 1С (sqlplus, .udl), используйте учётную запись с минимальными правами, а для кроссплатформенных и нагруженных сценариев выбирайте веб-сервисы или файловый обмен.

Частые вопросы

Можно ли подключиться к Oracle из Linux-сервера 1С?

Через COM/ADO — нет, эта технология доступна только на Windows. На Linux используйте веб-сервисы, HTTP-обмен, файловый обмен или промежуточную СУБД, к которой 1С подключается штатно.

Ошибка «Провайдер не зарегистрирован на локальном компьютере» — что делать?

Провайдер OLE DB не установлен или не совпадает разрядность. Установите Oracle Client той же разрядности, что и процесс 1С, и убедитесь, что компонент Oracle Provider for OLE DB отмечен при установке.

Как передать параметры в запрос к Oracle из 1С?

Используйте объект ADODB.Command с коллекцией Parameters вместо подстановки значений в текст запроса. Это защищает от SQL-инъекций и решает проблемы с форматами дат и чисел.

Работает ли подключение в тонком клиенте?

Напрямую COM-объект в тонком клиенте создать можно только на клиентской машине Windows. Обычно код подключения выполняют на сервере 1С (в серверной процедуре), а тонкий клиент лишь вызывает её.

Почему русские символы из Oracle отображаются кракозябрами?

Несовпадение кодировок: параметр NLS_LANG клиента Oracle должен соответствовать кодировке базы. Задайте переменную окружения NLS_LANG (например, RUSSIAN_CIS.CL8MSWIN1251) на машине, где выполняется подключение.

Какой способ выбрать для регулярной синхронизации справочников?

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