При организации совместной работы с файловой информационной базой 1С:Предприятия 7.7 в смешанной сети, где часть рабочих мест работает под управлением Windows XP, а часть — под Windows 7 (как 32-битной, так и 64-битной), системные администраторы сталкиваются со стандартной ошибкой: «Порядок сортировки, установленный для базы данных, отличается от системного». Если исправить кодовую страницу через конфигуратор на компьютере с Windows XP, доступ открывается, но перестает работать на Windows 7. Если поменять настройку на Windows 7, блокируется доступ для пользователей Windows XP. Разберем детально, почему возникает этот конфликт, какие есть быстрые способы его обхода и как организовать работу безопасно для сохранности данных.
Выясним причину такого поведения платформы. Ошибка никак не связана с разрядностью операционной системы (32 или 64 бита). Проблема кроется в разнице между поколениями ядер Windows: NT 5.x (Windows XP, Windows Server 2003) и NT 6.x (Windows Vista, Windows 7, Windows Server 2008). Начиная с Vista, Microsoft обновила системные таблицы локализации и сортировки строк (NLS) и функции сопоставления строк LCMapString и CompareString. Платформа 1С 7.7 при старте опрашивает операционную систему и сверяет ее внутреннюю сигнатуру сортировки с сигнатурой, записанной в базе данных. Поскольку контрольные параметры XP и 7 не совпадают, платформа аварийно блокирует запуск сеанса.
Проанализируем самый быстрый способ, позволяющий обойти проверку порядка сортировки без изменения параметров самой информационной базы. Этот метод работает на релизах платформы 1С 7.7, начиная с 25 (рекомендуется использовать релиз 27):
ordnochk.prm (обратим внимание, что расширение файла должно быть именно .prm, а не .txt).BIN, где расположен файл 1cv7.exe) на рабочем компьютере, либо непосредственно в каталог с информационной базой.BIN на рабочей станции под управлением Windows XP или Windows 7, проверка отключается для всех баз, запускаемых с данного ПК.Важное предупреждение: отключение проверки с помощью ordnochk.prm устраняет только симптом, но не решает фундаментальную проблему различия сортировки в разных ОС. Файл просто подавляет вывод ошибки при старте. В файловом режиме (DBF) каждый клиент перестраивает и обновляет индексы (файлы .cdx) локально, используя системные вызовы своей версии Windows. При одновременной записи данных из Windows XP и Windows 7 разные алгоритмы сравнения символов неизбежно приводят к рассинхронизации индексных файлов. В результате возможны дублирование кодов справочников, исчезновение записей из отчетов и необходимость постоянного монопольного переиндексирования базы.
Рассмотрим наиболее надежный подход к организации одновременной работы устаревших и современных клиентов в файловом режиме:
В этом случае исполняемый файл 1С 7.7 всегда выполняется в среде одной и той же операционной системы. Все операции индексации выполняются по единым правилам, что полностью исключает разрушение таблиц и сбои сортировки, а также значительно ускоряет работу базы за счет исключения передачи больших файлов по сети.
Разберем вариант использования SQL-версии платформы 1С 7.7. При переходе на СУБД Microsoft SQL Server сортировка и индексация данных делегируются серверу баз данных, а не клиентским операционным системам:
Иногда на технических форумах упоминается так называемый «секретный релиз». Проанализируем это понятие: так называют неофициальные патчи для библиотек платформы (в частности, BkEnd.dll), которые позволяют платформе 1С 7.7 работать с современными версиями MS SQL Server (2005 и новее), обходя проверки совместимости. Для файловых (DBF) баз данный патч проблемы с таблицами сортировки между Windows XP и Windows 7 не устраняет.
Если временная работа через ordnochk.prm по сети неизбежна, обратим внимание на протоколы сетевого обмена. Windows XP поддерживает только протокол SMB 1.0, тогда как Windows 7 использует SMB 2.0. Кэширование сетевых папок и механизм оппортунистических блокировок (Oplocks) в Windows 7 при файловом доступе к 1С 7.7 часто приводят к ошибкам «Ошибка блокировки таблицы».
Если база физически расположена на компьютере с Windows 7, для стабильности файлового доступа рекомендуется отключить оппортунистические блокировки в системном реестре хоста:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters.EnableOplocks типа REG_DWORD со значением 0.