Интеграция 1С:Предприятие с внешними SQL-базами данных открывает широкие возможности для обмена данными между системами, создания сложных отчётов и автоматизации бизнес-процессов. Однако многие пользователи сталкиваются с трудностями при настройке такого подключения — от выбора правильного драйвера до решения проблем с правами доступа. В этой статье разберём все актуальные способы подключения 1С 8.3 и 1С 8.2 к Microsoft SQL Server, PostgreSQL и MySQL, а также типичные ошибки, которые возникают в процессе.

На практике подключение к SQL из 1С может потребоваться для решения разных задач: от простого импорта данных до организации двусторонней синхронизации с веб-приложениями. Важно понимать, что метод подключения зависит от версии платформы , типа SQL-сервера и даже от операционной системы. Например, для работы с MS SQL в 1С 8.3.20+ доступен встроенный механизм ADODB.Connection, тогда как для PostgreSQL потребуется установка дополнительных драйверов.

📊 Какую СУБД вы используете с 1С?
Microsoft SQL Server
PostgreSQL
MySQL
Oracle
Другую

1. Подготовка к подключению: что нужно проверить до начала настройки

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

Во-первых, проверьте версию платформы 1С. Для работы с внешними SQL-базами рекомендуется использовать 1С:Предприятие 8.3.14+, так как в более ранних версиях могут отсутствовать необходимые библиотеки. Версию можно узнать в меню Справка → О программе.

Во-вторых, убедитесь, что на компьютере установлены необходимые драйверы:

  • 🔹 Для MS SQL Server: ODBC Driver 17 for SQL Server (или новее) от Microsoft
  • 🔹 Для PostgreSQL: psqlODBC или npgsql (в зависимости от метода подключения)
  • 🔹 Для MySQL: MySQL Connector/ODBC или MySQL Connector/Net

Драйверы должны соответствовать разрядности вашей системы (x86 или x64). Если 1С работает в 32-битном режиме, а сервер SQL — в 64-битном, потребуется установить обе версии драйверов.

Также важно настроить сетевой доступ к серверу базы данных. Убедитесь, что:

  • 🔌 Порт SQL-сервера (по умолчанию 1433 для MS SQL, 5432 для PostgreSQL, 3306 для MySQL) открыт в брандмауэре
  • 🔐 Пользователь, от имени которого будет выполняться подключение, имеет достаточные права (минимум SELECT, INSERT, UPDATE)
  • 🌐 Если сервер находится в другой сети, настроен VPN или проброс портов

⚠️ Внимание: Если вы подключаетесь к облачному SQL-серверу (например, Azure SQL или Amazon RDS), проверьте правила безопасности группы сети. Часто по умолчанию доступ разрешен только с определённых IP-адресов.

2. Способы подключения 1С к SQL: сравнение методов

В 1С:Предприятие существует несколько способов работы с внешними SQL-базами. Выбор метода зависит от задачи, версии платформы и типа СУБД. Рассмотрим основные варианты:

Метод подключения Поддерживаемые СУБД Плюсы Минусы
ADODB.Connection MS SQL, MySQL, PostgreSQL (с ODBC) Встроен в платформу, высокая скорость, поддержка транзакций Требует настройки ODBC, ограничения в некоторых версиях 1С
HTTP-Сервисы (REST API) Любая (через промежуточный сервер) Универсальность, работа через интернет Низкая скорость, сложность настройки
Внешние компоненты (NativeAPI) Любая Максимальная гибкость, поддержка специфичных функций СУБД Сложность разработки, риски безопасности
COM-объект (например, SQLNCLI) MS SQL Высокая производительность, поддержка новых функций MS SQL Только для Windows, сложности с 64-битными системами

Наиболее универсальным и рекомендуемым способом является использование ADODB.Connection через ODBC. Этот метод поддерживается большинством версий 1С и позволяет работать с разными типами SQL-серверов. Однако для PostgreSQL и MySQL может потребоваться дополнительная настройка драйверов.

Если вам нужна максимальная производительность при работе с MS SQL Server, рассмотрите вариант с COM-объектом SQLNCLI. Этот метод позволяет использовать native-клиент Microsoft, что ускоряет выполнение запросов. Однако он доступен только на платформе Windows и требует регистрации библиотеки в системе.

💡

Для большинства задач оптимальным выбором будет ADODB.Connection через ODBC — этот метод поддерживается "из коробки" в 1С 8.3 и покрывает 90% сценариев интеграции.

3. Пошаговая инструкция: подключение к MS SQL Server

Рассмотрим самый распространённый случай — подключение 1С:Предприятие 8.3 к Microsoft SQL Server с использованием ADODB.Connection. Этот метод работает как для локальных, так и для удалённых серверов.

