Как подключить 1С к базе данных Oracle: настройка драйверов, устранение проблем с кодировкой и чтение данных

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При попытке интегрировать 1С с базой данных Oracle разработчики часто сталкиваются с целым рядом трудностей. Типичная ситуация: вы пытаетесь настроить Внешний источник данных (ВИД), устанавливаете ODBC-драйвер, но при добавлении пользовательского DSN в администраторе драйверов вместо имен баз данных (TNS service name) отображаются непонятные закорючки (кракозябры). Проанализируем эту ситуацию подробно и разберем по шагам, как правильно организовать подключение, прочитать данные из таблиц и представлений, а также какие архитектурные подходы вообще существуют.

Разберем разницу подходов: ADO (COM-объекты) против Внешних источников данных (ВИД)

Частая ошибка на старте — смешивание инструкций по настройке разных технологий. Рассмотрим подробнее два основных метода получения данных из Oracle в 1С:

  1. ADO (ADODB.Connection) — использует технологию COM-объектов. Этот способ хорошо известен многим разработчикам, но у него есть серьезный недостаток: COM-объекты работают только на серверах под управлением Windows. Если ваш сервер 1С работает на Linux (что сегодня встречается всё чаще) или планируется перенос, этот код перестанет функционировать. Кроме того, при использовании ADO вам придется писать SQL-запросы вручную и построчно обходить результаты выборки.
  2. Внешние источники данных (ВИД) — штатный механизм платформы 1С, работающий через стандартный интерфейс ODBC. Для Linux существуют драйверы unixODBC, что делает ВИД полностью кроссплатформенным решением. Огромный плюс ВИД заключается в том, что вы можете работать с таблицами Oracle прямо в языке запросов 1С, связывать их с объектами вашей конфигурации и использовать в системе компоновки данных.

Выясним причину проблем с кодировкой при настройке драйверов. Появление "закорючек" вместо текста связано с неверно настроенной локалью клиента Oracle. В экосистеме Oracle за кодировку отвечает специальная системная переменная — NLS_LANG. Если ее значение (например, AMERICAN_AMERICA.WE8MSWIN1252) не совпадает с кодировкой самой базы данных или операционной системы, текст будет искажаться.

Чтобы решить проблему с кракозябрами в TNS Service Name и в самих данных, необходимо добавить или изменить переменную среды Windows (или параметр в реестре) NLS_LANG, установив корректное значение. Для кириллицы часто используются значения RUSSIAN_RUSSIA.CL8MSWIN1251 или RUSSIAN_RUSSIA.AL32UTF8 (в зависимости от настроек самой БД).

Настроим клиент Oracle и файл tnsnames.ora

Для подключения к Oracle требуется наличие клиента на той машине, где будет выполняться запрос (если это Управляемые формы и тонкий клиент — то на сервере 1С). Разберем по шагам, как это сделать оптимально:

Вам не обязательно устанавливать полновесный клиент Oracle, который весит гигабайты и сложен в настройке. Существует Oracle Instant Client — компактный архив с минимально необходимым набором библиотек. Его достаточно распаковать в нужную директорию.

Далее системе необходимо понимать, где находится файл tnsnames.ora, который описывает параметры подключений (хосты, порты, SID). Создайте системную переменную TNS_ADMIN и укажите в ней путь к папке, в которой лежит ваш файл tnsnames.ora. Драйвер (будь то ODBC для ВИД или OLE DB для ADO) обратится к этой переменной, найдет файл конфигурации сети и успешно установит связь с сервером базы данных.

Посмотрим на пример чтения метаданных: Таблицы и Представления (Views)

После успешной настройки подключения через ADO (или ВИД), перед нами часто встает задача — узнать, какие таблицы вообще есть в базе. Проанализируем, какие системные представления Oracle помогают получить нужную информацию. Если мы работаем через ADO, мы можем выполнить прямой SQL-запрос.

Для получения списка всех доступных таблиц используется запрос:


SELECT table_name 
FROM all_tables

Если вам нужно получить список представлений (Views), логика точно такая же. Вместо таблиц используется системное представление ALL_VIEWS:


SELECT view_name 
FROM all_views

Рассмотрим дополнительные системные таблицы, которые могут оказаться крайне полезными при разработке динамических читалок:

Альтернативный подход: микросервисная архитектура

В современных реалиях (например, при размещении баз в 1C:Fresh или при строгих ограничениях безопасности от системных администраторов) установка ODBC-драйверов и клиента Oracle на сервер 1С может быть запрещена или невозможна. Проанализируем альтернативное решение — использование микросервисов.

Вместо прямого подключения из 1С, вы можете развернуть легкий микросервис на языке программирования Go (Golang). В Go есть библиотеки (например, драйвер go-ora), которые реализуют сетевой протокол Oracle самостоятельно (Pure Go). Это означает, что для такого микросервиса не требуется установка Oracle Client, драйверов ODBC или файла tnsnames.ora.

Схема работы выглядит так: микросервис компилируется в один исполняемый файл и запускается на любом доступном сервере. Он подключается к Oracle напрямую. Для 1С этот микросервис предоставляет простой HTTP REST API. Платформа 1С отправляет обычный HTTP-запрос (GET или POST) с помощью объекта HTTPСоединение и получает данные в удобном формате JSON. Это полностью изолирует 1С от проблем с драйверами сторонних баз данных и делает интеграцию максимально стабильной и переносимой.

← На главную