Переход с файлового варианта хранения базы 1С:Предприятие на клиент-серверный с использованием Microsoft SQL Server — ключевой шаг для компаний, столкнувшихся с замедлением работы, рисками потери данных или необходимостью масштабирования. Такой перенос позволяет распределить нагрузку, обеспечить резервное копирование на уровне СУБД и работать с базой одновременно десяткам пользователей без «тормозов». Однако процесс требует точного соблюдения последовательности действий: от подготовки сервера до финальной настройки подключения в конфигураторе.

В этой статье разберём все этапы миграции — от выгрузки данных из файловой базы до оптимизации производительности SQL Server под 1С, включая нюансы для разных версий платформы (8.3.20+). Особое внимание уделим типичным ошибкам (например, Ошибка формата потока или проблемы с кодировкой), которые возникают при некорректной настройке коллаций или недостаточных правах пользователя СУБД. Материал будет полезен как администраторам 1С, так и IT-специалистам, ответственным за инфраструктуру.

Подготовка к переносу: требования и предварительные шаги

Перед началом миграции критически важно проверить совместимость версий 1С:Предприятия и SQL Server. Например, платформа 1С 8.3.20 и новее официально поддерживает SQL Server 2019/2022, но для старых релизаций (8.3.10–8.3.15) может потребоваться установка SQL Server 2016 или даже 2014. Также убедитесь, что на сервере достаточно ресурсов:

  • 🖥️ Оперативная память: минимум 8 ГБ (рекомендуется 16+ ГБ для баз свыше 50 ГБ).
  • 💾 Дисковое пространство: объём должен превышать размер файловой базы 1С в 1.5–2 раза (учитывайте рост логов транзакций).
  • 🔒 Права доступа: учётная запись Windows, под которой работает служба SQL Server, должна иметь права на папку с базой 1С.

Обязательный шаг — резервное копирование файловой базы (.1CD). Используйте встроенную утилиту chdbfl.exe (расположена в каталоге платформы 1С) для проверки целостности файла перед выгрузкой:

chdbfl.exe "C:\Базы1С\ВашаБаза\1Cv8.1CD" /TestAndRepair
⚠️ Внимание: Если база 1С ранее открывалась в режиме «Монопольный» или использовались нестандартные обработки для прямого изменения файлов .1CD, высока вероятность скрытых ошибок. В этом случае перед переносом выполните тестирование и исправление через Конфигуратор → Администрирование → Тестирование и исправление.
📊 Какую версию SQL Server вы планируете использовать?
SQL Server 2019
SQL Server 2022
SQL Server 2016
Другая версия

Установка и настройка SQL Server для 1С

Для корректной работы 1С с SQL Server при установке СУБД необходимо:

  1. Выбрать компонент «Database Engine Services»** (основной движок базы данных).
  2. Указать смешанный режим аутентификации (Mixed Mode), чтобы использовать как учётные записи Windows, так и логины SQL.
  3. Настроить коллацию на уровне сервера: для русскоязычных баз оптимальна Cyrillic_General_CI_AS (регистронезависимая, с учётом кириллицы).

После установки выполните дополнительные настройки:

  • 🔧 Максимальная память: ограничьте потребление ОЗУ SQL Server (например, до 80% от физической памяти сервера), чтобы избежать конфликтов с другими службами.
  • 📊 Модели восстановления: для рабочих баз установите FULL (полное резервное копирование), для тестовых — SIMPLE.
  • 🔄 Автосжатие логов: включите опцию AUTO_SHRINK для базы, но только если дисковое пространство критично (регулярное сжатие может влиять на производительность).
Параметр SQL Server Рекомендуемое значение Пояснение
max degree of parallelism 2–4 Ограничивает количество ядер CPU для параллельных операций. Для 1С значение выше 4 может привести к блокировкам.
cost threshold for parallelism 50 Порог стоимости запроса (в секундах), после которого SQL Server будет использовать параллелизм.
fill factor (%) 80–90 Процент заполнения страниц данных. Низкие значения уменьшают фрагментацию, но увеличивают размер базы.
⚠️ Внимание: Если на сервере уже установлен SQL Server для других задач (например, для сайтов или аналитики), создайте отдельный экземпляр специально для 1С. Это позволит изолировать нагрузку и избежать конфликтов настроек.

Выгрузка базы 1С из файлового формата

