Подключение 1С к SQL-серверу: от выбора СУБД до первых запросов

· 10 мин

Содержание

Чтобы подключить 1С к SQL, нужны три вещи: СУБД (MS SQL Server или PostgreSQL), сервер 1С:Предприятия и информационная база, созданная «На сервере 1С:Предприятия». Клиент 1С никогда не ходит в SQL напрямую: он подключается к кластеру серверов 1С, а уже тот работает с базой данных. Поэтому в окне добавления базы вы указываете и кластер 1С, и сервер СУБД, и логин к ней.

Второй сценарий — когда базе 1С нужно читать данные из чужой SQL-базы: складской программы, сайта, CRM. Для этого в конфигурации есть объект «Внешние источники данных» и запасной вариант через ADO. Оба пути разобраны ниже, с командами и типичными ошибками.

Какую СУБД выбрать для клиент-серверной 1С

Платформа 1С 8.3 официально работает с четырьмя СУБД: Microsoft SQL Server, PostgreSQL, IBM Db2 и Oracle Database. На практике в малом и среднем бизнесе выбирают из первых двух.

СУБДКогда подходитНа что смотреть
Microsoft SQL ServerИнфраструктура на Windows, есть админ с опытом MS SQLЛицензии на сервер и клиентов; редакция Express ограничена по размеру базы и памяти
PostgreSQLLinux или Windows, нужно сэкономить на лицензиях СУБДНужна сборка с патчами для 1С (от фирмы 1С или Postgres Pro), обычная из репозитория не подойдёт
IBM Db2, OracleКрупные компании, где эти СУБД уже стандартРедкие специалисты, мало практики именно с 1С

Если базы небольшие и пользователей 5–15, честно оцените, нужен ли SQL вообще. Файловый вариант проще в обслуживании. Переход на SQL оправдан, когда пользователей становится больше, база растёт за десятки гигабайт или появляются регулярные блокировки.

Что учесть до выбора:

  • 🖥️ Сервер 1С и СУБД можно поставить на одну машину. Для 20–50 пользователей это нормальная схема.
  • 🔑 Лицензия на сервер 1С приобретается отдельно от клиентских лицензий, заложите её в бюджет перехода.
  • 🧩 Версия СУБД должна поддерживаться вашей версией платформы. Список совместимых версий публикуется в требованиях к платформе — сверьтесь с ним до установки.

Установка СУБД и клиентских компонентов

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

MS SQL Server

  1. Установите SQL Server с компонентом Database Engine.
  2. На шаге настройки сортировки выберите Cyrillic_General_CI_AS. С другой сортировкой 1С создаст базу, но возможны проблемы с упорядочиванием и поиском.
  3. Включите смешанную проверку подлинности (SQL Server + Windows), задайте пароль sa.
  4. Откройте SQL Server Configuration Manager → Сетевая конфигурация SQL Server → Протоколы и включите TCP/IP. Перезапустите службу SQL Server.
  5. Если сервер 1С стоит на другой машине, откройте на брандмауэре порт 1433.

Для доступа к MS SQL сервер 1С использует клиентскую библиотеку Microsoft: в старых установках это SQL Server Native Client, в новых платформах — Microsoft OLE DB Driver for SQL Server. Если сервер 1С и SQL на разных машинах, драйвер нужен именно на машине сервера 1С.

PostgreSQL

  1. Установите сборку PostgreSQL для 1С подходящей версии.
  2. В postgresql.conf проверьте listen_addresses: для доступа по сети нужно '*' или конкретный адрес.
  3. В pg_hba.conf добавьте строку для адреса сервера 1С, например:
host    all    all    192.168.1.20/32    scram-sha-256
  1. Перезапустите службу PostgreSQL и откройте порт 5432.

Отдельный ODBC-драйвер для работы самой 1С с PostgreSQL ставить не нужно: сервер 1С подключается к нему своими средствами.

Сервер 1С:Предприятия

Ставится из дистрибутива технологической платформы, компонент «Сервер 1С:Предприятия». Служба по умолчанию слушает порты 1540 (агент), 1541 (менеджер кластера) и диапазон 1560–1591 (рабочие процессы). Их тоже нужно открыть на брандмауэре, если клиенты ходят по сети.

Подключение информационной базы к SQL в окне запуска 1С

