При переносе серверной инфраструктуры 1С:Предприятие на операционную систему Linux разработчики часто сталкиваются с неработоспособностью привычных механизмов интеграции. Попытка создать привычный COM-объект с помощью конструкции Новый COMОбъект("ADODB.Connection") завершается ошибкой, так как технология COM (Component Object Model) является проприетарной технологией Microsoft и поддерживается исключительно в среде Windows.
Разберем основные и наиболее надежные способы организации прямого взаимодействия с реляционными СУБД из 1С на платформе Linux, выясним причины типичных ошибок и проанализируем настройку параметров подключения.
Основным платформенным решением для прямой работы с таблицами внешних реляционных баз данных (MS SQL Server, PostgreSQL, MySQL, Oracle) в среде Linux является объект метаданных Внешние источники данных. Платформа 1С взаимодействует с внешними базами через системный менеджер драйверов unixODBC.
Рассмотрим по шагам процесс подготовки среды и конфигурации:
unixodbc, а также специализированный драйвер СУБД (например, msodbcsql для Microsoft SQL Server)./etc/odbcinst.ini. Пользователь ОС, от имени которого запущен процесс сервера 1С (обычно usr1cv8), обязательно должен иметь права на чтение этого файла и библиотек драйвера. Ошибка вида Can't open lib свидетельствует о неверном пути к библиотеке драйвера .so или об отсутствии прав доступа.ВнешнийИсточникДанных, в котором описываются необходимые таблицы и поля.Посмотрим на пример формирования строки соединения без предварительного создания DSN (DSN-less подключение). Прямое указание драйвера и параметров в строке соединения снижает зависимость от локальных конфигурационных файлов пользователя:
СтрокаПодключения = "DRIVER={ODBC Driver 17 for SQL Server};"
+ "SERVER=192.168.1.100,1433;"
+ "DATABASE=ExternalDB;"
+ "UID=db_user;"
+ "PWD=secret_password;"
+ "TrustServerCertificate=yes;"
+ "Connection Timeout=15;";
Разберем программное управление сеансом подключения к внешнему источнику данных из встроенного языка 1С. Для установки параметров и открытия сессии используем методы менеджера источника данных:
ИмяИсточника = "МойВнешнийSQL";
// Разрываем предыдущее соединение при его наличии
ВнешниеИсточникиДанных[ИмяИсточника].РазорватьСоединение();
// Устанавливаем параметры подключения для текущего сеанса
ПараметрыСоединения = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
ПараметрыСоединения.СтрокаСоединения = СтрокаПодключения;
ВнешниеИсточникиДанных[ИмяИсточника].УстановитьПараметрыСоединенияПользователя(ПараметрыСоединения);
ВнешниеИсточникиДанных[ИмяИсточника].УстановитьСоединение();
Проанализируем распространенную ситуацию: первичное подключение к базе данных проходит успешно, однако при повторной попытке подключения процесс rphost или сеанс пользователя зависает. Выделим основные причины такого поведения и способы их устранения:
unixODBC может удерживать неактивные соединения в собственном пуле, что конфликтует с многопоточной моделью сервера 1С. Для решения проблемы отключим пулинг в конфигурационном файле /etc/odbcinst.ini, прописав в секции [ODBC] строчку Pooling = No./etc/odbcinst.ini: параметр Threading = 1 (блокировка драйвера) или Threading = 2 (блокировка на уровне дескриптора соединения).Connection Timeout=15;LoginTimeout=15; прямо в строке соединения.TrustServerCertificate=yes; (или Encrypt=no;) решает проблему подвисания на этапе согласования TLS.Если специфика инфраструктуры или сложность администрирования ODBC не позволяют использовать внешние источники данных, рассмотрим альтернативные варианты интеграции:
HTTPСоединение и HTTPЗапрос. Этот подход полностью изолирует сервер 1С от низкоуровневых драйверов баз данных..so) через метод платформы ПодключитьВнешнююКомпоненту(). Компонента реализует прямой доступ к клиентским библиотекам СУБД и возвращает результат в сеанс 1С.