Процесс выгрузки данных из файловой базы в формат, совместимый с SQL Server, выполняется через Конфигуратор 1С. Пошаговая инструкция:

  1. Откройте базу в Конфигураторе (не в пользовательском режиме!).
  2. Перейдите в меню Администрирование → Выгрузить информационную базу.
  3. Укажите путь для сохранения файла выгрузки (.dt). Важно: папка должна быть на локальном диске (не по сети!).
  4. Дождитесь завершения процесса. Время зависит от размера базы (например, база 10 ГБ выгружается ~15–30 минут).

Если выгрузка прерывается с ошибкой Недостаточно памяти, используйте альтернативный метод — утилиту 1cv8.exe с ключом /DumpIB:

1cv8.exe DESIGNER /S "Файл=»C:\Базы1С\ВашаБаза\1Cv8.1CD»" /DumpIB "C:\Temp\Выгрузка.dt" /Out "C:\Temp\лог_выгрузки.txt"

- Закрыты все сеансы пользователей в базе

- Достаточно свободного места на диске (минимум x2 от размера .1CD)

- Отключены антивирусные сканеры (могут блокировать файлы)

- Создана резервная копия .1CD файла-->

После успешной выгрузки проверьте целостность файла .dt — его размер должен быть сопоставим с исходной базой (например, база 5 ГБ не может выгрузиться в файл 1 ГБ). Если размер значительно меньше, повторно выполните выгрузку с включённым логированием (/Out).

Создание базы данных в SQL Server и загрузка данных

Теперь необходимо подготовить структуру в SQL Server и загрузить данные из файла .dt. Для этого:

  1. Подключитесь к SQL Server Management Studio (SSMS) с правами sysadmin.
  2. Создайте новую базу данных с коллацией Cyrillic_General_CI_AS:
CREATE DATABASE [ВашаБаза1С]

CONTAINMENT = NONE

ON PRIMARY (NAME = N'ВашаБаза1С', FILENAME = N'C:\SQLData\ВашаБаза1С.mdf')

LOG ON (NAME = N'ВашаБаза1С_log', FILENAME = N'C:\SQLLogs\ВашаБаза1С.ldf')

COLLATE Cyrillic_General_CI_AS;

Далее загрузите данные через Конфигуратор 1С:

  1. В Конфигураторе выберите Администрирование → Загрузить информационную базу.
  2. Укажите параметры подключения к SQL Server:
    • Имя сервера: .\SQLEXPRESS (если локальный экземпляр) или IP-адрес\ИмяЭкземпляра.
    • Тип аутентификации: SQL Server (если используете логин/пароль) или Windows.
    • Имя базы данных: должно совпадать с созданной в SSMS.
  3. Выберите файл .dt и запустите загрузку.
  4. Процесс может занять от нескольких минут до часов (зависит от объёма данных и производительности сервера). Если загрузка прерывается с ошибкой Недостаточно места на диске, проверьте:

    • 📉 Размер файлов .mdf и .ldf (лог транзакций может разрастаться до размера базы).
    • 🔄 Настройки autogrowth для файлов базы (по умолчанию должно быть включено автоматическое расширение).
Что делать, если загрузка «зависает» на 99%?

Обычно это связано с блокировками в SQL Server. Проверьте активные сессии через запрос:

SELECT * FROM sys.dm_exec_requests WHERE blocking_session_id <> 0;

Если найдёте блокирующий процесс, завершите его командой KILL {ID_сессии}. Также убедитесь, что на сервере достаточно свободной памяти (SQL Server может «подвисать» при нехватке ОЗУ).