Базу на SQL создают прямо из окна запуска 1С — заходить в Management Studio или pgAdmin не обязательно.

  1. Запустите 1С, нажмите Добавить → Создание новой информационной базы.
  2. Выберите пустую базу или базу из шаблона, нажмите Далее.
  3. Задайте имя для списка и вариант расположения На сервере 1С:Предприятия.
  4. Заполните параметры подключения:
ПолеЧто вписать
Кластер серверов 1С:ПредприятияИмя или IP машины с сервером 1С, например srv1c
Имя информационной базы в кластереЛатиницей без пробелов: buh_main
Тип СУБДMS SQL Server или PostgreSQL
Сервер баз данныхИмя сервера СУБД; для именованного экземпляра MS SQL — srvsql\SQL2019
Имя базы данныхИмя базы в самой СУБД, удобно совпадает с именем в кластере
Пользователь и пароль базы данныхЛогин СУБД, от которого сервер 1С будет работать с базой
Смещение датДля MS SQL — 2000
Создать базу данных в случае ее отсутствияОтметить, если базы в СУБД ещё нет
  1. Нажмите Далее, выберите вариант аутентификации и язык, Готово.

Флажок блокировки регламентных заданий включайте для копий и тестовых баз. Иначе копия начнёт, например, загружать курсы валют или отправлять обмены параллельно с рабочей базой.

Смещение дат 2000 для MS SQL выбирают, потому что тип даты в SQL Server не хранит годы раньше 1753, а в 1С пустая дата — 01.01.0001. Смещение выставляется один раз при создании, менять его у живой базы нельзя.

Перенос существующей файловой базы на SQL

  1. Откройте файловую базу в Конфигураторе: Администрирование → Выгрузить информационную базу. Сохраните файл .dt.
  2. Создайте пустую серверную базу по шагам выше.
  3. Откройте её в Конфигураторе: Администрирование → Загрузить информационную базу, укажите .dt.
  4. Проверьте, что пользователи видят базу, и обновите им список баз.

Выгрузку делайте, когда в файловой базе никто не работает , и сохраните копию каталога базы до начала переноса. Загрузка .dt полностью заменяет данные в целевой базе.

Запросы к SQL из 1С: язык запросов и внешние источники

Здесь чаще всего путаница. Язык запросов 1С похож на SQL, но это не SQL. Платформа сама переводит его в запрос к нужной СУБД. Поэтому одна и та же конфигурация работает и на MS SQL, и на PostgreSQL без переделок.

Пример запроса на языке 1С:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|	Номенклатура.Ссылка КАК Товар,
|	Номенклатура.Артикул КАК Артикул
|ИЗ
|	Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|	НЕ Номенклатура.ПометкаУдаления
|	И Номенклатура.Артикул ПОДОБНО &Шаблон";
Запрос.УстановитьПараметр("Шаблон", "АБ%");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
	Сообщить(Выборка.Товар);
КонецЦикла;

В самой SQL-базе таблицы называются не «Номенклатура», а вида _Reference25, поля — _Fld1234. Соответствие покажет функция ПолучитьСтруктуруХраненияБазыДанных(). Писать в эти таблицы напрямую нельзя: фирма 1С такой доступ не поддерживает, а платформа при реструктуризации пересоздаёт таблицы.

Чтение чужой SQL-базы через «Внешние источники данных»

Если нужно получить данные из сторонней SQL-базы, в Конфигураторе добавьте объект Внешние источники данных:

  1. В дереве метаданных: Общие → Внешние источники данных → Добавить.
  2. Нажмите Загрузить, задайте строку соединения ODBC и выберите таблицы.
  3. Платформа создаст описание таблиц, к которым можно обращаться в запросах как ВнешнийИсточникДанных.Склад.Таблица.Остатки.

На стороне машины, где выполняется подключение (сервер 1С в клиент-серверном варианте), должен стоять ODBC-драйвер нужной СУБД.

Пример строки соединения для MS SQL через ODBC:

Driver={ODBC Driver 17 for SQL Server};Server=srvsql;Database=Warehouse;Uid=reader;Pwd=***;

Быстрый вариант через ADO (только Windows)

Для разовой выгрузки удобнее ADO через COM, без изменения конфигурации:

Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.Open("Provider=MSOLEDBSQL;Server=srvsql;Database=Warehouse;Uid=reader;Pwd=***;");
Набор = Соединение.Execute("SELECT Code, Qty FROM dbo.Stock WHERE Qty > 0");
Пока Не Набор.EOF Цикл
	Сообщить("" + Набор.Fields("Code").Value + ": " + Набор.Fields("Qty").Value);
	Набор.MoveNext();