Шаг 1. Настройка ODBC-соединения

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

  • 📌 Нажмите Добавить и выберите драйвер ODBC Driver 17 for SQL Server
  • 📌 Введите имя источника данных (например, MySQLServer)
  • 📌 Укажите имя или IP-адрес сервера (например, 192.168.1.100\SQLEXPRESS)
  • 📌 Выберите метод аутентификации (With Windows NT authentication или With SQL Server authentication)
  • 📌 Укажите базу данных по умолчанию (опционально)
  • 📌 Нажмите Test Data Source, чтобы проверить соединение

Шаг 2. Код подключения в 1С

В модуле 1С (например, в обработке или общем модуле) используйте следующий код:

Подключение = Новый COMОбъект("ADODB.Connection");

СтрокаПодключения = "Driver={ODBC Driver 17 for SQL Server};"

+ "Server=192.168.1.100\SQLEXPRESS;"

+ "Database=MyDatabase;"

+ "UID=myUser;"

+ "PWD=myPassword;";

Подключение.ConnectionString = СтрокаПодключения;

Подключение.Open();

// Пример выполнения запроса

Запрос = "SELECT TOP 10 * FROM Customers";

Результат = Подключение.Execute(Запрос);

Пока Результат.EOF = Ложь Цикл

Сообщить(Результат.Fields("CustomerName").Value);

Результат.MoveNext();

КонецЦикла;

Подключение.Close();

Шаг 3. Обработка ошибок

Всегда добавляйте блок обработки исключений, чтобы избежать аварийного завершения работы:

Попытка

Подключение.Open();

Исключение

Сообщить("Ошибка подключения: " + ОписаниеОшибки());

Возврат Ложь;

КонецПопытки;

⚠️ Внимание: Если вы используете SQL Server Express, убедитесь, что в настройках сервера включён протокол TCP/IP и запущена служба SQL Server Browser. Без этого подключение по сети будет невозможно.

☑️ Проверка перед подключением к MS SQL

Выполнено: 0 / 5

4. Подключение к PostgreSQL: особенности и нюансы

Работа с PostgreSQL из 1С имеет свои особенности, так как эта СУБД не поддерживается "из коробки" через стандартные механизмы. Вам потребуется установить дополнительные драйверы и возможно использовать промежуточные решения.

Способ 1: Через ODBC (рекомендуемый)

Для этого метода необходимо:

  1. Скачать и установить драйвер psqlODBC с официального сайта PostgreSQL
  2. Настроить источник данных ODBC (аналогично MS SQL, но с выбором драйвера PostgreSQL Unicode)
  3. В строке подключения указать дополнительные параметры:
    Driver={PostgreSQL Unicode};
    

    Server=192.168.1.101;

    Port=5432;

    Database=my_db;

    Uid=postgres;

    Pwd=password;

Способ 2: Через HTTP-Сервис (REST API)

Если ODBC по какой-то причине не подходит, можно организовать обмен через промежуточный сервер. Например:

  1. На сервере с PostgreSQL развернуть простое API на Python (Flask) или Node.js
  2. В 1С отправлять HTTP-запросы к этому API с помощью HTTPСоединение или HTTPЗапрос
  3. Обрабатывать ответы в формате JSON

Пример кода для HTTP-запроса:

HTTP = Новый HTTPСоединение("api.my-server.ru", 80);

Запрос = Новый HTTPЗапрос("/get_customers");

Ответ = HTTP.Получить(Запрос);

Данные = Новый ЧтениеJSON;

Данные.УстановитьСтроку(Ответ.ПолучитьТекст());

Результат = Данные.Прочитать();

⚠️ Внимание: При работе с PostgreSQL через ODBC могут возникать проблемы с кодировкой. Убедитесь, что в настройках источника данных указана кодировка UTF-8, а в строке подключения добавлен параметр ClientEncoding=UTF8.
💡

Если вы часто работаете с PostgreSQL из 1С, рассмотрите возможность использования внешней компоненты PostgreSQLDirect от Devart. Она предоставляет native-интерфейс для работы с этой СУБД без ODBC.

5. Работа с MySQL: простой способ через Connector/Net

Для подключения к MySQL наиболее удобным решением является использование MySQL Connector/Net через COM-объект. Этот метод не требует настройки ODBC и работает стабильно в большинстве версий 1С.

Шаг 1. Установка Connector/Net

Скачайте и установите MySQL Connector/Net с официального сайта MySQL. Во время установки выберите опцию регистрации сборки в GAC (Global Assembly Cache).

Шаг 2. Код подключения в 1С

Используйте следующий код для установки соединения:

