В процессе разработки на платформе 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=*******
Разберем каждый параметр этой строки:
PostgreSQL Unicode или PostgreSQL ANSI. Рекомендуется использовать Unicode-версию, чтобы избежать проблем с кодировками, особенно если вы работаете с кириллицей.localhost или 127.0.0.1. В противном случае укажите IP-адрес или сетевое имя сервера.5432, но он может быть изменен администратором.Таким образом, основной шаг для решения проблемы — это не выбирать драйвер из списка в 1С, а вписать всю строку целиком, подставив свои параметры.
Если вам необходимо подключаться к 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 для оптимизации производительности. Это включает в себя настройку параметров управления памятью, планировщика запросов и других важных аспектов.