Как правильно настроить подключение из 1С к базе данных PostgreSQL через ADO и ODBC

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

При необходимости получить данные из сторонней базы PostgreSQL в среде 1С программисты часто сталкиваются с ошибками вроде «Недопустимый атрибут строки соединения» или «Источник данных не найден и не указан драйвер». Эти ошибки могут запутать, так как они не указывают напрямую на причину, которая может крыться как в коде, так и в системных настройках сервера или клиента. В этой статье мы совместно разберем процесс настройки подключения, проанализируем типичные ошибки и выясним, как обеспечить стабильную связь между 1С и PostgreSQL.

Выясняем причину первой ошибки: выбор провайдера

Разберем ситуацию, когда при попытке соединения возникает исключение «Microsoft OLE DB Provider for SQL Server: Недопустимый атрибут строки соединения». Проанализируем код и выполнение запросов через COM-подключение, которые часто становятся источником этой проблемы:


ConnectString="Provider=SQLOLEDB;Data Source="+Cервер+";DatabaseName="+База+";UID="+Пользователь+";PWD="+Пароль;
Соединение=Новый COMОбъект("ADODB.Connection");
Соединение.Open(ConnectString);

Основная ошибка здесь заключается в параметре Provider=SQLOLEDB. Этот провайдер предназначен исключительно для работы с Microsoft SQL Server. При попытке передать ему специфичные для PostgreSQL параметры (или даже стандартные, но направленные на другой тип СУБД), драйвер выдает ошибку о недопустимом атрибуте. Чтобы успешно подключиться к PostgreSQL через механизм COM-объектов, нам необходимо использовать мост ODBC. Для этого в качестве провайдера следует указывать MSDASQL.

Установка и настройка драйвера ODBC

Перейдем к следующему этапу. Чтобы 1С «увидела» базу PostgreSQL, на компьютере должен быть установлен соответствующий драйвер. Рассмотрим важные моменты, которые часто упускают из виду:

  1. Разрядность (Bitness): Это самый критичный фактор. Если ваш сервер 1С работает в 64-битной версии, то для выполнения кода на стороне сервера (в модулях приложений или фоновых заданиях) вам обязательно нужен 64-битный драйвер PostgreSQL ODBC. Если же вы запускаете код в толстом клиенте или 32-битном тонком клиенте, потребуется 32-битный драйвер. Специалисты рекомендуют устанавливать обе версии драйвера одновременно, чтобы избежать конфликтов в разных режимах работы.
  2. Место установки: Драйвер должен быть установлен именно на той машине, которая инициирует соединение. Если код выполняется «НаСервере», драйвер ставим на сервер 1С. Если «НаКлиенте» — на рабочую станцию пользователя.
  3. Точное имя драйвера: После установки драйвера крайне важно проверить его точное системное имя. Его можно найти в «Администраторе источников данных ODBC» на вкладке «Драйверы». Обычно это PostgreSQL Unicode или PostgreSQL ANSI.

Формируем правильную строку соединения

Рассмотрим несколько вариантов строк подключения, которые зависят от версии установленного драйвера. Мы будем использовать объект ADODB.Connection и провайдер MSDASQL. Обратите внимание на синтаксис:


// Создаем объект соединения
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.Provider = "MSDASQL.1";

// Вариант 1: Использование Unicode драйвера (рекомендуется для корректной работы с кириллицей)
ConnectionString = "Driver={PostgreSQL UNICODE};Server=srv1;Port=5432;Database=b1c;Uid=adm;Pwd=111;";

// Вариант 2: Если база требует SSL соединения
ConnectionString = "Driver={PostgreSQL UNICODE};Server=srv1;Port=5432;Database=b1c;Uid=adm;Pwd=111;sslmode=require;";

Попытка
    Соединение.Open(ConnectionString);
    Сообщить("Соединение успешно установлено!");
Исключение
    Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;

Если вы получаете ошибку «Источник данных не найден», это означает, что текст в фигурных скобках Driver={...} не совпадает с именем драйвера. Проверьте реестр, утилиту odbcad32.exe.

Важные нюансы работы с системными утилитами

На 64-битных операционных системах Windows существуют две версии администратора ODBC, управлять которыми помогает командная строка Windows. Это часто становится причиной путаницы, когда драйвер вроде бы установлен, но 1С его не видит:

Всегда проверяйте наличие драйвера именно в той версии утилиты, которая соответствует разрядности вашего приложения 1С.

Тонкая настройка PostgreSQL для внешних подключений

Даже при идеально написанном коде в 1С, PostgreSQL может отклонить соединение. Разберем, что нужно проверить на стороне сервера базы данных:

  1. Файл pg_hba.conf: Проанализируем настройки доступа. Убедитесь, что в этом файле разрешены подключения с IP-адреса, на котором запущен сервер 1С (или клиент). Запись должна выглядеть примерно так: host all all 192.168.1.0/24 md5 (или scram-sha-256 для новых версий).
  2. Файл postgresql.conf: Проверьте параметр listen_addresses. Если там указано 'localhost', сервер не примет внешние подключения. Для разрешения всех подключений установите listen_addresses = '*'.
  3. Метод аутентификации: Современные версии Postgres (13+) используют scram-sha-256. Старые версии ODBC драйверов могут его не поддерживать. В таком случае стоит либо обновить драйвер, либо временно переключить метод аутентификации пользователя в md5.

Дополнительные параметры сессии

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


ConnectionString = "Driver={PostgreSQL UNICODE};Server=srv1;Database=b1c;Uid=adm;Pwd=111;STMT=set client_encoding to 'UTF8';ReadOnly=0;BoolsAsChar=0;";

Параметр STMT=set client_encoding to 'UTF8'; гарантирует, что строковые данные будут передаваться в кодировке UTF-8, что критично для 1С. Параметр BoolsAsChar=0 помогает драйверу правильно интерпретировать логические типы PostgreSQL (boolean) как значения, понятные для 1С.

Современная альтернатива: Внешние источники данных

Рассмотрим еще один важный момент. Начиная с версии платформы 8.3, 1С предоставляет мощный инструмент — «Внешние источники данных». Вместо того чтобы писать громоздкий код на ADO и вручную управлять COM-объектами, мы можем добавить таблицы PostgreSQL прямо в дерево конфигурации. Это позволяет:

Для настройки внешнего источника данных вам также потребуется установленный ODBC драйвер, но управление соединением платформа возьмет на себя, что значительно упрощает отладку и поддержку кода.

Подведем итог: Для решения проблемы «Недопустимого атрибута» необходимо заменить провайдера на MSDASQL, установить ODBC драйвер соответствующей разрядности и убедиться, что имя драйвера в строке Driver={...} точно соответствует системному. Тщательная проверка настроек сервера PostgreSQL завершит процесс настройки и обеспечит стабильный обмен данными.

← На главную