Подключение = Новый COMОбъект("MySql.Data.MySqlClient.MySqlConnection");

СтрокаПодключения = "Server=192.168.1.102;"

+ "Database=my_database;"

+ "Uid=my_user;"

+ "Pwd=my_password;"

+ "CharSet=utf8;";

Подключение.ConnectionString = СтрокаПодключения;

Подключение.Open();

// Пример выполнения запроса

Команда = Новый COMОбъект("MySql.Data.MySqlClient.MySqlCommand");

Команда.Connection = Подключение;

Команда.CommandText = "SELECT * FROM products LIMIT 10";

Читатель = Команда.ExecuteReader();

Пока Читатель.Read() Цикл

Сообщить(Читатель("name"));

КонецЦикла;

Шаг 3. Работа с параметризованными запросами

Для безопасности всегда используйте параметризованные запросы вместо конкатенации строк:

Команда.CommandText = "SELECT * FROM orders WHERE customer_id = @customerId";

Параметр = Команда.Parameters.Add("@customerId", MySqlDbType.Int32);

Параметр.Value = 123;

Это защитит вашу базу данных от SQL-инъекций — одной из самых распространённых уязвимостей при работе с внешними СУБД.

⚠️ Внимание: В некоторых версиях 1С 8.2 может возникать ошибка при работе с MySQL Connector/Net из-за конфликта версий .NET Framework. В этом случае попробуйте использовать ODBC-соединение или обновите платформу до 8.3.10+.

6. Типичные ошибки и их решения

При подключении 1С к SQL-базам пользователи часто сталкиваются с типичными ошибками. Рассмотрим наиболее распространённые из них и способы их устранения.

Ошибка 1: "Не удается найти указанный драйвер"

Эта ошибка возникает, когда в строке подключения указан несуществующий драйвер ODBC. Решения:

  • 🔧 Проверьте имя драйвера в Панели управления → Источники данных ODBC
  • 🔧 Убедитесь, что драйвер установлен для той же разрядности, что и 1С
  • 🔧 Для MS SQL попробуйте заменить ODBC Driver 17 на SQL Server Native Client 11.0

Ошибка 2: "Timeout expired" или "Сетевой путь не найден"

Проблемы с сетевым подключением. Проверьте:

  • 🌐 Доступность сервера по IP/имени (команда ping)
  • 🔌 Открыт ли порт SQL-сервера в брандмауэре
  • 🔄 Если используется именованный экземпляр MS SQL, убедитесь, что запущена служба SQL Server Browser

Ошибка 3: "Login failed for user"

Ошибка аутентификации. Возможные причины:

  • 🔑 Неправильный логин/пароль
  • 🔐 Пользователь не имеет прав на подключение к базе
  • 🔄 В настройках SQL-сервера выбран неверный метод аутентификации (например, только Windows Authentication, а вы пытаетесь подключиться по SQL-логinu)

Ошибка 4: "Data type is not supported"

Эта ошибка возникает при попытке чтения неsupported типов данных (например, JSON или GEOMETRY в PostgreSQL). Решения:

  • 📊 Преобразуйте данные на стороне SQL (например, с помощью CAST)
  • 📊 Используйте промежуточную таблицу с поддерживаемыми типами
  • 📊 Обновите драйвер ODBC до последней версии
Что делать если 1С "зависает" при выполнении запроса?

Чаще всего это связано с отсутствием индексов на больших таблицах или неоптимальным запросом. Проверьте план выполнения запроса на стороне SQL-сервера и добавьте необходимые индексы. Также можно ограничить количество возвращаемых строк с помощью TOP или LIMIT.

7. Оптимизация производительности при работе с SQL

Работа с внешними SQL-базами из 1С может быть медленной, если не соблюдать простые правила оптимизации. Вот ключевые рекомендации:

1. Минимизируйте количество данных

  • 📉 Используйте TOP (MS SQL) или LIMIT (PostgreSQL/MySQL) для выборки только необходимых строк
  • 📉 Запрашивайте только нужные столбцы вместо SELECT *

2. Используйте пакетную обработку

Вместо выполнения множества отдельных запросов в цикле:

// Плохо (много отдельных запросов)

Для Каждого Товар Из СписокТоваров Цикл

Запрос = "UPDATE products SET price = " + Товар.Цена + " WHERE id = " + Товар.Ид;

Подключение.Execute(Запрос);

КонецЦикла;

Лучше использовать пакетные обновления:

// Хорошо (один запрос)

Запрос = "UPDATE products SET price = CASE id ";

Для Каждого Товар Из СписокТоваров Цикл

Запрос = Запрос + "WHEN " + Товар.Ид + " THEN " + Товар.Цена + " ";

