При попытке внести изменения в структуру конфигурации 1С:Предприятия 7.7 (добавить новый реквизит в справочник, создать документ или регистр) на операционных системах линейки Windows 7, Windows Server 2008 и выше пользователи часто сталкиваются с критическим сбоем Конфигуратора:
SQL State: HY010, Native: 0, Message: [Microsoft][ODBC SQL Server Driver] Ошибка последовательности функций
Проанализируем природу этой ошибки, выясним, почему стандартная замена библиотек может не срабатывать, и разберем все работающие варианты решения проблемы.
Сбой HY010 (Function sequence error) возникает из-за несовместимости механизмов реструктуризации 1С 7.7 с обновленным стеком компонентов доступа к данным (WDAC / MDAC), встроенным в Windows Vista, Windows 7 и более поздние ОС.
Рассмотрим ключевые факторы сбоя подробнее:
sqlsrv32.dll версии 6.x и выше строго контролирует последовательность вызовов API ODBC (состояния дескрипторов hstmt и hdbc). Конфигуратор 1С 7.7 во время реструктуризации таблиц отправляет служебные DDL-команды до того, как будут закрыты предыдущие курсоры. Драйверы эпохи Windows XP и Windows Server 2003 (версии 2000.8x) допускали такое поведение, а современный драйвер возвращает ошибку последовательности функций.C:\Windows\SysWOW64, а не в C:\Windows\System32. Если замена библиотек производилась в каталоге System32, платформа продолжает обращаться к системному 64-битному драйверу через подсистему WOW64, что не решает проблему.TrustedInstaller. При попытке простой перезаписи файлы либо не копируются, либо моментально восстанавливаются операционной системой в фоновом режиме.Самый распространенный классический метод — замена штатных библиотек sqlsrv32.dll, sqlsrv32.rll и odbcbcp.dll на версии из дистрибутивов Windows XP SP3 или Windows Server 2003 SP2.
Разберем по шагам правильный порядок действий для 64-битной Windows 7:
C:\Windows\SysWOW64 (именно в него, так как 1С 7.7 является 32-битной программой).sqlsrv32.dll, sqlsrv32.rll, odbcbcp.dll) открываем свойства, переходим на вкладку «Безопасность» -> «Дополнительно» -> «Владелец» и передаем права владения текущему администратору..bak) и копируем на их место файлы старой версии (MDAC 2.8).Если изменять системные файлы операционной системы нежелательно или запрещено политиками безопасности компании, применим способ ручного внесения изменений в структуру базы данных. Этот подход позволяет полностью избежать запуска встроенного механизма реструктуризации 1С.
Разберем процедуру по шагам:
1Cv7.MD и словарь данных 1Cv7.DDS.1Cv7.DDS текстовым редактором и находим описание нашего справочника. Выясняем физическое имя SQL-таблицы (например, SC123) и точное имя нового поля (например, SP125), а также его SQL-тип данных и длину.
ALTER TABLE dbo.SC123
ADD SP125 CHAR(50) NOT NULL DEFAULT '';
ALTER TABLE dbo.SC123
ADD SP125 NUMERIC(10, 2) NOT NULL DEFAULT 0;
1Cv7.MD и 1Cv7.DDS в каталоге рабочей информационной базы на файлы, полученные на шаге 2.Чтобы не подменять системные файлы в каталоге Windows (что может негативно повлиять на работу другого программного обеспечения), зарегистрируем старые библиотеки локально.
Разберем этот вариант:
sqlsrv32.dll, sqlsrv32.rll и odbcbcp.dll старой версии в каталог платформы C:\Program Files (x86)\1Cv77\BIN\.regedit.HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI\SQL Server(Для 32-разрядных версий Windows путь будет без узла Wow6432Node).Driver и Setup и изменяем пути, указав прямое расположение файлов в каталоге BIN платформы 1С.В профессиональном сообществе наиболее надежным и долгосрочным решением считается переход на модифицированные («пропатченные») сборки платформы 1С 7.7, в которых на уровне бинарного кода (BkEnd.dll) сняты ограничения на работу с современными версиями Microsoft SQL Server (2005, 2008, 2012 и выше).
В таких сборках алгоритм взаимодействия с драйвером ODBC скорректирован: вызовы закрытия дескрипторов выполняются корректно, что полностью исключает возникновение ошибки HY010 даже при использовании новейших системных библиотек Windows без их модификации.
При эксплуатации баз данных 1С 7.7 на версиях MS SQL Server 2005 и выше обязательно контролируем следующие параметры сервера:
ALTER DATABASE [ИмяБазы1С] SET COMPATIBILITY_LEVEL = 80;При более высоких уровнях совместимости синтаксис некоторых системных команд Конфигуратора вызывает внутренние ошибки SQL-парсера.db_owner в рабочей базе, но и серверную роль processadmin (для проверки блокировок через системную таблицу master..sysprocesses), а на время выполнения реструктуризации рекомендуется временно давать роль sysadmin.