Ситуация, когда привычный код 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. Именно поэтому в одной среде объект создается, а в другой — нет.
Проанализируем основные способы решения этой проблемы.
На 64-битных системах существует две версии утилиты регистрации библиотек regsvr32.exe. Стандартная утилита, находящаяся в System32, предназначена для 64-битных компонентов. Для 1С 7.7 нам нужно принудительно зарегистрировать 32-битную версию библиотеки msado15.dll.
Рассмотрим пошаговый алгоритм:
cd C:\Windows\SysWOW64
ADO, которая находится в папке Common Files (x86). Введите следующую команду:
regsvr32.exe "C:\Program Files (x86)\Common Files\System\ado\msado15.dll"
Важный момент: Обратите внимание, что путь к библиотеке должен вести именно в Program Files (x86). Если после регистрации система выдала сообщение об успехе, попробуйте снова запустить 1С 7.7 и проверить создание объекта.
Чтобы окончательно убедиться, что проблема именно в 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.
32-битные приложения ищут информацию о COM-классах в специальном разделе реестра HKEY_CLASSES_ROOT\Wow6432Node\CLSID\. Иногда при обновлении системы или установке стороннего ПО права доступа к этой ветке могут быть нарушены, или записи о ADODB.Connection могут быть повреждены.
Проанализируем ситуацию в реестре:
regedit.HKEY_CLASSES_ROOT\CLSID\{00000514-0000-0010-8000-00AA006D2EA4}. Это основной идентификатор ADODB.Connection.HKEY_CLASSES_ROOT\Wow6432Node\CLSID\.Система DEP (Data Execution Prevention) на серверных ОС часто блокирует работу старых COM-объектов внутри 32-битных процессов. Даже если вы «дергали» настройки, разберем, как сделать это правильно для 1С 7.7.
Выясним правильный алгоритм настройки:
1cv7s.exe (или 1cv7.exe, в зависимости от версии).dllhost.exe из папки SysWOW64, если ADO работает в отдельном процессе.Иногда проблема кроется в банальном отсутствии прав на чтение файлов библиотек. Даже если пользователь является администратором, механизмы безопасности Windows могут ограничивать доступ к системным папкам для определенных процессов.
Проверим права доступа на физическую папку:
C:\Program Files (x86)\Common Files\System\ado\.msado15.dll получит нужные права.Ошибка создания объекта ADODB.Connection в 1С 7.7 почти всегда связана с тем, что 32-битная подсистема WOW64 не может правильно инициализировать библиотеку ADO. В большинстве случаев помогает принудительная регистрация библиотеки через 32-битный regsvr32 и проверка прав доступа в ветке реестра Wow6432Node. Если эти действия не помогают, следует обратить внимание на настройки DEP и провести тест через 32-битный WScript, чтобы локализовать проблему вне рамок платформы 1С.