КонецЦикла;
Соединение.Close();

Код выполняется там, где запущен: на клиенте или на сервере 1С. Драйвер (провайдер) должен стоять именно на этой машине. На Linux-сервере 1С COM недоступен — используйте внешние источники данных.

Как ускорить работу 1С на SQL-сервере

Медленная база на SQL почти всегда упирается не в «железо», а в обслуживание СУБД и в код запросов.

На стороне СУБД:

  • 🔧 MS SQL: план обслуживания с перестроением индексов и обновлением статистики, раз в сутки ночью. Ограничьте max server memory, чтобы SQL не отнял память у сервера 1С на той же машине.
  • 🔧 PostgreSQL: регулярный VACUUM ANALYZE, разумные shared_buffers и work_mem под объём памяти.
  • 💾 Модель восстановления Simple для MS SQL, если вы не делаете резервные копии журнала транзакций. Иначе журнал разрастается до размера диска.

На стороне конфигурации:

  • 🚫 Не выполняйте запрос внутри цикла. Один запрос на 1000 строк быстрее 1000 запросов по одной.
  • 📌 Условия по виртуальным таблицам (Остатки, Обороты) пишите в параметрах таблицы, а не в ГДЕ.
  • 🗂️ Используйте временные таблицы и пакетные запросы для сложных выборок.
  • 🔎 У реквизитов, по которым часто ищут и отбирают, включите свойство «Индексировать».

Проблемные запросы находят через технологический журнал и замер производительности в отладчике. Без замера оптимизация превращается в угадывание.

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

Хранимые процедуры и триггеры: где можно, а где нельзя

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

Со сторонней SQL-базой работать через процедуры можно и нужно:

  • 📥 Во внешнем источнике данных есть ветка «Функции» — она описывает хранимые процедуры и функции внешней базы, их вызывают из кода 1С.
  • 🧾 Через ADO процедуру вызывают командой EXEC или объектом ADODB.Command с параметрами.
  • 🔄 Триггеры на стороне внешней базы удобны, чтобы складывать изменения в отдельную таблицу-очередь, а 1С забирает её по регламентному заданию.

Такая схема даёт инкрементальный обмен без полного перечитывания таблиц.

Безопасность связки 1С и SQL

Пароль пользователя СУБД хранится в настройках кластера 1С. Кто получил права администратора кластера, тот фактически получил доступ к базе.

  • 👤 Не используйте sa или postgres для рабочих баз. Создайте отдельный логин: для MS SQL с ролью dbcreator на этапе создания базы, затем db_owner только на свою базу.
  • 🔐 Задайте администратора кластера серверов 1С. Без него любой с консолью кластера видит и меняет параметры баз.
  • 🌐 Порты 1433, 5432 и 1540–1591 открывайте только для нужных адресов, не наружу в интернет.
  • 📖 Для внешних источников данных заведите логин только на чтение, если запись не нужна.
  • 💾 Резервные копии делайте средствами СУБД по расписанию и периодически проверяйте восстановление на тестовом сервере. Выгрузка .dt — дополнение, а не замена.
Перед запуском базы на SQL в работу
Выполнено: 0 / 6

Ошибки подключения 1С к SQL и как их снять

Текст ошибки обычно прямо указывает, на каком звене цепочки «клиент → сервер 1С → СУБД» проблема.

Диагностика: выберите симптом

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

Частые вопросы

Сколько времени занимает перенос базы на SQL?
База на 5–10 ГБ выгружается и загружается обычно за час-два. Основное время уходит на загрузку .dt и подготовку серверов, а не на сами настройки.
Подойдёт ли бесплатная редакция MS SQL Express?
Для небольшой базы и тестов подойдёт. Ограничения по размеру базы и памяти быстро упираются в рост, поэтому для рабочей базы она годится только на старте.
Можно ли поставить сервер 1С и SQL на одну машину?
Да, это частая схема для 20–50 пользователей. Ограничьте память SQL, чтобы рабочим процессам 1С её хватало.
Как вернуть базу из SQL обратно в файловый вариант?
Выгрузите .dt из серверной базы, создайте пустую файловую и загрузите в неё файл через Конфигуратор.
Можно ли смотреть данные 1С в SQL отчётами Power BI или Excel?
Читать таблицы технически можно, но имена таблиц служебные и меняются при реструктуризации. Надёжнее выгружать данные из 1С через OData или регламентную выгрузку.