Перенос устаревших баз данных 1С:Предприятие 7.7 на современные 64-разрядные серверные платформы часто сопровождается нетипичными техническими сбоями. Одной из распространенных проблем является ошибка времени выполнения «Неудачная попытка создания объекта (ODBCDataBase)». Выясним причину ее возникновения и разберем по шагам порядок действий, необходимых для стабильной работы базы данных и внешних компонент в среде 64-разрядной операционной системы с Microsoft SQL Server.
Класс ODBCDataBase не входит в базовую поставку платформы 1С 7.7. Он является частью популярной открытой внешней компоненты 1cpp.dll (1С++), которая предоставляет расширенные возможности взаимодействия с базой данных через прямые SQL-запросы. Сбой при вызове метода СоздатьОбъект("ODBCDataBase") возникает в следующих ситуациях:
1cpp.dll отсутствует в каталоге исполняемых файлов платформы BIN либо в каталоге информационной базы.Проанализируем архитектуру подключения внешней компоненты. Для функционирования класса ODBCDataBase не требуется жесткая регистрация библиотеки в реестре операционной системы. Достаточно, чтобы компонента была правильно загружена программно в глобальном модуле конфигурации.
Убедимся, что файл 1cpp.dll скопирован в каталог BIN установленной платформы (например, C:\Program Files (x86)\1Cv77\BIN) или непосредственно в рабочий каталог базы данных. В коде инициализации конфигурации должен присутствовать вызов загрузки внешней компоненты:
Если ЗагрузитьВнешнююКомпоненту("1cpp.dll") = 0 Тогда
Предупреждение("Не удалось загрузить компоненту 1C++!");
КонецЕсли;
БазаДанных = СоздатьОбъект("ODBCDataBase");
Если же возникает необходимость зарегистрировать библиотеку в реестре вручную через утилиту regsvr32, важно помнить об особенностях 64-разрядных версий Windows. Запуск команды по умолчанию из командной строки вызывает 64-битную версию из папки System32, которая вернет ошибку несовместимости при попытке зарегистрировать 32-битную DLL. Регистрацию следует выполнять строго через 32-битную версию утилиты из каталога SysWOW64:
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1Cv77\BIN\1cpp.dll"
Библиотека 1cpp.dll скомпилирована в среде Microsoft Visual C++ и зависит от вспомогательных библиотек среды выполнения. На «чистых» 64-битных серверах (Windows Server 2003 x64, 2008 R2 и выше) необходимые файлы могут отсутствовать. В этом случае операционная система молча блокирует динамическую загрузку компоненты в адресное пространство процесса платформы.
Для исправления проблемы убедимся, что на сервере установлены 32-разрядные (x86) пакеты распространяемых компонентов Visual C++ Redistributable, а также проверим наличие в системной папке C:\Windows\SysWOW64 файлов msvcr71.dll и msvcp71.dll. При необходимости скопируем указанные файлы в каталог BIN платформы 1С 7.7.
Разберем еще один нюанс настройки прямого доступа к базам данных. При использовании системных или пользовательских DSN необходимо помнить, что стандартный апплет панели управления Windows запускает 64-разрядный администратор ODBC. 32-битный процесс платформы 1cv7s.exe не увидит созданные там источники.
Настройку системных DSN следует производить строго через исполняемый файл C:\Windows\SysWOW64\odbcad32.exe. Кроме того, проверим корректность строки инициализации объекта в коде модулей конфигурации:
СтрокаПодключения = "Driver={SQL Server};Server=" + СокрЛП(ИмяСервера) + ";Database=" + СокрЛП(ИмяБД) + ";Uid=" + СокрЛП(Пользователь) + ";Pwd=" + СокрЛП(Пароль) + ";";
Если БазаДанных.Соединение(СтрокаПодключения) = 0 Тогда
Сообщить("Ошибка подключения к SQL-серверу!");
КонецЕсли;
Посмотрим на особенности взаимодействия 1С 7.7 с версиями СУБД новее Microsoft SQL Server 2000. Штатная платформа проверяет версию СУБД с помощью функции SELECT @@VERSION. Если номер версии выше 8.x, 1С аварийно завершает работу с системным сообщением о неподдерживаемой версии базы данных.
Важно понимать: перевод базы данных на уровень совместимости Compatibility Level 80 (SQL 2000) через свойства базы на SQL Server не решает проблему, так как глобальная версия СУБД от этого не меняется. Для обеспечения совместимости применяют два подхода:
sysprocesses и syslocks. На версиях SQL Server 2005 и старше это часто приводит к мертвым блокировкам (дедлокам) и существенному падению быстродействия.Также при переносе базы на SQL Server 2005 и выше часто возникает ошибка несовпадения порядка сортировки. Для корректной работы базы зададим правильный collation на уровне базы (Cyrillic_General_CI_AS) либо поместим пустой файл-маркер OrdNoChk.prm в каталог BIN платформы или в корневой каталог рабочей информационной базы, чтобы полностью отключить внутреннюю проверку порядка сортировки.