Разработка и Конфигурация · 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.
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=host:1521/ORCL;User ID=u;Password=p;";
Соединение.Open();Варианты строк подключения
Строка подключения зависит от выбранного провайдера и способа адресации базы:
| Провайдер | Пример строки | Особенности |
|---|---|---|
| OraOLEDB.Oracle | Provider=OraOLEDB.Oracle;Data Source=ORCL;User ID=u;Password=p; | Родной провайдер Oracle, рекомендуемый вариант |
| ODBC | Driver={Oracle in OraClient};Dbq=ORCL;Uid=u;Pwd=p; | Работает там, где OLE DB недоступен; имя драйвера зависит от версии клиента |
| Easy Connect | Data Source=host:1521/service_name | Не требует tnsnames.ora, удобно для быстрой настройки |
Способ 2: внешние источники данных
Механизм внешних источников данных (ВИД) доступен в управляемом приложении и позволяет описать таблицы Oracle прямо в конфигураторе, а затем работать с ними почти как с обычными таблицами 1С: строить запросы, выводить в отчёты СКД, показывать в формах.
Порядок настройки: в конфигураторе добавьте объект «Внешний источник данных», укажите тип СУБД и строку подключения, добавьте таблицы из списка доступных объектов схемы Oracle. После публикации конфигурации данные Oracle доступны из запросов 1С с использованием конструкции обращения к внешнему источнику.
- 1Установите Oracle Client нужной разрядности на сервер 1С
- 2В конфигураторе создайте объект «Внешний источник данных»
- 3Задайте строку подключения и проверьте соединение
- 4Добавьте нужные таблицы из списка объектов схемы Oracle
- 5Опубликуйте конфигурацию и проверьте чтение данных запросом
Преимущество подхода — декларативность: не нужно писать COM-код, данные доступны в СКД и динамических списках. Недостатки — требуется управляемое приложение, производительность ниже, чем у прямого ADO, а сложные типы данных Oracle могут не сопоставляться типам 1С.
Способ 3: обмен через промежуточный слой
Когда прямое подключение невозможно (сервер 1С на Linux, политики безопасности запрещают прямой доступ к СУБД, высокие требования к надёжности), используют промежуточные механизмы:
- Веб-сервисы — на стороне Oracle-инфраструктуры публикуется HTTP/REST-сервис, а 1С обращается к нему через
HTTPСоединение. Это самый управляемый и безопасный вариант. - Брокеры сообщений и файловый обмен — выгрузка в CSV, XML, JSON с регламентной загрузкой в 1С.
- Промежуточная база MS SQL или PostgreSQL — данные реплицируются в неё, а 1С подключается уже к ней штатными средствами.
Сравнение способов подключения
Быстро реализуется, гибкий SQL. Только Windows, зависит от клиента Oracle, код сложно поддерживать.
Интеграция с СКД и запросами 1С без COM-кода. Требуется управляемое приложение, ниже производительность.
Кроссплатформенно, безопасно, контролируемый контракт обмена. Требует разработки сервиса на стороне Oracle.
Прост и надёжен, работает везде. Не подходит для оперативного доступа к данным в реальном времени.
Проверка подключения и отладка
Перед отладкой кода 1С проверьте доступность базы вне 1С: утилитой tnsping ORCL проверьте TNS-алиас, а sqlplus user/pass@ORCL — фактическое соединение. Если sqlplus не подключается, проблема в клиенте Oracle или сети, а не в коде 1С.
Как проверить результат
Возвращает OK с временем отклика
TNS-03505: не удаётся разрешить имя — проверяйте tnsnames.ora
Объект создан без исключения
Ошибка создания COM-объекта — нет клиента Oracle или неверная разрядность
Recordset открывается и содержит строки
Ошибка провайдера — проверяйте строку подключения и права пользователя
Полезный приём: сначала проверьте ту же строку подключения через стандартный Windows-инструмент — создайте файл с расширением .udl, настройте соединение визуально и нажмите «Проверить подключение». Успешный тест там означает, что строка подключения корректна и проблему нужно искать в коде 1С.
Безопасность и ограничения
Никогда не встраивайте пароль от производственной базы 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.