Перевод 1С на MS SQL Server: от пустой базы данных до первого входа

· 10 мин

Содержание

Базу 1С в SQL добавляют через кластер серверов 1С:Предприятия: в консоли администрирования создают новую информационную базу, указывают тип СУБД MSSQLServer, имя SQL-сервера, имя базы данных и логин SQL. Платформа сама создаёт базу на SQL Server (если стоит флажок «Создать базу данных в случае ее отсутствия») или подключается к пустой базе, которую администратор подготовил заранее. Потом в базу загружают данные из .dt или конфигурацию из .cf.

Способов два, и выбирают их по правам. Если у логина 1С есть право создавать базы, проще отдать всё платформе. Если DBA выдаёт права только на одну базу, её создают вручную в SQL Server Management Studio, а в 1С снимают флажок создания. Ниже порядок для 1С 8.3 на Windows Server 2016 и новее; для SQL Server 2016–2022 действия одинаковые.

1. Готовим SQL Server: протокол, режим входа, логин и пустая база

До 1С на сервере СУБД нужно сделать четыре вещи. Без любой из них подключение не пройдёт.

  1. Включить TCP/IP. В SQL Server Configuration Manager → SQL Server Network Configuration → Protocols for MSSQLSERVER переведите TCP/IP в Enabled и перезапустите службу SQL Server.
  2. Включить смешанную проверку подлинности. В SSMS: свойства сервера → Security → SQL Server and Windows Authentication mode. Без этого SQL-логины не работают, даже если созданы. Тоже нужен перезапуск службы.
  3. Создать отдельный логин для 1С. Не используйте sa: его пароль окажется в настройках кластера, и любой администратор 1С получит полный доступ к серверу СУБД.
  4. Открыть порт. По умолчанию экземпляр слушает TCP 1433. Для именованного экземпляра порт динамический, и клиенту нужна служба SQL Server Browser (UDP 1434) — либо задайте экземпляру статический порт.

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

Вариант А: 1С создаёт базу сама

Логину достаточно серверной роли dbcreator. После создания базы платформа становится её владельцем через этот логин.

CREATE LOGIN usr1c WITH PASSWORD = 'Сложный_Пароль_123', CHECK_POLICY = OFF;
ALTER SERVER ROLE dbcreator ADD MEMBER usr1c;

Вариант Б: базу создаёт администратор СУБД

Так делают, когда файлы данных и журнала должны лежать на конкретных дисках или права на сервер выдают строго.

CREATE DATABASE buh_main COLLATE Cyrillic_General_CI_AS;
ALTER DATABASE buh_main SET RECOVERY SIMPLE;
GO
USE buh_main;
CREATE USER usr1c FOR LOGIN usr1c;
ALTER ROLE db_owner ADD MEMBER usr1c;

Модель восстановления выбирайте сразу. SIMPLE — когда хватает ежедневной полной копии и потеря данных за день допустима. FULL — когда нужно восстановление на любой момент времени, но тогда обязательно регулярное резервное копирование журнала, иначе файл .ldf растёт без остановки.

2. Регистрируем информационную базу в кластере серверов 1С

На сервере 1С должны работать служба агента сервера и кластер. Откройте оснастку «Администрирование серверов 1С Предприятия», раскройте Central 1C:Enterprise 8.3 servers → <сервер> → Кластеры → <кластер>, щёлкните правой кнопкой по ветке Информационные базы и выберите Создать → Информационная база.

Тот же результат даёт окно запуска 1С: Добавить → Создание новой информационной базы → На сервере 1С:Предприятия. Поля почти те же, разница в том, что база сразу попадает в список запуска. Консоль удобнее администратору, который регистрирует базу для всех.

Консоль не открывается или пишет об ошибке компоненты — зарегистрируйте radmin.dll нужной версии платформы командой regsvr32 из каталога bin этой версии (запуск от администратора).

3. Что вписать в параметры подключения к СУБД

Каждое поле формы влияет на работу базы. Ошибки здесь — главная причина того, что база «создалась», а войти в неё нельзя.

