Переход инфраструктуры предприятия на Linux-серверы ставит перед разработчиками 1С сложную задачу. Привычная для Windows-среды конструкция Новый COMОбъект("ADODB.Connection") в Linux недоступна, так как архитектура COM является проприетарной технологией Microsoft. В данной статье мы разберем, какие архитектурные подходы позволяют эффективно взаимодействовать с внешними СУБД в Linux-среде.
Самым надежным и архитектурно правильным решением является вынос логики доступа к данным во внешний микросервис. Вместо того чтобы пытаться реализовать прямое подключение внутри 1С, мы создаем «прокладку», которая принимает запросы от 1С по протоколу HTTP и выполняет их в нужной СУБД.
Для реализации такой прокладки отлично подходят современные языки программирования:
pyodbc или драйверы для конкретных БД (например, psycopg2 для PostgreSQL) обеспечат взаимодействие с сервером баз данных.Преимущества подхода: Разделение ответственности. 1С занимается бизнес-логикой, а сервис — обменом данными. Это исключает падение рабочего процесса 1С при проблемах с сетевым соединением или ошибках драйвера СУБД.
Если в качестве СУБД используется 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). Вы можете хранить эту утилиту в Макете обработки, при необходимости выгружать её во временную папку и запускать.
Многие разработчики, пытаясь повторить функционал COM-объектов, стремятся написать внешнюю компоненту (Native API), которая взаимодействует с unixODBC. Мы настоятельно рекомендуем избегать этого пути по нескольким причинам:
rphost (рабочего сервера 1С).Чтобы выбрать оптимальный способ, проанализируйте ваши требования:
Внешние источники данных. Фирма 1С постоянно улучшает этот механизм, и он является наиболее безопасным с точки зрения обновлений платформы.Помните, что при работе в Linux ключевым фактором успеха является правильная настройка окружения, включая пути к библиотекам и права доступа пользователя usr1cv8 к сетевым ресурсам и временным файлам.