пятница, 12 июля 2013 г.

ODBC-драйвер для MS SQL Server версии 3.50.0303 или старше

Недавно столкнулся с этой проблемой при попытке запуска 1С 7.7 на машине с Windows 7. Причем, проблема зависит, похоже, от фазы луны, или прочих космических дел, ибо та же 1С без проблем заработала на другой машине с "семечкой". Ситуация следующая: 1С припопытке соединиться с сервером базы данных (проблема возникает только если БД находится на SQL 2005, на 2008-м все работает из коробки) выдает ошибку

Для доступа к базе данных требуется ODBC-драйвер для MS SQL Server версии 3.50.0303 или старше

Никакие создания файлов bin-папке 1С для отключения проверки бла бла бла, или замена odbcbcp.dll, sqlsrv32.dll, sqlsrv32.rll на икспишные, или редактирование файлов, добавление строчек и прочая вздрочь с бубном не нужны, да и не всегда помогают, и по отдельности, и все вместе, и в любых комбинациях. Реальным решением проблемы есть
Секретный релиз платформы v77.27.1 Просто найдите в сети кем-то благородно выложенный архив (тут, к примеру) и установите это решение. И все заработает. Порядок установки приведу ниже: 
  1. Установить платформу из оригинального установщика;
  2. Установить и настроить HASP-ключ (обязательное условие, а то к вам придут врачи);
  3. Переименовать оригинальный файл BkEnd.dll в BkEnd0.dll (0 - это ноль);
  4. Скопировать файлы BkEnd.dll и BkEndUtls.dll из поставки в каталог, куда установлена 1с (например, C:\Program Files\1Cv77\BIN);
Для счастливых обладателей dbf-версии ничего не меняется.
Для обладателей sql-версии, у которых база данных размещается на MS SQL 2005/2008, необходимо соблюсти следующие требования для sql-логина (учетка, под которой 1с подключается к sql):
  • обладание, как минимум правами db_owner;
  • права на VIEW SERVER STATE;

С первым требованием все и так ясно, второе - требует пояснений. Для определения количества соединений к текущей базе данных, 1с обращается к системной таблице sysprocesses. Если у логина отсутствуют права на VIEW SERVER STATE, то будут видны только соединения, осуществленные под своей учеткой, что не совсем хорошо - нужно видеть все соединения с текущей базой, чтобы получать адекватые сообщения об ошибках. Большинство "специалистов" запускает 1с под учеткой SA (или другой, но с соответствующими суперправами), следовательно, у них такой проблемы не стоит. Зато имеется другая проблема - так называемый фоновый процесс сброса грязных страниц из кэша буфера данных, при выполнении которого, не удается запустить 1с в монопольном режиме.
В MS SQL 2005/2008 системная таблица (уже представление, оставленное для обратной совместимости) sysprocesses помечена устаревшей и в следующих редакциях MS SQL будет удалена. Компания Microsoft рекомендует использовать текущие аналоги - так и поступаем :) Для определения соединений к текущей базе данных (в этом исправленном релизе платформы 1с) больше не используется системная таблица sysprocesses (если ms sql 2005/2008, для ms sql 2000 используется).
Для того, чтобы дать права на VIEW SERVER STATE нужно выполнить простой скрипт:
USE master
GO

GRANT VIEW SERVER STATE TO

GO

Все остальные настройки по-умолчанию. Все, на этом проблема решена. Надеюсь, сэкономил кому-то драгоценное время.
 

2 комментария: