Давайте разберемся, как организовать взаимодействие между платформой «1С:Предприятие», работающей на сервере под управлением Linux, и СУБД Oracle. Эта задача может показаться сложной, но существует несколько проверенных подходов, каждый из которых подходит для разных сценариев. Проанализируем основные из них, чтобы вы могли выбрать наиболее подходящий для ваших целей.
Начнем с самого прямого и рекомендованного платформой «1С:Предприятие» метода. Использование механизма внешних источников данных позволяет работать с таблицами Oracle практически так же, как с собственными объектами конфигурации 1С. Вы сможете обращаться к ним в запросах, использовать в отчетах на СКД и даже в качестве типов реквизитов. Разберем по шагам, как это настроить.
Установка ODBC-драйвера Oracle. Первым делом необходимо установить на Linux-сервер, где работает сервер «1С:Предприятия», официальный ODBC-драйвер от Oracle. Важный момент: разрядность сервера 1С, клиента Oracle и самого ODBC-драйвера должна совпадать (например, все компоненты должны быть 64-битными).
Настройка конфигурационных файлов. Далее нам предстоит настроить системные файлы, которые отвечают за работу ODBC. Как правило, это два основных файла:
odbcinst.ini — в этом файле мы регистрируем установленный драйвер Oracle в системе.odbc.ini — здесь мы описываем сам источник данных (DSN - Data Source Name), указывая имя, драйвер и параметры подключения к базе Oracle.Также убедимся, что файл tnsnames.ora, используемый клиентом Oracle, корректно настроен и содержит описание сетевой службы для подключения к вашей базе данных.
Создание объекта в конфигурации 1С. После успешной настройки на уровне операционной системы, переходим в конфигуратор 1С. Здесь мы создаем новый объект метаданных — Внешний источник данных.
В свойствах этого объекта мы указываем строку подключения. Для ODBC она обычно выглядит просто — достаточно указать имя источника (DSN), которое мы задали в файле odbc.ini. Например:
DSN=MyOracleDB;
После этого платформа 1С подключится к Oracle, и мы сможем выбрать нужные таблицы и представления из схемы базы данных, которые станут доступны в нашей конфигурации.
Если перед нами стоит задача не просто получить доступ к данным, а построить надежную и масштабируемую интеграцию между несколькими системами, то стоит рассмотреть «1С:Шину». Это отдельный продукт класса ESB (Enterprise Service Bus), который выступает посредником в обмене сообщениями.
Рассмотрим подробнее принцип работы:
Асинхронный обмен. В отличие от прямого подключения, системы не обращаются друг к другу напрямую. Они отправляют сообщения в шину. Если система-получатель (например, Oracle) временно недоступна, шина сохранит сообщение и гарантированно доставит его, как только связь восстановится.
Подключение через JDBC. Для взаимодействия с базой данных Oracle «1С:Шина» использует не ODBC, а JDBC-драйверы. Их необходимо добавить на сервер, где развернута шина.
Трансформация данных. Шина позволяет преобразовывать форматы данных «на лету». Например, 1С может отправить сообщение в своем внутреннем формате, а шина преобразует его в структуру, понятную для записи в таблицы Oracle. Вся интеграционная логика выносится из учетных систем, что упрощает их поддержку.
Этот подход идеально подходит для сложных корпоративных ландшафтов, где важна надежность и независимость систем друг от друга.
Этот метод обеспечивает слабую связанность систем и является современным стандартом для интеграции. Идея в том, чтобы системы общались друг с другом через универсальный протокол HTTP, как будто это веб-сайты. Проанализируем два варианта реализации.
Вызов внешнего сервиса из 1С. Мы можем создать на промежуточном сервере сервис-"обертку" (например, на Java, Python или Go), который будет предоставлять API для работы с базой Oracle. Этот сервис будет принимать HTTP-запросы (например, "получить данные о клиенте") и выполнять соответствующие SQL-запросы к Oracle. Из 1С мы будем вызывать этот сервис с помощью встроенных объектов.
Посмотрим на пример кода для отправки GET-запроса из 1С:
// Создаем соединение с сервером, где размещен наш сервис
СерверAPI = "api.myservice.com";
Соединение = Новый HTTPСоединение(СерверAPI, 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());
// Формируем сам запрос
АдресРесурса = "/api/v1/clients?id=123";
Запрос = Новый HTTPЗапрос(АдресРесурса);
// Выполняем запрос и получаем ответ
Ответ = Соединение.Получить(Запрос);
// Анализируем результат
Если Ответ.КодСостояния = 200 Тогда
// Данные успешно получены, обрабатываем тело ответа (например, JSON)
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
Сообщить("Данные из Oracle получены!");
Иначе
Сообщить("Ошибка при вызове сервиса: " + Ответ.КодСостояния);
КонецЕсли;
Для этого мы используем объекты HTTPСоединение и HTTPЗапрос.
Публикация сервиса на стороне 1С. Платформа «1С:Предприятие» сама умеет публиковать HTTP-сервисы. Например, можно использовать стандартный интерфейс OData, который позволяет внешним системам получать доступ к данным 1С по протоколу REST без дополнительного программирования. В этом сценарии система на стороне Oracle будет инициатором обмена.
Это самый низкоуровневый и производительный, но в то же время самый сложный в разработке способ. Мы можем написать собственную библиотеку (внешнюю компоненту) на языке C++, которая будет загружаться процессом сервера 1С.
Выясним ключевые особенности этого подхода для Linux:
Технология Native API. В отличие от Windows, где часто используется технология COM, в Linux внешние компоненты создаются с использованием технологии Native API.
Прямой доступ к библиотекам Oracle. Внутри компоненты мы можем напрямую использовать нативные библиотеки Oracle (например, OCI - Oracle Call Interface), минуя прослойки вроде ODBC. Это дает максимальную производительность и полный контроль над процессом взаимодействия с базой данных.
Высокая сложность. Этот метод требует от разработчика глубоких знаний в системном программировании на C++ и понимания архитектуры Oracle. Однако для высоконагруженных систем, где важна каждая миллисекунда, это может быть оправданным решением.
Наконец, рассмотрим нестандартный, но иногда полезный способ. 1С может запускать любые внешние приложения и скрипты из командной строки с помощью объекта ЗапуститьПриложение(). Мы можем написать небольшой скрипт или утилиту (например, на Go или Python), которая будет подключаться к Oracle, выполнять нужную операцию (выборку или запись данных) и возвращать результат, например, через файл или стандартный поток вывода.
Этот метод хорошо подходит для выполнения простых, узкоспециализированных задач, но для построения полноценной двусторонней интеграции он менее удобен и надежен по сравнению с рассмотренными выше стандартными механизмами платформы.
← К списку