Использование MS SQL Server 2005 с 1С:Предприятием v7.7
Материал для статьи предоставлен Midnight Ghost
Данная статья является изложением опыта запуска 1С:Предприятия v7.7 на
MS SQL Server 2005. К сожалению, "штатно" 1С:Предприятие v7.7 работу с
MS SQL Server 2005 не поддерживает, поэтому понадобятся некоторые
ухищрения, которые и будут здесь описаны. Примечание:
на данный момент имеется опыт успешной промышленной (не тестовой)
эксплуатации 1С:Предприятия v7.7 с MS SQL 2005. При этом размер
mdf-файла рабочей базы данных составляет порядка 10 Гб, количество
одновременных подключений - порядка 60, конфигурация полностью
самописная, активно используется технология 1С++ в части "прямых"
запросов к базе данных.
При установке SQL сервера необходимо выставить режим авторизации
"MixedMode" (т.е. Windows+SQL), и указать пароль для учетной записи
"SA". Параметр "Server Collation" следует установить как
"Cyrillic_General_CI_AS". Получить текущий Server Collation можно такой
командой:
SELECT CONVERT (varchar, SERVERPROPERTY('collation'))
Если SQL сервер "не виден" с других компьютеров
(1С выдаёт сообщение "SQL-сервер не существует, или отсутствует
доступ."), следует разрешить удаленные соединения в SQL Server Surface
Area Configuration. Меню "Пуск" - "Программы" - "Microsoft SQL Server
2005" - "Configuration Tools" - "SQL Server Surface Area
Configuration". Выбрать ссылку "Surface Area Configuration for Services
and Connections", в дереве выбрать элемент "Remote Connections".
Если у вас MS SQL Server 2005 Express Edition, в 1С в "Параметрах базы данных SQL" нужно указывать не просто имя сервера, а Имя_Сервера\SQLEXPRESS.
В свойствах базы данных на SQL Server необходимо
поставить Compatibility Level "SQL Server 2000(80)". Это можно сделать
в Microsoft SQL Server Management Studio Express (меню "Пуск" -
"Программы" - "Microsoft SQL Server 2005" - "SQL Server Management
Studio Express CTP"). Примечание: база данных может быть создана на
Microsoft SQL Server 2000, и перенесена на Microsoft SQL Server 2005
через простой Detach - Attach, можно также через Backup - Restore.
Однако простого пути для возврата базы назад (на MS SQL 2000) уже не
будет.
Получить текущий Compatibility Level базы данных можно и такой командой:
EXEC sp_dbcmptlevel <DataBaseName>
Установить Compatibility Level базы данных в "SQL Server 2000(80)" можно так:
EXEC sp_dbcmptlevel <DataBaseName>, 80
Если возникают проблемы с подключением к базе MS SQL 2005, просмотрите настройки протоколов
в "SQL Server Configuration Manager". Меню "Пуск" - "Программы" -
"Microsoft SQL Server 2005" - "Configuration Tools" - "SQL Server
Configuration Manager".
Поскольку 1С v7.7 штатно не поддерживает MS SQL
2005, вы получите сообщение "Требуется MS SQL Server 6.5 + Service Pack
5a или более старшая версия!". Чтобы устранить это, необходимо изменить
BkEnd.dll следующим образом (для 21-го релиза 1С):
000D9B7A: 83 EB
000D9B7B: E8 15
000DAFE0: 83 EB
000DAFE1: E8 10
Для 25-го релиза 1С:
000D9C4A: 83 EB
000D9C4B: E8 15
000DB0B0: 83 EB
000DB0B1: E8 10
Для 26-го и 27-го релизов 1С:
000D9CCA: 83 EB
000D9CCB: E8 15
000DB130: 83 EB
000DB131: E8 10
Для возможности коллективной работы в базе данных (одновременной работы нескольких пользователей) необходим режим Multiple для базы данных ("Properties - Options - State - Restrict access" - "Multiple").
Возможно, для коллективной работы в базе данных (одновременной работы
нескольких пользователей) могут потребоваться дополнительные изменения
в BkEnd.dll,
которые можно произвести с помощью Unofficial Service Pack v2.13.24 для
24 релиза 1С (он работает и на 25 релизе), установив флажок "Разрешать
другим пользователям входить в базу (SQL)" на вкладке "Защита". Эти
изменения можно произвести и вручную (для 25-го релиза 1С):
000DA023: 85 40
000DA024: C0 90
Примечание: после вышеупомянутых изменений 1С
будет производить верификацию структуры таблиц и процедур всегда, а не
только при входе первого пользователя в базу (при коллективной работе),
что немного замедлит запуск 1С.
При работе на базе MS SQL 2005 может возникнуть
проблема с автонумерацией документов (при интерактивном создании нового
документа номер присваивается некорректно), причём проблема эта
воспроизводится не всегда. Чтобы обойти эту проблему, можно поместить в
процедуру "ПриЗаписи" всех документов код, подобный следующему:
докДок=СоздатьОбъект("Документ."+Вид());
Если докДок.НайтиПоНомеру(НомерДок,ДатаДок)<>0 Тогда
Если докДок.ТекущийДокумент()<>ТекущийДокумент() Тогда
УстановитьНовыйНомер();
КонецЕсли;
КонецЕсли;