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

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

При интеграции 1С с внешними файлами (например, при загрузке данных из Excel или Access) программисты часто используют механизм COM-объектов и технологию ADO. Одной из самых коварных ошибок в этом процессе является сообщение: «Произошла исключительная ситуация (ADODB.Connection): Не удается найти указанный поставщик. Вероятно, он установлен неправильно». Ситуация осложняется тем, что вчера код мог работать идеально, а сегодня «сломаться» после обновления Windows или Office. Однако для некоторых частых задач, например чтобы загружать отчеты маркетплейсов из Excel в 1С:БП 3.0, можно избежать написания скриптов и использовать готовую обработку.

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

Выясним причину: Конфликт разрядности (Bitness)

Основная причина, по которой 1С «не видит» установленный драйвер, заключается в несовпадении разрядности приложения 1С и установленного в системе провайдера OLE DB. Рассмотрим эту ситуацию подробнее:

  1. Если вы используете 32-битную версию клиента 1С (Enterprise), она может «общаться» только с 32-битными драйверами.
  2. Если у вас 64-битный сервер 1С или 64-битный клиент, им требуются только 64-битные версии драйверов.

Старый провайдер Microsoft.Jet.OLEDB.4.0 существует исключительно в 32-битном варианте. Если вы пытаетесь запустить код с этим провайдером на 64-битной платформе 1С, вы неизбежно получите ошибку отсутствия поставщика. Для современных систем и 64-битных приложений необходимо использовать более современный провайдер — Microsoft ACE OLEDB.

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

Прежде чем исправлять код, нам нужно понять, какие именно драйверы установлены в вашей операционной системе. Для этого воспользуемся стандартным инструментом Windows — механизмом Data Link.

Выполним следующие действия:

  1. Создадим на рабочем столе пустой текстовый файл и переименуем его, изменив расширение на .udl (например, test.udl).
  2. Запустим этот файл двойным щелчком мыши.
  3. В открывшемся окне перейдем на вкладку «Поставщик» (Providers).

Здесь мы увидим список всех провайдеров, доступных для 64-битных приложений. Если в списке нет Microsoft Office 12.0 Access Database Engine OLE DB Provider (или более новой версии), значит, драйвер ACE не установлен в 64-битном варианте.

Важный нюанс для 32-битных систем: Если ваша 1С работает в 32-битном режиме на 64-битной Windows, обычный запуск .udl вам не поможет, так как он покажет 64-битные драйверы. Чтобы проверить доступность 32-битных поставщиков, выполните команду через Win+R:

C:\Windows\syswow64\rundll32.exe "C:\Program Files (x86)\Common Files\System\Ole DB\oledb32.dll",OpenDSPage

Шаг 2. Выбор правильной строки подключения

Проанализируем примеры кода, которые помогают решить проблему. Если мы работаем с современными файлами Excel (xlsx) или хотим универсальности, нам следует ориентироваться на провайдер Microsoft.ACE.OLEDB. Рассмотрим рабочий пример строки подключения, который помог пользователю в обсуждении:


// Создаем объект соединения
Connection = Новый COMОбъект("ADODB.Connection");

// Формируем строку подключения для провайдера ACE
// Обратите внимание на кавычки в Extended Properties
Файл = "C:\my_folder\data.xlsx";
СтрокаПодключенияACE = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + Файл + ";Extended Properties=""Excel 12.0;HDR=YES;IMEX=1;""";

Попытка
    Connection.Open(СтрокаПодключенияACE);
    Сообщить("Соединение успешно установлено!");
Исключение
    Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;

Разберем параметры этой строки:

Шаг 3. Использование UDL для получения готовой строки

Если вы не хотите гадать с синтаксисом кавычек и параметров, можно извлечь готовую строку из того самого .udl файла, который мы создали ранее:

  1. В окне test.udl на вкладке «Поставщик» выберите нужный драйвер.
  2. На вкладке «Соединение» укажите путь к файлу Excel.
  3. Нажмите кнопку «Проверить соединение». Если оно успешно, нажмите «ОК».
  4. Откройте файл test.udl любым текстовым редактором (например, Блокнотом).

Внутри вы увидите нечто подобное:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Files\data.xlsx;Persist Security Info=False;Extended Properties="Excel 12.0;HDR=YES"

Эту строку можно просто скопировать в код 1С.

Шаг 4. Решение проблем с установкой компонентов

Иногда даже после установки «Microsoft Access Database Engine» ошибка сохраняется. Проанализируем возможные технические преграды:

1. Конфликт версий Office: Вы не сможете установить 64-битный ACE драйвер обычным способом, если у вас уже стоит 32-битный Microsoft Office. Установщик выдаст ошибку. Чтобы обойти это ограничение, запустите установку драйвера через командную строку с флагом /passive:

AccessDatabaseEngine_X64.exe /passive

2. Права доступа на сервере: Если код выполняется на стороне сервера 1С, проверьте, есть ли у пользователя USR1CV8 права на доступ к файлу и к временным папкам системы. Драйверы OLE DB часто используют временные файлы при чтении документов.

3. Регистрация библиотеки вручную: Если драйвер установлен, но система его не находит, можно попробовать перерегистрировать библиотеку ACEOLEDB.DLL через консоль от имени администратора:

regsvr32.exe "C:\Program Files\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL"

(Путь может отличаться в зависимости от версии Office и разрядности системы).

Альтернативный способ работы с Excel в 1С

Если борьба с драйверами ADO затянулась, рассмотрим более современный и стабильный способ, который предоставляет сама платформа 1С. Начиная с версии 8.3, объект ТабличныйДокумент умеет читать файлы .xlsx напрямую, не требуя установки никаких сторонних драйверов или наличия Excel на компьютере.

Посмотрим на пример такого кода:


ТабДок = Новый ТабличныйДокумент;
Попытка
    ТабДок.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);
    // Теперь мы можем обходить строки и колонки ТабДока
    Для Стр = 1 По ТабДок.ВысотаТаблицы Цикл
        Значение = ТабДок.Область(Стр, 1).Текст;
        // Обработка данных...
    КонецЦикла;
Исключение
    Сообщить("Не удалось прочитать файл: " + ОписаниеОшибки());
КонецПопытки;

Этот метод избавляет от проблем с «поставщиками данных», разрядностью систем и регистрацией COM-объектов, работая одинаково хорошо как на клиенте, так и на сервере под любой операционной системой. Если же чтение файлов требуется для того, чтобы регулярно собирать и обрабатывать прайс-листы с почты или FTP, такую задачу можно делегировать специализированной программе автоматизации.

Подводя итог: если вам необходимо использовать именно ADODB.Connection, всегда проверяйте соответствие разрядности 1С и драйвера ACE, используйте .udl файлы для диагностики и не забывайте про корректное экранирование кавычек в параметрах Extended Properties.

← На главную