Как организовать работу с внешними СУБД в 1С при использовании Linux?

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

Переход инфраструктуры предприятия на Linux-серверы ставит перед разработчиками 1С сложную задачу. Привычная для Windows-среды конструкция Новый COMОбъект("ADODB.Connection") в Linux недоступна, так как архитектура COM является проприетарной технологией Microsoft. В данной статье мы разберем, какие архитектурные подходы позволяют эффективно взаимодействовать с внешними СУБД в Linux-среде.

Использование внешних HTTP-сервисов (прокладок)

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

Для реализации такой прокладки отлично подходят современные языки программирования:

  1. Python (с использованием FastAPI или Flask): Позволяет быстро написать REST-сервис. Библиотека pyodbc или драйверы для конкретных БД (например, psycopg2 для PostgreSQL) обеспечат взаимодействие с сервером баз данных.
  2. Golang: Идеальный вариант для создания высокопроизводительных микросервисов. Вы получаете один скомпилированный бинарный файл, который легко деплоить на сервер 1С.

Преимущества подхода: Разделение ответственности. 1С занимается бизнес-логикой, а сервис — обменом данными. Это исключает падение рабочего процесса 1С при проблемах с сетевым соединением или ошибках драйвера СУБД.

Использование REST-интерфейсов для СУБД

Если в качестве СУБД используется PostgreSQL, нет необходимости писать собственный код для взаимодействия. Мы можем воспользоваться готовыми решениями, такими как PostgREST. Этот инструмент автоматически превращает вашу базу данных в RESTful API.

Рассмотрим, как это выглядит в 1С:

Вместо выполнения SQL-запроса через ADODB.Connection, мы используем объект HTTPСоединение и HTTPЗапрос. Мы отправляем JSON-запрос на адрес нашего сервиса, а в ответ получаем данные, которые легко десериализуем через ЧтениеJSON.

Запуск консольных утилит через ЗапуститьСистему

Если задача разовая или не требует высокой нагрузки, мы можем использовать консольные утилиты СУБД напрямую. Например, для PostgreSQL мы используем psql.

Разберем пример реализации через запуск процесса:


Команда = "psql -h host -U user -d dbname -f /path/to/query.sql -o /path/to/result.csv";
ЗапуститьСистему(Команда);
// Далее считываем результат из CSV файла в таблицу значений

Для большей гибкости рекомендуем скомпилировать собственную небольшую утилиту на Go, которая будет принимать параметры командной строки, выполнять запрос к БД и возвращать результат в удобном для 1С формате (например, JSON или CSV). Вы можете хранить эту утилиту в Макете обработки, при необходимости выгружать её во временную папку и запускать.

Почему не стоит использовать «Внешние компоненты» (ВК) для ODBC

Многие разработчики, пытаясь повторить функционал COM-объектов, стремятся написать внешнюю компоненту (Native API), которая взаимодействует с unixODBC. Мы настоятельно рекомендуем избегать этого пути по нескольким причинам:

Итоговые рекомендации по выбору стратегии

Чтобы выбрать оптимальный способ, проанализируйте ваши требования:

Помните, что при работе в Linux ключевым фактором успеха является правильная настройка окружения, включая пути к библиотекам и права доступа пользователя usr1cv8 к сетевым ресурсам и временным файлам.

← На главную