Как исправить ошибку «ADODB.Connection: Не удается найти указанный поставщик» при переходе на 64-разрядный сервер?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При переносе баз данных 1С:Предприятие на новый сервер под управлением современной 64-разрядной операционной системы (например, Windows Server 2016/2019/2022) разработчики и администраторы часто сталкиваются со сбоями в работе регламентных заданий. Одной из самых распространенных неполадок является ошибка инициализации внешних источников данных: «Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (ADODB.Connection): Не удается найти указанный поставщик. Вероятно, он установлен неправильно». Если при переезде требуется привести в порядок обслуживание всей инфраструктуры, инструмент для автоматического обновления и архивации нескольких баз 1С позволит выполнять технические регламенты в тихом режиме.

В этой статье мы подробно разберем, почему возникает данная проблема, проанализируем архитектурные ограничения Windows и научимся по шагам настраивать окружение сервера для стабильной работы механизмов интеграции 1С с СУБД Access (файлы форматов MDB и ACCDB) и другими внешними источниками через ADO.

Выясняем первопричину: конфликт разрядностей (32-бит против 64-бит)

Для начала давайте разберемся, почему на старом сервере все работало без нареканий, а на новом возникла ошибка. Ключевая причина кроется в архитектуре процессов операционной системы и платформы 1С.

Когда регламентное задание выполняется на сервере 1С, оно запускается внутри процесса rphost.exe. На старых серверах часто использовалась 32-разрядная версия сервера 1С, либо в системе были установлены устаревшие 32-битные драйверы баз данных, такие как Microsoft.Jet.OLEDB.4.0. На новом 64-разрядном сервере служба 1С функционирует как 64-битный процесс. Согласно архитектурным ограничениям Windows, 64-битный процесс физически не может загрузить в свое адресное пространство 32-битные динамические библиотеки (DLL) провайдеров данных.

Если в кодовой базе 1С прописана строка подключения с использованием старого драйвера Jet, система выдаст ошибку, так как 64-разрядной версии драйвера Jet в природе не существует. Для успешной интеграции нам потребуется перейти на современное семейство драйверов Microsoft Access Database Engine (провайдеры ACE OLEDB) и настроить их корректную работу в 64-битном окружении.

Шаг 1. Диагностика доступных провайдеров с помощью UDL-файла

Прежде чем приступать к установке нового программного обеспечения, давайте проверим, какие именно OLE DB провайдеры в данный момент зарегистрированы в вашей операционной системе. Для этого мы применим классический и очень надежный инструмент — файл универсальной связи с данными (UDL).

Рассмотрим процедуру проверки по шагам:

  1. Создайте на рабочем столе сервера пустой текстовый файл и переименуйте его, изменив расширение на .udl (например, test.udl).
  2. Дважды щелкните по созданному файлу левой кнопкой мыши. Откроется стандартное системное окно «Свойства связи с данными».
  3. Перейдите на вкладку «Поставщик данных» (Providers).
  4. Проанализируйте представленный список. Если в списке отсутствуют строки Microsoft.ACE.OLEDB.12.0 или Microsoft.ACE.OLEDB.16.0, это означает, что нужный нам 64-разрядный драйвер на сервере не установлен.

Важный технический нюанс: По умолчанию в 64-битной Windows двойной клик по UDL-файлу запускает его 64-разрядную версию. Если же вам когда-либо понадобится проверить наличие установленных 32-битных драйверов, запускать этот файл необходимо через специальную команду в консоли cmd:


%systemroot%\syswow64\rundll32.exe "C:\Program Files (x86)\Common Files\System\Ole DB\oledb32.dll",OpenDSLFile C:\test.udl

Шаг 2. Принудительная установка 64-битного драйвера Access Database Engine

Чтобы предоставить 64-битному процессу 1С возможность читать файлы Access, необходимо скачать официальный пакет драйверов с сайта Microsoft. Вам понадобятся установщики пакетов AccessDatabaseEngine_X64.exe версии 12.0 (2010 год) или версии 16.0 (2016 год).

Однако на этом этапе системные администраторы часто сталкиваются со следующей проблемой: если на сервере уже установлен стандартный пакет Microsoft Office (например, Word или Excel) 32-разрядной версии, стандартный инсталлятор заблокирует установку 64-битного драйвера, выдав предупреждение о несовместимости продуктов разной битности.

Чтобы обойти эту блокировку и установить драйвер принудительно, выполните установку через командную строку с флагом пассивного режима:

  1. Откройте командную строку Windows (cmd) обязательно от имени Администратора.
  2. Введите путь к скачанному файлу установщика и добавьте специальный ключ. Например:

C:\Distr\AccessDatabaseEngine_X64.exe /passive

Или, если используется более новая версия:

C:\Distr\AccessDatabaseEngine2016_X64.exe /quiet

Параметры /passive и /quiet заставляют инсталлятор выполнить тихую установку в обход проверок совместимости разрядностей программного обеспечения.

Шаг 3. Устранение циклической настройки Microsoft Office после установки

После форсированной установки 64-разрядного драйвера поверх 32-битного Microsoft Office может возникнуть неприятный побочный эффект: при каждом запуске обычных офисных приложений (например, Microsoft Excel) система начнет запускать процесс бесконечной реконфигурации («Идет подготовка к первому запуску...»).

