Переход с файловой версии (DBF) на SQL-версию для платформы 1С:Предприятие 7.7 — задача, которая становится неизбежной при росте базы данных. Файловая версия имеет жесткое ограничение: размер одного файла (обычно это файл итогов или констант) не может превышать 2 Гб. Как только база приближается к этому пределу (в обсуждении упоминается размер 1.9 Гб), работа становится нестабильной, и возникает риск потери данных.
Однако простой перенос данных часто осложняется тем, что платформа 7.7 официально поддерживает только старый MS SQL Server 2000. При попытке использовать современные версии (2005, 2008, 2012 и новее) возникают технические проблемы. Разберем подробно, как осуществить этот переход, с какими подводными камнями нам придется столкнуться и как их обойти.
Самый простой и правильный способ переноса данных между форматами хранения в 1С 7.7 — это использование штатной выгрузки и загрузки данных. Давайте рассмотрим этот процесс:
1Cv77.dat.На этом этапе, если бы мы жили в 2000 году, все бы и закончилось. Но в современных реалиях мы сталкиваемся с проблемами совместимости.
Платформа 1С 7.7 (даже 27-й релиз) "из коробки" проверяет версию SQL Server. Если версия выше, чем SQL 2000, программа откажется работать или выдаст ошибки.
Решение: "Секретный релиз" и патчинг
Для работы с SQL 2005, 2008 и выше необходимо заменить исполняемые файлы платформы (в частности библиотеку BkEnd.dll) на модифицированные. В сообществе это часто называют "секретным релизом". Для решения проблем совместимости платформ и операционных систем можно применить готовый комплект библиотек и настроек для запуска 1С 7.7 на MS SQL 2005+.
Что нужно учесть при настройке SQL Server:
Cyrillic_General_CI_AS. Если кодировка базы не совпадает с ожиданиями 1С, база не запустится.OrdNoCHK.prm в каталоге базы данных. Это отключит строгую проверку порядка сортировки при запуске.Это одна из самых частых проблем при переходе на 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 = :ВыбДокумент
|";
При выгрузке из DBF и загрузке в SQL часто возникают ошибки, связанные с "пустыми" или некорректными датами в таблицах. В DBF формате контроль типов мягче. SQL Server требует четкого соответствия типов.
Решение:
Перед выгрузкой необходимо проверить базу на наличие некорректных дат. Желательно выполнить Тестирование и исправление ИБ в конфигураторе. Если ошибки остаются, придется искать их программно и заменять пустые или битые даты (например, '01.01.1753' или пустые значения) на корректную "пустую" дату 1С.
Если сервер, на котором запускается 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\ на новом сервере. Речь идет о файлах:
sqlsrv32.dllsqlsrv32.rllodbcbcp.dllПосле копирования может потребоваться регистрация или внесение изменений в реестр, чтобы система начала использовать именно эти версии библиотек для подключений 1С.
Важно понимать: после перехода на SQL скорость работы в обычном режиме может снизиться. Это связано с тем, что архитектура 1С 7.7 не оптимизирована для клиент-серверной работы. Она часто тянет большие объемы данных на клиент для обработки.
Чтобы база "летала" на SQL, рекомендуется:
1SBCTTL (Бухгалтерские итоги) растет, если не выполнять свертку базы или если у вас много незакрытых измерений (субконто). В SQL таблица будет еще больше. Регулярно проверяйте корректность закрытия регистров.Перенос 1С 7.7 в SQL возможен и часто необходим. С технической точки зрения процесс выглядит так:
BkEnd.dll + OrdNoCHK.prm) для совместимости с современным SQL Server.SysWOW64.ВыбратьПодчиненныеДокументы (патчем или кодом).