ПолеЧто указатьКомментарий
Имяbuh_mainИмя базы в кластере, его вводят пользователи при подключении
Сервер баз данныхSQLSRV01 или SQLSRV01\INST1Для нестандартного порта: SQLSRV01,1450
Тип СУБДMSSQLServer
База данныхbuh_mainИмя базы на SQL Server, может отличаться от имени в кластере
Пользователь / пароль сервера БДusr1c / парольЛогин из первого раздела
Разрешить выдачу лицензий серверомДаЕсли лицензии стоят на сервере 1С
Смещение дат2000Для MS SQL — только так
Создать базу данных в случае ее отсутствияВариант А — да, Б — нет
Установить блокировку регламентных заданийДа — для копийДля рабочей базы — нет

Почему смещение дат 2000

Тип datetime в MS SQL хранит даты начиная с 1753 года. 1С работает и с более ранними датами, в том числе с «пустой» датой 01.01.0001. Смещение 2000 сдвигает все даты при записи и снимает конфликт. Смещение задаётся один раз при создании базы — потом его не поменять без выгрузки в .dt и загрузки в новую базу.

Блокировка регламентных заданий на копиях

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

4. Драйверы на сервере 1С: почему ODBC-источник настраивать не нужно

Частая ошибка — создавать источник данных в «Администраторе источников данных ODBC» Windows и пытаться подключить 1С через него. Платформа так не работает . Рабочие процессы сервера 1С (rphost) обращаются к SQL Server через клиентский провайдер Microsoft — SQL Server Native Client или Microsoft OLE DB Driver for SQL Server, в зависимости от версии платформы.

Отсюда три практических правила:

  • 🖥️ драйвер нужен на машине, где стоит сервер 1С, а не на компьютерах пользователей: клиенты к SQL напрямую не ходят;
  • 🧩 разрядность драйвера должна совпадать с разрядностью сервера 1С — для 64-битного сервера ставьте 64-битный пакет (он содержит и 32-битную часть);
  • 📦 если SQL Server и сервер 1С стоят на одной машине, драйвер обычно уже есть; при раздельной установке его ставят отдельно.

Какой именно провайдер поддерживает ваша версия платформы, смотрите в её системных требованиях. Native Client устарел и в комплект SQL Server 2022 не входит, поэтому на новых серверах его приходится ставить вручную, если платформа требует именно его.

Проверка подключения без 1С через файл .udl

Быстрый приём, который отделяет проблемы SQL от проблем 1С:

  1. На сервере 1С создайте пустой текстовый файл и переименуйте его в test.udl.
  2. Откройте его двойным щелчком — появится окно «Свойства связи с данными».
  3. На вкладке «Поставщик данных» выберите тот же драйвер SQL Server, что использует платформа.
  4. На вкладке «Подключение» введите имя сервера, логин usr1c, пароль и выберите базу.
  5. Нажмите «Проверить подключение».

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

5. Первый запуск и заполнение базы

После регистрации база на SQL Server почти пустая: платформа создаёт только служебные таблицы. Таблицы справочников, документов и регистров (_Reference…, _Document…, _AccumRg…) появятся после того, как в базу попадёт конфигурация.

Сначала добавьте базу в список запуска: Добавить → Добавление в список существующей информационной базы → На сервере 1С:Предприятия. В поле «Кластер серверов 1С:Предприятия» — имя сервера 1С, в поле «Имя информационной базы в кластере» — имя из консоли (buh_main), а не имя базы на SQL.

Дальше выберите один из сценариев:

Что есть на рукахЧто делать в КонфигуратореРезультат
.dt (перенос файловой базы или копия)Администрирование → Загрузить информационную базуКонфигурация и все данные, включая пользователей
.cf (чистая типовая конфигурация)Конфигурация → Загрузить конфигурацию из файла, затем согласиться обновить конфигурацию базы данныхПустая база с типовой конфигурацией
Резервная копия SQL .bakВосстановить её в SSMS под новым именем, затем зарегистрировать в кластере без флажка созданияТочная копия другой SQL-базы

Загрузка .dt полностью замещает всё, что есть в базе. Если вы ошиблись базой в списке и загрузили файл в рабочую, данные будут перезаписаны. Перед загрузкой проверьте строку подключения в заголовке Конфигуратора.

