Как перенести базу 1С 7.7 из формата DBF в SQL и решить проблемы совместимости с новыми версиями серверов?

Системный администратор 1С v7.7 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

Переход с файловой версии (DBF) на SQL-версию для платформы 1С:Предприятие 7.7 — задача, которая становится неизбежной при росте базы данных. Файловая версия имеет жесткое ограничение: размер одного файла (обычно это файл итогов или констант) не может превышать 2 Гб. Как только база приближается к этому пределу (в обсуждении упоминается размер 1.9 Гб), работа становится нестабильной, и возникает риск потери данных.

Однако простой перенос данных часто осложняется тем, что платформа 7.7 официально поддерживает только старый MS SQL Server 2000. При попытке использовать современные версии (2005, 2008, 2012 и новее) возникают технические проблемы. Разберем подробно, как осуществить этот переход, с какими подводными камнями нам придется столкнуться и как их обойти.

1. Подготовка к переносу: штатный механизм

Самый простой и правильный способ переноса данных между форматами хранения в 1С 7.7 — это использование штатной выгрузки и загрузки данных. Давайте рассмотрим этот процесс:

  1. В режиме Конфигуратор файловой базы выполните: Администрирование — Выгрузить данные. Вы получите файл архива (zip), содержащий файл 1Cv77.dat.
  2. Создайте пустую базу данных на SQL Server.
  3. Настройте параметры подключения к SQL Server в пустой папке, где будет лежать конфигурация SQL-версии (через Администратор источников данных ODBC или непосредственно при запуске 1С, если файлы программы позволяют).
  4. Запустите Конфигуратор для новой базы и выполните: Администрирование — Загрузить данные.

На этом этапе, если бы мы жили в 2000 году, все бы и закончилось. Но в современных реалиях мы сталкиваемся с проблемами совместимости.

2. Проблема совместимости версий SQL Server

Платформа 1С 7.7 (даже 27-й релиз) "из коробки" проверяет версию SQL Server. Если версия выше, чем SQL 2000, программа откажется работать или выдаст ошибки.

Решение: "Секретный релиз" и патчинг

Для работы с SQL 2005, 2008 и выше необходимо заменить исполняемые файлы платформы (в частности библиотеку BkEnd.dll) на модифицированные. В сообществе это часто называют "секретным релизом". Для решения проблем совместимости платформ и операционных систем можно применить готовый комплект библиотек и настроек для запуска 1С 7.7 на MS SQL 2005+.

Что нужно учесть при настройке SQL Server:

3. Ошибка метода ВыбратьПодчиненныеДокументы

Это одна из самых частых проблем при переходе на SQL 2005 и выше. При выполнении штатного метода ВыбратьПодчиненныеДокументы платформа формирует SQL-запрос, который содержит конструкцию ORDER BY по полям, отсутствующим в секции SELECT.

Старые версии SQL (2000) допускали такой синтаксис (хотя он и не соответствовал стандартам). Начиная с версии 2005, Microsoft ужесточила требования, и теперь такой запрос вызывает ошибку. В логах 1С или SQL Server вы можете увидеть сообщение, похожее на: "ORDER BY items must appear in the select list if SELECT DISTINCT is specified".

Варианты решения:

Вариант А: Патчинг движка (BkEnd.dll)
Существуют специальные сборки (патчи) для библиотеки BkEnd.dll, которые на лету перехватывают этот запрос и исправляют его перед отправкой на SQL-сервер. Это позволяет не менять код конфигурации.

Вариант Б: Переписывание кода (1С++)
Более надежный и производительный способ — заменить штатный метод на прямой запрос к базе данных, используя внешнюю компоненту 1С++. Это не только решит проблему ошибки, но и значительно ускорит выполнение выборки, так как прямые запросы работают быстрее штатных механизмов 1С 7.7.

Пример того, как может выглядеть прямой запрос для замены штатного механизма (концептуально):


// Примерный текст запроса для 1С++ (MetaClass)
ТекстЗапроса = "
|SELECT
|    Жур.IDDoc as [Документ $Документ],
|    Жур.IDDocDef as Документ_vid
|FROM
|    _1SJourn as Жур (NOLOCK)
|INNER JOIN
|    _1SCRDOC as Ссылки (NOLOCK) ON Ссылки.Child_Date_Time_IDDoc = Жур.Date_Time_IDDoc
|WHERE
|    Ссылки.MDID = 0 
|    AND Ссылки.ParentVal = :ВыбДокумент
|";

4. Проблема пустых дат

При выгрузке из DBF и загрузке в SQL часто возникают ошибки, связанные с "пустыми" или некорректными датами в таблицах. В DBF формате контроль типов мягче. SQL Server требует четкого соответствия типов.

Решение:
Перед выгрузкой необходимо проверить базу на наличие некорректных дат. Желательно выполнить Тестирование и исправление ИБ в конфигураторе. Если ошибки остаются, придется искать их программно и заменять пустые или битые даты (например, '01.01.1753' или пустые значения) на корректную "пустую" дату 1С.

5. Проблемы с драйверами ODBC на 64-битных ОС

Если сервер, на котором запускается 1С 7.7, работает под управлением современной 64-битной ОС (Windows Server 2008 R2, 2012, 2016, 2019), вы можете столкнуться с тем, что 1С не видит драйвер SQL Server.

Причина:
1С 7.7 — это 32-битное приложение, и оно использует старый драйвер "SQL Server". В чистых установках новых Windows этот драйвер может работать некорректно или отсутствовать в нужном виде.

Решение:
Необходимо скопировать файлы драйвера из старой системы (например, Windows XP или Server 2003) в папку C:\Windows\SysWOW64\ на новом сервере. Речь идет о файлах:

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

6. Производительность: SQL против DBF

Важно понимать: после перехода на SQL скорость работы в обычном режиме может снизиться. Это связано с тем, что архитектура 1С 7.7 не оптимизирована для клиент-серверной работы. Она часто тянет большие объемы данных на клиент для обработки.

Чтобы база "летала" на SQL, рекомендуется:

  1. Использовать прямые запросы: Переписать тяжелые отчеты и обработки (ОСВ, карточки счетов, проведение документов) с использованием 1С++.
  2. Настроить Maintenance Plan: SQL-база требует обслуживания. Обязательно настройте регулярное обновление статистик и дефрагментацию/ребилд индексов. Без этого производительность будет деградировать.
  3. Закрытие периодов: Файл 1SBCTTL (Бухгалтерские итоги) растет, если не выполнять свертку базы или если у вас много незакрытых измерений (субконто). В SQL таблица будет еще больше. Регулярно проверяйте корректность закрытия регистров.

Выводы

Перенос 1С 7.7 в SQL возможен и часто необходим. С технической точки зрения процесс выглядит так:

  1. Делаем резервную копию.
  2. Используем патченный движок (или BkEnd.dll + OrdNoCHK.prm) для совместимости с современным SQL Server.
  3. Проверяем наличие системных файлов ODBC драйверов в SysWOW64.
  4. Переносим данные через "Выгрузить/Загрузить".
  5. Исправляем ошибку в ВыбратьПодчиненныеДокументы (патчем или кодом).
  6. Настраиваем регламентные задания на SQL Server (обслуживание индексов).
← На главную