Почему в 1С 7.7 возникает ошибка «Неудачная попытка создания объекта (ADODB.Connection)» на 64-битных серверах и как её исправить

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

Ситуация, когда привычный код Connection = СоздатьОбъект("ADODB.Connection"); внезапно перестает работать в 1С 7.7, — это классическая проблема при переходе на 64-битные операционные системы (например, Windows Server 2003 x64, Server 2008 R2 и выше). Самое коварное в этой ошибке то, что на том же сервере 1С:Предприятие 8.x и обычные скрипты могут работать абсолютно нормально. Это создает иллюзию того, что компоненты MDAC или ADO в порядке, хотя проблема кроется именно во взаимодействии 32-битного приложения 1С 7.7 с 64-битной системной средой.

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

Причина возникновения проблемы: конфликт разрядностей

Разберем ситуацию глубже. Платформа 1С 7.7 является строго 32-битным приложением. В 64-битных версиях Windows для работы таких программ используется специальный слой эмуляции WOW64 (Windows on Windows 64-bit). Проблема заключается в том, что 32-битное приложение может вызывать только 32-битные COM-объекты. В то же время 1С 8.x (если установлен 64-битный сервер или клиент) и стандартный интерпретатор команд (VBScript) зачастую работают в 64-битном режиме и обращаются к соответствующим 64-битным библиотекам ADO. Именно поэтому в одной среде объект создается, а в другой — нет.

Проанализируем основные способы решения этой проблемы.

Решение 1: Регистрация 32-битной библиотеки ADO

На 64-битных системах существует две версии утилиты регистрации библиотек regsvr32.exe. Стандартная утилита, находящаяся в System32, предназначена для 64-битных компонентов. Для 1С 7.7 нам нужно принудительно зарегистрировать 32-битную версию библиотеки msado15.dll.

Рассмотрим пошаговый алгоритм:

  1. Откройте командную строку (cmd) обязательно от имени администратора.
  2. Перейдите в каталог, содержащий 32-битную версию регистратора. Введите команду: cd C:\Windows\SysWOW64
  3. Выполните регистрацию библиотеки ADO, которая находится в папке Common Files (x86). Введите следующую команду: regsvr32.exe "C:\Program Files (x86)\Common Files\System\ado\msado15.dll"

Важный момент: Обратите внимание, что путь к библиотеке должен вести именно в Program Files (x86). Если после регистрации система выдала сообщение об успехе, попробуйте снова запустить 1С 7.7 и проверить создание объекта.

Решение 2: Диагностика через 32-битный VBScript

Чтобы окончательно убедиться, что проблема именно в 32-битной подсистеме, а не в самой 1С, мы можем провести тест. Если мы просто запустим .vbs файл двойным кликом, Windows запустит его через 64-битный интерпретатор, и тест может пройти успешно, даже если 1С не работает.

Создадим тестовый файл test_ado.vbs со следующим кодом:


On Error Resume Next
Set objConn = CreateObject("ADODB.Connection")
If Err.Number <> 0 Then
    WScript.Echo "Ошибка создания объекта: " & Err.Description
Else
    WScript.Echo "Объект ADODB.Connection успешно создан!"
End If

Теперь запустим его принудительно через 32-битный интерпретатор. Выполните в командной строке:

C:\Windows\SysWOW64\wscript.exe "C:\путь_к_файлу\test_ado.vbs"

Если этот скрипт выдаст ошибку, значит, проблема в системных компонентах MDAC/WDAC для 32-битных приложений. Если скрипт работает, а 1С — нет, значит, проблему нужно искать в правах доступа конкретного пользователя или настройках DEP.

Решение 3: Проверка ветки реестра Wow6432Node

32-битные приложения ищут информацию о COM-классах в специальном разделе реестра HKEY_CLASSES_ROOT\Wow6432Node\CLSID\. Иногда при обновлении системы или установке стороннего ПО права доступа к этой ветке могут быть нарушены, или записи о ADODB.Connection могут быть повреждены.

Проанализируем ситуацию в реестре:

  1. Запустите regedit.
  2. Перейдите в раздел HKEY_CLASSES_ROOT\CLSID\{00000514-0000-0010-8000-00AA006D2EA4}. Это основной идентификатор ADODB.Connection.
  3. Затем проверьте наличие этого же ключа в HKEY_CLASSES_ROOT\Wow6432Node\CLSID\.
  4. Убедитесь, что группа «Пользователи» (или «Все») имеет права на Чтение этих веток. Если прав недостаточно, 1С не сможет прочитать путь к библиотеке и выдаст «Неудачную попытку создания объекта».

Решение 4: Настройка DEP (Предотвращение выполнения данных)

Система DEP (Data Execution Prevention) на серверных ОС часто блокирует работу старых COM-объектов внутри 32-битных процессов. Даже если вы «дергали» настройки, разберем, как сделать это правильно для 1С 7.7.

Выясним правильный алгоритм настройки:

  1. Откройте «Свойства системы» -> «Дополнительно» -> «Производительность» -> «Параметры» -> «Предотвращение выполнения данных».
  2. Если выбран вариант «Включить DEP для всех программ и служб, кроме выбранных ниже», обязательно добавьте в список исключений файл 1cv7s.exe (или 1cv7.exe, в зависимости от версии).
  3. В некоторых случаях на 64-битных системах требуется также добавить dllhost.exe из папки SysWOW64, если ADO работает в отдельном процессе.
  4. После внесения изменений обязательно перезагрузите сервер, так как настройки DEP часто не вступают в силу мгновенно.

Решение 5: Исправление прав доступа на папки Common Files

Иногда проблема кроется в банальном отсутствии прав на чтение файлов библиотек. Даже если пользователь является администратором, механизмы безопасности Windows могут ограничивать доступ к системным папкам для определенных процессов.

Проверим права доступа на физическую папку:

  1. Перейдите к каталогу C:\Program Files (x86)\Common Files\System\ado\.
  2. Нажмите правой кнопкой мыши -> «Свойства» -> «Безопасность».
  3. Убедитесь, что у группы «Пользователи» есть права «Чтение и выполнение».
  4. Нажмите «Дополнительно» и включите опцию «Заменить все записи разрешений дочернего объекта наследуемыми от этого объекта». Это гарантирует, что файл msado15.dll получит нужные права.

Резюме

Ошибка создания объекта ADODB.Connection в 1С 7.7 почти всегда связана с тем, что 32-битная подсистема WOW64 не может правильно инициализировать библиотеку ADO. В большинстве случаев помогает принудительная регистрация библиотеки через 32-битный regsvr32 и проверка прав доступа в ветке реестра Wow6432Node. Если эти действия не помогают, следует обратить внимание на настройки DEP и провести тест через 32-битный WScript, чтобы локализовать проблему вне рамок платформы 1С.

← На главную