Как подключить 1С к PostgreSQL через внешний источник данных и исправить ошибку с ODBC-драйвером?

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

В процессе разработки на платформе 1С часто возникает задача вынести хранение больших объемов данных, например, файлов, за пределы основной информационной базы. Это позволяет снизить нагрузку на основную СУБД, уменьшить размер базы и упростить ее администрирование. Одним из популярных решений является использование отдельной базы данных на PostgreSQL. Стандартный механизм платформы 1С для таких задач — «Внешние источники данных». Однако при настройке подключения через ODBC-драйвер можно столкнуться с ошибками, которые не всегда очевидны.

Рассмотрим ситуацию: вы настроили ODBC-драйвер для PostgreSQL, но при попытке создать таблицу во внешнем источнике данных в 1С и выборе драйвера PostgreSQL ANSI или PostgreSQL UNICODE платформа выдает ошибку. Разберем по шагам, как решить эту проблему и успешно настроить соединение.

Причина ошибки и основной способ решения

Наиболее частая причина подобной ошибки заключается в том, что встроенный конструктор строк подключения в 1С не всегда корректно формирует строку для конкретной версии ODBC-драйвера. Вместо того чтобы полагаться на автоматический выбор, гораздо надежнее сформировать строку подключения вручную. Этот подход дает полный контроль над всеми параметрами соединения.

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

Посмотрим на пример работающей строки подключения:


Driver={PostgreSQL Unicode}; Server=localhost; Port=5432; Database=TEST;Uid=postgres; Pwd=*******

Разберем каждый параметр этой строки:

  1. Driver={PostgreSQL Unicode} — это самый важный параметр. Здесь нужно указать точное имя установленного у вас ODBC-драйвера. Чтобы узнать его, откройте «Администратор источников данных ODBC» в вашей системе (обратите внимание на разрядность — 32-бит или 64-бит) и на вкладке «Драйверы» найдите нужный. Скопируйте имя оттуда без ошибок. Часто используются варианты PostgreSQL Unicode или PostgreSQL ANSI. Рекомендуется использовать Unicode-версию, чтобы избежать проблем с кодировками, особенно если вы работаете с кириллицей.
  2. Server=localhost — адрес сервера, на котором развернута СУБД PostgreSQL. Если база находится на том же компьютере, что и клиент 1С, используйте localhost или 127.0.0.1. В противном случае укажите IP-адрес или сетевое имя сервера.
  3. Port=5432 — порт, который прослушивает сервер PostgreSQL. По умолчанию это 5432, но он может быть изменен администратором.
  4. Database=TEST — имя базы данных в PostgreSQL, к которой вы хотите подключиться.
  5. Uid=postgres — имя пользователя (логин) для подключения к базе данных.
  6. Pwd=******* — пароль для указанного пользователя.

Таким образом, основной шаг для решения проблемы — это не выбирать драйвер из списка в 1С, а вписать всю строку целиком, подставив свои параметры.

Альтернативный способ: подключение через COM-объект ADODB

Если вам необходимо подключаться к PostgreSQL не через объект метаданных ВнешнийИсточникДанных, а программно из кода 1С (например, для выполнения произвольных запросов), можно использовать технологию ADO через COM-объект. Этот метод также требует явного указания строки подключения.

Посмотрим на пример кода на 1С:


// Определяем параметры подключения
СтрокаДрайвераБД = "PostgreSQL Unicode(x64)"; // Имя драйвера должно точно соответствовать установленному!
ИмяБазы = "ИмяВашейБазы";
СерверСУБД = "localhost";
Порт = "5432";
Пользователь = "postgres";
Пароль = "ВашПароль";

// Создаем объект подключения
cn = Новый COMОбъект("ADODB.Connection");

// Формируем строку подключения. Важно: имя драйвера заключается в фигурные скобки!
cn.ConnectionString = "DRIVER={" + СтрокаДрайвераБД + "};"
                    + "DATABASE=" + ИмяБазы + ";"
                    + "SERVER="   + СерверСУБД + ";"
                    + "PORT="     + Порт + ";"
                    + "UID="      + Пользователь + ";"
                    + "PWD="      + Пароль + ";";

// Открываем соединение
Попытка
    cn.Open();
    Сообщить("Соединение с PostgreSQL успешно установлено!");
    // Здесь можно выполнять операции с базой данных
    // cn.Execute("...ваш SQL-запрос...");
Исключение
    Сообщить("Не удалось установить соединение! " + ОписаниеОшибки());
КонецПопытки;

// Не забываем закрыть соединение
Если cn.State = 1 Тогда
    cn.Close();
КонецЕсли;

В этом примере мы используем объект ADODB.Connection. Обратите внимание, что синтаксис строки подключения немного отличается: имя драйвера оборачивается в фигурные скобки DRIVER={...}. Этот метод дает большую гибкость для выполнения сложных SQL-запросов напрямую, минуя некоторые ограничения языка запросов 1С при работе с внешними источниками.

Важные моменты и рекомендации

Чтобы избежать будущих проблем и сделать систему более надежной, учтем несколько дополнительных аспектов.

1. Разрядность драйвера и клиента 1С

Это одна из самых частых причин проблем с подключением. Разрядность (32-бит или 64-бит) ODBC-драйвера должна совпадать с разрядностью клиента 1С:Предприятие, который вы используете. Если у вас 64-битный сервер 1С, но разработчики работают под 32-битным клиентом, то на сервере и на рабочих местах разработчиков могут потребоваться драйверы разной разрядности.

2. Настройка кодировки

Для предотвращения проблем с отображением кириллических и других не-латинских символов, рекомендуется явно указывать кодировку клиента в строке подключения. Для этого можно добавить параметр ClientEncoding='UTF8'. Это обеспечит корректный обмен данными между 1С и PostgreSQL.

3. Альтернатива хранению файлов в СУБД: тома на диске

Хотя хранение файлов в PostgreSQL — рабочая схема, стоит рассмотреть более распространенный и часто более эффективный подход: хранение файлов в томах на диске.

Современные версии платформы «1С:Предприятие» предоставляют удобные встроенные механизмы для работы с файлами в томах, что делает этот подход предпочтительным для большинства задач по хранению присоединенных файлов.

4. Оптимизация PostgreSQL для работы с 1С

Если вы планируете использовать PostgreSQL в продуктивной среде, особенно для хранения больших объемов данных, рекомендуется выполнить его специальную настройку. Фирма «1С» публикует официальные рекомендации по настройке конфигурационного файла postgresql.conf для оптимизации производительности. Это включает в себя настройку параметров управления памятью, планировщика запросов и других важных аспектов.

← На главную