Настройка подключения 1С к SQL Server

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

  1. В Конфигураторе перейдите в Администрирование → Публикация на веб-сервере (если используете веб-доступ) или просто сохраните изменения.
  2. Обновите строки подключения в файлах:
    • 1CV8.1CD → замените на Srvr="ИмяСервера";Ref="ИмяБазы";.
    • 1CV8.lst (список баз) — добавьте новую строку с параметрами SQL.
  • Проверьте права пользователя SQL:
    • 👤 Для стандартной работы достаточно роли db_datareader и db_datawriter.
    • 🔧 Для администраторов добавьте роль db_owner.
  • Пример строки подключения для файла 1CV8.1CD:

    Srvr="192.168.1.100\SQLEXPRESS";Ref="Бухгалтерия";Usr="1CUser";Pwd="Пароль123";

    Если при подключении возникает ошибка Ошибка формата потока, проверьте:

    • 🔄 Совместимость версий и SQL Server (например, 1С 8.3.20 не поддерживает SQL Server 2008).
    • 📏 Коллацию базы данных (должна быть Cyrillic_General_CI_AS, а не SQL_Latin1_General_CP1_CI_AS).
    • 🔒 Права на папку Temp для службы SQL Server (должны быть полные).
    💡

    Если после переноса 1С «тормозит» при открытии форм, проверьте настройки cost threshold for parallelism в SQL Server. Значение по умолчанию (5) может быть слишком низким для 1С — увеличьте его до 30–50.

    Оптимизация производительности SQL Server под 1С

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

    • 📈 Индексы: 1С автоматически создаёт индексы для полей с пометкой «Индексировать», но для крупных таблиц (например, Document123) может потребоваться ручная оптимизация. Используйте Database Engine Tuning Advisor из SSMS.
    • 🗑️ Фрагментация: Регулярно (раз в месяц) выполняйте перестроение индексов:
      ALTER INDEX ALL ON [ВашаТаблица] REBUILD;
    • 🔄 План обслуживания: Настройте автоматическое резервное копирование (ежедневно) и сжатие логов транзакций.

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

    -- Топ 10 самых долгих запросов
    

    SELECT TOP 10

    qs.total_elapsed_time/qs.execution_count AS [Avg Duration],

    SUBSTRING(qt.text, (qs.statement_start_offset/2)+1,

    ((CASE qs.statement_end_offset WHEN -1 THEN DATALENGTH(qt.text)

    ELSE qs.statement_end_offset END - qs.statement_start_offset)/2)+1) AS [Query]

    FROM sys.dm_exec_query_stats qs

    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt

    ORDER BY [Avg Duration] DESC;

    ⚠️ Внимание: Если в базе 1С используются внешние обработки или отчёты с тяжелыми запросами (например, с множеством ВЫБРАТЬ РАЗРЕШЕННЫЕ), их выполнение может блокировать другие сессии. В этом случае перенесите логику в хранимые процедуры на стороне SQL Server.

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

    Даже при точном следовании инструкции могут возникать ошибки. Рассмотрим самые распространённые:

    Ошибка Вероятная причина Решение
    Ошибка формата потока (0x80004005) Несовпадение версий 1С и SQL Server или повреждение файла .dt. Повторите выгрузку с логированием (/Out). Проверьте совместимость версий.
    Не удалось подключиться к информационной базе Некорректная строка подключения или отсутствие прав у пользователя SQL. Проверьте параметры Srvr, Ref, Usr в файле 1CV8.1CD.
    Ошибка при создании объекта метаданных Отсутствуют права на создание таблиц в базе SQL. Назначьте пользователю роль db_owner на время загрузки.
    Медленная работа после переноса Отсутствуют индексы или фрагментация данных. Выполните REBUILD индексов и обновление статистики (UPDATE STATISTICS).

    Если ошибка не указана в таблице, изучите лог загрузки (файл, указанный в параметре /Out). Например, строка Error: Convert failed when converting date and/or time from character string указывает на проблему с форматом даты — в этом случае проверьте региональные настройки SQL Server и 1С (должны совпадать).

    💡

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

    FAQ: Частые вопросы по переносу 1С в SQL Server

    Можно ли перенести базу 1С с SQL Server обратно в файловый формат?

    Да, но это не рекомендуется для рабочих баз. Для этого:

    1. В Конфигураторе выберите Администрирование → Выгрузить информационную базу (получите файл .dt).
    2. Создайте новую файловую базу и загрузите в неё .dt.

    Обратите внимание: при обратном переносе теряются некоторые настройки SQL (например, индексы, созданные вручную).

    Сколько времени занимает перенос базы объёмом 20 ГБ?

    Примерное время:

    • Выгрузка в .dt: 30–60 минут.
    • Загрузка в SQL Server: 1–3 часа (зависит от производительности дисков и CPU).

    Для ускорения используйте SSD-диски и отключите антивирус на время операции.

    Нужно ли обновлять 1С до переноса в SQL?

    Да, если:

    • Ваша версия 1С старше 8.3.10 — в них были баги работы с SQL Server 2016+.
    • Вы используете нетипичную конфигурацию (например, сильно доработанную УТ 10.3).

    Обновите платформу до последней стабильной версии (например, 8.3.22) до переноса.

    Как перенести пользователей и права доступа?

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

    • Пароли пользователей не сохраняются — их придётся восстановить вручную.
    • Права на уровне SQL Server (роли db_datareader/db_datawriter) нужно назначить заново.
    Можно ли использовать SQL Server Express для 1С?

    Технически да, но с ограничениями:

    • 🔢 Лимит на размер базы: 10 ГБ (в SQL Server Express).
    • 💻 Лимит на использование ОЗУ: 1.4 ГБ (может быть критично для баз свыше 5 ГБ).

    Для производственных баз рекомендуется Standard или Enterprise редакция.