Перевод базы данных 1С:Предприятие 7.7 на SQL-сервер — это стандартная задача для системных администраторов и программистов, работающих с legacy-системами. Однако при загрузке данных (файл .dt или выгрузка из файловой версии) часто возникает критическая ошибка: «Порядок сортировки, установленный для базы данных, отличается от системного». Проблема особенно актуальна, когда сервер баз данных или рабочая станция работают на операционных системах новее Windows XP (например, Windows 7, 10 или серверные версии 2008/2012/2019).
В этой статье мы подробно разберем, почему возникает эта ошибка, проанализируем механизмы проверки кодовых страниц в 1С 7.7 и рассмотрим несколько проверенных способов решения проблемы.
Разберем ситуацию глубже. Основная причина кроется в системной библиотеке BkEnd.dll платформы 1С 7.7. При попытке соединения с SQL-сервером или в процессе загрузки данных 1С сравнивает настройки кодовой страницы (Locale ID) и порядок сортировки (Collation) внутри базы данных SQL с региональными настройками самой операционной системы Windows.
Начиная с Windows Vista, компания Microsoft изменила таблицы соответствия символов и механизмы NLS (National Language Support). В результате 1С 7.7, разработанная в эпоху Windows 98/2000/XP, перестает корректно распознавать системный ответ ОС о текущей кодировке. Даже если вы установили в SQL-базе Cyrillic_General_CI_AS и в Windows выбрали «Русский», 1С может посчитать их несовпадающими.
Это самый простой и штатный метод, предусмотренный разработчиками для обхода проверки. Файл OrdNoChk.prm сообщает платформе, что проверку порядка сортировки нужно проигнорировать.
Разберем по шагам, как правильно его использовать:
OrdNoChk.prm. Убедитесь, что расширение файла именно .prm, а не .prm.txt.C:\Program Files (x86)\1Cv77\BIN\).Важный нюанс: В современных ОС механизм контроля учетных записей (UAC) может блокировать чтение файлов из папки Program Files. В этом случае запуск 1С необходимо производить от имени администратора, иначе файл игнорируется.
Если манипуляции с файлом OrdNoChk.prm не помогают, можно прибегнуть к изменению системных настроек кодовых страниц. Мы заставим Windows «думать», что кодовые страницы 1251 (кириллица) и 1252 (латиница) обрабатываются одинаково, что часто удовлетворяет алгоритмы 1С.
Проанализируем алгоритм действий в реестре:
Win + R, введите regedit и нажмите Enter.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage.1252. По умолчанию там указано значение c_1252.nls.1252 на c_1251.nls.1251, убедившись, что там прописано именно c_1251.nls.После внесения изменений обязательно перезагрузите компьютер. Это позволит системе обновить таблицы символов в оперативной памяти.
Как выяснилось в ходе обсуждения на форуме, наиболее стабильным «естественным» способом загрузки данных является использование операционной системы Windows XP. Рассмотрим ситуацию: если на современном сервере (Windows Server 2019) и современных рабочих станциях (Windows 10) загрузка прерывается ошибкой, можно воспользоваться виртуальной машиной или старым ПК.
Процесс выглядит так:
SQL Server).Если вы не хотите менять настройки ОС или искать старые компьютеры, можно модифицировать саму проверку в коде программы. Существуют готовые патчи, которые заменяют ассемблерные команды в библиотеке BkEnd.dll, заставляя функцию проверки всегда возвращать истину (успех).
Рассмотрим пример того, что происходит «под капотом» при таком патчинге (схематично):
// В коде BkEnd.dll ищется последовательность байт,
// отвечающая за сравнение строк сортировки.
// Условный переход JNE (Jump if Not Equal) заменяется на JMP (Jump)
// или заполняется NOP (No Operation).
Для реализации этого способа обычно используются HEX-редакторы. Однако стоит помнить, что любое вмешательство в исполняемые файлы нарушает лицензионное соглашение, поэтому данный метод следует использовать только в исключительных случаях как крайнюю меру.
Выясним причину, связанную с настройками сервера. 1С 7.7 крайне чувствительна к так называемой «коллации». Для корректной работы русской версии 1С база данных на SQL Server должна иметь параметры:
Cyrillic_General_CI_AS.80 (соответствует SQL Server 2000), хотя 1С может работать и на более высоких уровнях при наличии специальных библиотек-заглушек.Если база данных создана с другой кодировкой (например, Latin1_General), то никакие файлы OrdNoChk.prm не помогут — данные будут загружены некорректно, с «кракозябрами» вместо кириллицы. Проверить текущую коллацию можно запросом в SQL Server Management Studio:
SELECT name, collation_name
FROM sys.databases
WHERE name = 'Имя_Вашей_Базы';
Проанализируем еще несколько факторов, которые могут влиять на результат:
BkEnd.dll.SQL Server (старый, версии 6.xx). Использование SQL Native Client в версии 7.7 часто приводит к непредсказуемым ошибкам сортировки.sqlols.dll или использование модифицированных библиотек для обхода проверки версии сервера.Подводя итог, можно сказать, что наиболее стабильным и безопасным методом для современной среды является сочетание Способа 1 (OrdNoChk.prm) и настройки Региональных стандартов системы. Если же база «упрямится», то загрузка через Windows XP (Способ 3) гарантированно решает проблему первичной инициализации данных.