Как исправить ошибку «Неудачная попытка создания объекта (ODBCDataBase)» при переносе 1С 7.7 на 64-битную Windows?

Системный администратор 1С v7.7 IT и автоматизация бизнеса
← На главную

Перенос устаревших баз данных 1С:Предприятие 7.7 на современные 64-разрядные серверные платформы часто сопровождается нетипичными техническими сбоями. Одной из распространенных проблем является ошибка времени выполнения «Неудачная попытка создания объекта (ODBCDataBase)». Выясним причину ее возникновения и разберем по шагам порядок действий, необходимых для стабильной работы базы данных и внешних компонент в среде 64-разрядной операционной системы с Microsoft SQL Server.

Причины сбоя инициализации объекта ODBCDataBase

Класс ODBCDataBase не входит в базовую поставку платформы 1С 7.7. Он является частью популярной открытой внешней компоненты 1cpp.dll (1С++), которая предоставляет расширенные возможности взаимодействия с базой данных через прямые SQL-запросы. Сбой при вызове метода СоздатьОбъект("ODBCDataBase") возникает в следующих ситуациях:

  1. Файл 1cpp.dll отсутствует в каталоге исполняемых файлов платформы BIN либо в каталоге информационной базы.
  2. У учетной записи пользователя Windows или службы терминалов отсутствуют права на чтение и исполнение указанной библиотеки.
  3. В операционной системе отсутствуют runtime-библиотеки компилятора Visual C++, от которых зависит DLL.
  4. Попытка ручной регистрации 32-битной компоненты была выполнена через 64-битную версию системной утилиты.

Шаг 1. Проверяем размещение и загрузку 1cpp.dll

Проанализируем архитектуру подключения внешней компоненты. Для функционирования класса 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"

Шаг 2. Устраняем нехватку системных зависимостей (Visual C++)

Библиотека 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.

Шаг 3. Настраиваем источники данных ODBC и параметры подключения

Разберем еще один нюанс настройки прямого доступа к базам данных. При использовании системных или пользовательских DSN необходимо помнить, что стандартный апплет панели управления Windows запускает 64-разрядный администратор ODBC. 32-битный процесс платформы 1cv7s.exe не увидит созданные там источники.

Настройку системных DSN следует производить строго через исполняемый файл C:\Windows\SysWOW64\odbcad32.exe. Кроме того, проверим корректность строки инициализации объекта в коде модулей конфигурации:


СтрокаПодключения = "Driver={SQL Server};Server=" + СокрЛП(ИмяСервера) + ";Database=" + СокрЛП(ИмяБД) + ";Uid=" + СокрЛП(Пользователь) + ";Pwd=" + СокрЛП(Пароль) + ";";
Если БазаДанных.Соединение(СтрокаПодключения) = 0 Тогда
    Сообщить("Ошибка подключения к SQL-серверу!");
КонецЕсли;

Шаг 4. Взаимодействие 1С 7.7 с MS SQL Server 2005 и выше

Посмотрим на особенности взаимодействия 1С 7.7 с версиями СУБД новее Microsoft SQL Server 2000. Штатная платформа проверяет версию СУБД с помощью функции SELECT @@VERSION. Если номер версии выше 8.x, 1С аварийно завершает работу с системным сообщением о неподдерживаемой версии базы данных.

Важно понимать: перевод базы данных на уровень совместимости Compatibility Level 80 (SQL 2000) через свойства базы на SQL Server не решает проблему, так как глобальная версия СУБД от этого не меняется. Для обеспечения совместимости применяют два подхода:

  1. Байт-патч библиотеки BkEnd.dll: просто отключает проверку версии SQL Server. Этот метод позволяет запустить базу, однако платформа продолжает слать устаревшие запросы к таблицам sysprocesses и syslocks. На версиях SQL Server 2005 и старше это часто приводит к мертвым блокировкам (дедлокам) и существенному падению быстродействия.
  2. Использование комплекта библиотек («секретный релиз» BkEnd.dll и BkEndUtls.dll): специальный набор модифицированных библиотек перехватывает служебные запросы платформы к системным таблицам и автоматически транслирует их в вызовы современных динамических представлений (DMV). Этот вариант обеспечивает стабильную и быструю работу транзакций и блокировок на современных редакциях MS SQL Server.

Также при переносе базы на SQL Server 2005 и выше часто возникает ошибка несовпадения порядка сортировки. Для корректной работы базы зададим правильный collation на уровне базы (Cyrillic_General_CI_AS) либо поместим пустой файл-маркер OrdNoChk.prm в каталог BIN платформы или в корневой каталог рабочей информационной базы, чтобы полностью отключить внутреннюю проверку порядка сортировки.

← На главную