Перенос файловой базы в SQL проходит так: в старой файловой базе Администрирование → Выгрузить информационную базу, затем загрузка этого .dt в новую серверную. Пользователи, пароли и настройки переезжают вместе с данными. После переноса старую файловую базу переименуйте или уберите из списка запуска, чтобы никто не продолжил в ней работать.

Для большой базы загрузка .dt идёт долго — на базе в 30–50 ГБ это часы. На время загрузки переведите SQL-базу в модель SIMPLE, если она стояла в FULL: журнал не разрастётся на десятки гигабайт.

6. Ошибки подключения к SQL и что они значат

Текст ошибки 1С обычно содержит дословное сообщение драйвера SQL после префикса «Ошибка СУБД». По нему причину находят быстрее всего.

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

Если не помогло

Посмотрите журнал ошибок SQL Server (Management → SQL Server Logs в SSMS): при неудачном входе там есть строка с причиной — например, неверный пароль или отсутствие базы. Со стороны 1С включите технологический журнал на сервере, событие EXCP покажет полный текст исключения.

7. Обслуживание базы 1С на MS SQL после запуска

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

ЗадачаКак частоЧем делать
Полная резервная копияЕжедневноПлан обслуживания SQL Server Agent или BACKUP DATABASE по расписанию
Копия журнала транзакцийКаждые 15–60 минутТолько при модели FULL
Обновление статистикиЕжедневно ночьюЗадача плана обслуживания или sp_updatestats
Перестроение и реорганизация индексовРаз в неделюПлан обслуживания
Проверка свободного места на дискахПостоянноМониторинг сервера

Ещё несколько настроек, которые стоит сделать сразу:

  • 🧠 Ограничьте память SQL Server. По умолчанию он забирает почти всю оперативную память. Если на той же машине стоит сервер 1С, оставьте ему и системе запас — например, на сервере с 32 ГБ отдайте SQL около 20 ГБ.
  • 🗄️ Не сжимайте базу по расписанию. Регулярное сжатие (shrink) фрагментирует индексы и только замедляет работу. Сжимать имеет смысл разово, после удаления большого объёма данных.
  • 💾 Разнесите файлы. Данные, журнал и tempdb на разных дисках дают заметный прирост на загруженных базах.
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'max server memory (MB)', 20480;
RECONFIGURE;

В бесплатной редакции SQL Server Express нет SQL Server Agent, а размер одной базы ограничен 10 ГБ. Для небольшой базы на 3–5 пользователей это рабочий вариант, но резервные копии придётся запускать через планировщик Windows и sqlcmd.

Резервные копии средствами SQL не заменяют периодическую выгрузку в .dt. Файл .dt пригодится, если базу придётся переносить на другую СУБД или в файловый вариант. Раз в месяц–квартал сделать выгрузку полезно, учитывая, что на время выгрузки пользователям лучше не работать.

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

Можно ли подключить две информационные базы 1С к одной базе SQL?
Нет. Каждой информационной базе нужна своя база на SQL Server. Если зарегистрировать вторую базу с тем же именем базы данных, обе будут работать с одними таблицами и испортят данные друг друга.
Нужна ли отдельная лицензия на MS SQL Server для 1С?
Да, кроме бесплатной редакции Express. SQL Server лицензируется отдельно от 1С. Лицензии сервера 1С дают право запускать сервер 1С, но не СУБД.
Можно ли вместо MS SQL использовать PostgreSQL?
Да, платформа 8.3 поддерживает PostgreSQL. В форме создания базы выбирают тип СУБД PostgreSQL, остальные шаги похожи. Перенос между СУБД делают через выгрузку и загрузку .dt.
Как переименовать базу на SQL Server, не ломая 1С?
Остановите работу пользователей, переименуйте базу в SSMS, затем в консоли кластера откройте свойства информационной базы и поменяйте поле «База данных». Имя базы в кластере и у пользователей останется прежним.
Почему после восстановления .bak копия начала отправлять обмены?
При регистрации копии не поставили блокировку регламентных заданий. Включите её в свойствах базы в консоли кластера и проверьте настройки обменов в самой копии.