В процессе разработки часто возникают задачи интеграции 1С с внешними базами данных. Зачастую штатный механизм «Внешние источники данных» не подходит из-за динамического изменения структуры таблиц или имен баз, что требует постоянного изменения конфигурации. Рассмотрим, как реализовать прямое подключение к SQL-базе программными средствами.
В среде Windows наиболее эффективным и проверенным способом является использование объекта COMОбъект с библиотекой ADODB.Connection. Этот метод позволяет передавать строку подключения динамически, что решает проблему с меняющимися именами баз.
Рассмотрим пошагово, как организовать такое подключение:
ADODB.Connection.Пример программного кода для реализации соединения:
АДОСоединение = Новый COMОбъект("ADODB.Connection");
Если АДОСоединение.State = 0 Тогда
SRV = "192.168.1.10"; // Адрес сервера
DB = "MyDatabase"; // Имя базы
UID = "user"; // Пользователь
PWD = "password"; // Пароль
PORT = "3306"; // Порт
// Формируем строку подключения (драйвер должен быть установлен в системе)
cstr = "DRIVER={MySQL ODBC 5.3 Unicode Driver};SERVER=" + SRV +
";UID=" + UID + ";PASSWORD=" + PWD +
";DATABASE=" + DB + ";PORT=" + PORT + ";";
Попытка
АДОСоединение.Open(cstr);
Исключение
АДОСоединение = Неопределено;
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Если АДОСоединение <> Неопределено Тогда
ТекстЗапроса = "SELECT ID FROM ITEMS";
Table = АДОСоединение.Execute(ТекстЗапроса);
Пока Table.EOF = 0 Цикл
Сообщить(Table.Fields("ID").Value);
Table.MoveNext();
КонецЦикла;
Table.Close();
КонецЕсли;
Важное примечание: при работе с драйверами убедитесь, что версия драйвера в строке DRIVER={...} в точности соответствует установленной в вашей операционной системе через администратор источников данных ODBC.
Ситуация кардинально меняется, если 1С запущена на сервере под управлением Linux. В этой среде технология COM не поддерживается, поэтому использование ADODB.Connection невозможно.
Если архитектура требует доступа к удаленной базе, а использование стандартных инструментов 1С ограничено, можно рассмотреть следующие подходы:
Если прямое обращение невозможно, создайте промежуточный прокси-сервер. Например, с помощью языка Python и библиотеки pyodbc можно поднять сервис (например, на базе FastAPI), который будет принимать HTTP-запросы от 1С, выполнять SQL-запрос к БД и возвращать результат в формате JSON или XML.
Это решение позволяет:
HTTPСоединение, HTTPЗапрос) для обмена данными.Для продвинутых разработчиков существует возможность написания собственной внешней компоненты (Native API). Это библиотека на языке C++, которая компилируется под Linux в формат .so и предоставляет 1С методы для выполнения SQL-запросов напрямую через библиотеку unixODBC. Это технически сложный, но наиболее производительный путь интеграции внутри процесса 1С.
Даже если имена баз меняются, попробуйте проанализировать возможность программного управления внешними источниками. В объектной модели 1С существует метод УстановитьПараметрыСоединения для объекта ВнешнийИсточникДанных. Создав шаблон подключения, вы можете динамически перенаправлять его на нужную базу данных без внесения правок в конфигуратор, что снимает вопрос о «ручном исправлении продуктовой базы».
Подводя итог, выбор метода зависит от ваших технических ограничений. Если вы работаете на Windows — используйте классический ADODB. Если же в распоряжении Linux — ориентируйтесь на создание микросервисной архитектуры (прокси-сервис) или использование внешних компонент, так как прямое подключение на уровне платформы в этом случае не поддерживается.