КонецЦикла;

Запрос = Запрос + "END WHERE id IN (" + СписокИд() + ")";

Подключение.Execute(Запрос);

3. Настройте пул соединений

Если вы часто подключаетесь к базе, используйте пул соединений:

Если Подключение = Неопределено Тогда

Подключение = Новый COMОбъект("ADODB.Connection");

Подключение.ConnectionString = СтрокаПодключения;

Подключение.Open();

КонецЕсли;

4. Используйте транзакции для пакетных операций

Это ускорит выполнение и обеспечит целостность данных:

Подключение.BeginTrans();

Попытка

// Выполнение нескольких запросов

Подключение.Execute("INSERT INTO ......");

Подключение.Execute("UPDATE ......");

Подключение.CommitTrans();

Исключение

Подключение.RollbackTrans();

Сообщить("Ошибка: " + ОписаниеОшибки());

КонецПопытки;

💡

Самая частая причина медленной работы — отсутствие индексов на часто запрашиваемых полях. Всегда анализируйте план выполнения запросов на стороне SQL-сервера.

8. Альтернативные способы интеграции: когда прямое подключение не подходит

В некоторых случаях прямое подключение 1С к SQL-базе может быть невозможно или нецелесообразно. Рассмотрим альтернативные варианты интеграции.

1. Обмен через файлы (CSV, XML, JSON)

Простой и надёжный способ для периодического обмена данными:

  • 📄 1С выгружает данные в файл
  • 📄 Внешняя система загружает файл и обновляет SQL-базу
  • 📄 Можно автоматизировать через Планировщик заданий или cron

2. Использование промежуточной базы 1С

Если нужно синхронизировать данные между 1С и SQL:

  • 🔄 Создайте в 1С регистр сведений или справочник для хранения синхронизируемых данных
  • 🔄 Напишите обработку, которая будет сравнивать данные и обновлять SQL-базу
  • 🔄 Запускайте синхронизацию по расписанию или по событию

3. Веб-сервисы и API

Для работы через интернет или сложной логики обмена:

  • 🌐 Разверните REST API на стороне SQL-сервера
  • 🌐 В 1С используйте HTTPЗапрос для взаимодействия с API
  • 🌐 Можно использовать 1С:Предприятие как сервер OAuth 2.0 для безопасной аутентификации

4. Message Broker (RabbitMQ, Kafka)

Для высоконагруженных систем с большим количеством транзакций:

  • 🐇 1С отправляет сообщения в очередь (RabbitMQ, Apache Kafka)
  • 🐇 Внешний сервис читает сообщения и обновляет SQL-базу
  • 🐇 Гарантирует доставку сообщений даже при сбоях
⚠️ Внимание: При выборе способа интеграции учитывайте требования к актуальности данных. Для оперативного обмена (например, остатки на складе) подойдёт прямое подключение или веб-сервисы. Для отчётности можно использовать файловую выгрузку раз в сутки.
FAQ: Частые вопросы по подключению 1С к SQL

Вопрос 1: Можно ли подключиться к SQL-базе из 1С:Предприятие 8.2?

Ответ: Да, но с ограничениями. В 8.2 нет встроенной поддержки ADODB.Connection для всех типов баз. Для MS SQL можно использовать COM-объект SQLDMO или SQLNCLI, для других СУБД потребуется ODBC.

Вопрос 2: Как подключиться к Oracle Database из 1С?

Ответ: Для работы с Oracle установите Oracle Data Access Components (ODAC) и настройте ODBC-соединение с драйвером Oracle in OraClient. В строке подключения укажите Driver={Oracle in OraClient12Home1}.

Вопрос 3: Почему при подключении к PostgreSQL русские символы отображаются как "???"?

Ответ: Проблема в кодировке. В строке подключения ODBC добавьте параметр ClientEncoding=UTF8, а в настройках источника данных выберите кодировку UTF-8. Также проверьте кодировку на стороне PostgreSQL (SHOW server_encoding;).

Вопрос 4: Как защитить пароль в строке подключения?

Ответ: Не храните пароль в открытом виде в коде. Используйте:

  • 🔐 Хранилище настроек 1С с шифрованием
  • 🔐 Переменные окружения (для серверных решений)
  • 🔐 Внешние конфигурационные файлы с ограниченным доступом

Вопрос 5: Можно ли подключиться к SQL-базе из 1С:УНФ или 1С:ERP?

Ответ: Да, все приведённые методы работают в типовых конфигурациях (УНФ, ERP, Бухгалтерия). Главное — чтобы версия платформы была не ниже 8.3.10. В некоторых случаях может потребоваться отключение безопасного режима.