Чтобы решить эту проблему и подружить компоненты разной разрядности, нам необходимо внести точечное изменение в системный реестр Windows:

  1. Откройте редактор реестра, нажав комбинацию клавиш Win + R и введя команду regedit.
  2. Перейдите по следующему пути ветки реестра (версия в пути зависит от версии вашего MS Office, например, 16.0 для Office 2016):
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Common\FilesPaths
  3. Найдите в этой ветке строковый параметр с именем mso.dll.
  4. Удалите или переименуйте этот параметр (например, в mso_backup.dll).

После этого конфликты между установленным 32-битным пакетом Office и 64-битным драйвером базы данных прекратятся.

Шаг 4. Обновление кода подключения в конфигурации 1С

Теперь, когда необходимый драйвер гарантированно развернут в системе, мы должны скорректировать программный код в нашей конфигурации 1С. Если ранее вы использовали устаревший провайдер Jet, строку подключения обязательно нужно перевести на семейство ACE.

Посмотрим на пример правильной инициализации подключения к файлу базы данных Access на стороне сервера 1С:


&НаСервере
Процедура ПодключитьсяКБазеAccess()
    
    ПутьКФайлуБД = "C:\Exchange\DataBD.accdb"; // Или файл .mdb
    
    // Создаем объект подключения через COM-соединение
    Попытка
        Подключение = Новый COMОбъект("ADODB.Connection");
    Исключение
        ЗаписатьЛогОшибок("Не удалось создать объект ADODB.Connection. Проверьте регистрацию библиотек COM.");
        Возврат;
    КонецПопытки;
    
    // Формируем правильную строку подключения с использованием провайдера ACE 12.0 или 16.0
    СтрокаПодключения = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ПутьКФайлуБД + ";Persist Security Info=False;";
    
    Попытка
        Подключение.Open(СтрокаПодключения);
        Сообщить("Подключение к базе данных Access успешно установлено!");
    Исключение
        ВызватьИсключение "Ошибка открытия файла БД: " + ОписаниеОшибки();
    КонецПопытки;
    
    // Далее выполняем необходимые операции с данными...
    
    Подключение.Close();
    
КонецПроцедуры

Внимательно проанализируйте свой код на наличие жестко прописанного старого провайдера Microsoft.Jet.OLEDB.4.0 и замените его на Microsoft.ACE.OLEDB.12.0 (или 16.0 в зависимости от установленной версии драйвера).

Шаг 5. Настройка прав доступа к папке TEMP для службы сервера 1С

Даже если драйвер установлен корректно и строка подключения настроена правильно, регламентное задание 1С все равно может завершаться аварийно. Это связано с тем, что регламентные задания всегда выполняются под учетной записью, от имени которой запущена служба сервера 1С:Предприятие (как правило, это локальный пользователь USR1CV8 или системная учетная запись NetworkService).

Провайдеру ACE OLEDB в процессе инициализации и работы требуются права на создание временных файлов во временной папке Temp этой учетной записи. Нам необходимо предоставить полные права на чтение и запись для пользователя службы 1С на следующие каталоги:

Без предоставления этих прав Windows заблокирует создание временного конфигурационного файла провайдера, и вы снова получите системную ошибку при вызове метода Open().

Шаг 6. Настройка параметров провайдера на стороне MS SQL Server

Если вы решили осуществлять выборку данных из Access напрямую через SQL-запросы на сервере СУБД (например, используя распределенные запросы OPENROWSET или OPENDATASOURCE), вам потребуется дополнительно сконфигурировать свойства провайдера внутри самого MS SQL Server.

По умолчанию MS SQL Server блокирует выполнение сторонних провайдеров «внутри» своего рабочего процесса из соображений безопасности и стабильности. Разрешим использование провайдера, выполнив в SQL Server Management Studio следующий T-SQL скрипт:


-- Разрешаем использование распределенных запросов
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO

-- Настраиваем свойства провайдера ACE OLEDB для работы внутри процесса SQL Server
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1;
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1;
GO

Выполнение этих настроек позволит SQL-серверу беспрепятственно использовать установленный в системе драйвер для импорта и экспорта файлов баз данных Access. Для организации на базе исправленного соединения постоянной синхронизации программа для автоматизации регулярного обмена данными между 1С обеспечит выполнение заданий строго по расписанию.

Подведем итоги

Мы детально разобрали процесс миграции интеграционных механизмов 1С с СУБД Access на новые 64-разрядные серверные платформы. Как мы выяснили, успешное решение проблемы складывается из правильного выбора разрядности драйвера, корректного обхода ограничений установщика MS Office, настройки строки подключения в конфигураторе 1С и назначения необходимых прав доступа файловой системы для учетной записи службы 1С. Выполнив все указанные шаги, вы обеспечите стабильную и быструю работу регламентных заданий по обмену данными. Чтобы исключить ошибки в учете после настройки интеграции, автоматическая сверка бухгалтерских и налоговых проводок между базами 1С поможет быстро найти и устранить возможные расхождения.

← На главную