При интеграции 1С с внешними файлами (например, при загрузке данных из Excel или Access) программисты часто используют механизм COM-объектов и технологию ADO. Одной из самых коварных ошибок в этом процессе является сообщение: «Произошла исключительная ситуация (ADODB.Connection): Не удается найти указанный поставщик. Вероятно, он установлен неправильно». Ситуация осложняется тем, что вчера код мог работать идеально, а сегодня «сломаться» после обновления Windows или Office. Однако для некоторых частых задач, например чтобы загружать отчеты маркетплейсов из Excel в 1С:БП 3.0, можно избежать написания скриптов и использовать готовую обработку.
В этой статье мы подробно разберем причины возникновения этой ошибки, научимся диагностировать доступных провайдеров в системе и найдем правильные строки подключения для разных условий.
Основная причина, по которой 1С «не видит» установленный драйвер, заключается в несовпадении разрядности приложения 1С и установленного в системе провайдера OLE DB. Рассмотрим эту ситуацию подробнее:
Старый провайдер Microsoft.Jet.OLEDB.4.0 существует исключительно в 32-битном варианте. Если вы пытаетесь запустить код с этим провайдером на 64-битной платформе 1С, вы неизбежно получите ошибку отсутствия поставщика. Для современных систем и 64-битных приложений необходимо использовать более современный провайдер — Microsoft ACE OLEDB.
Прежде чем исправлять код, нам нужно понять, какие именно драйверы установлены в вашей операционной системе. Для этого воспользуемся стандартным инструментом Windows — механизмом Data Link.
Выполним следующие действия:
.udl (например, test.udl).Здесь мы увидим список всех провайдеров, доступных для 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
Проанализируем примеры кода, которые помогают решить проблему. Если мы работаем с современными файлами 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);
Сообщить("Соединение успешно установлено!");
Исключение
Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;
Разберем параметры этой строки:
Provider=Microsoft.ACE.OLEDB.12.0 — указывает на использование движка Access Database Engine. Цифра 12.0 универсальна для многих версий Office, но если у вас установлен Office 2016+, может потребоваться версия 16.0.Data Source — полный путь к вашему файлу.Extended Properties — дополнительные параметры. Excel 12.0 используется для файлов .xlsx, HDR=YES означает, что первая строка содержит заголовки, а IMEX=1 включает режим чтения смешанных типов данных как текста, что предотвращает ошибки при наличии чисел и строк в одной колонке.Если вы не хотите гадать с синтаксисом кавычек и параметров, можно извлечь готовую строку из того самого .udl файла, который мы создали ранее:
test.udl на вкладке «Поставщик» выберите нужный драйвер.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С.
Иногда даже после установки «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 и разрядности системы).
Если борьба с драйверами ADO затянулась, рассмотрим более современный и стабильный способ, который предоставляет сама платформа 1С. Начиная с версии 8.3, объект ТабличныйДокумент умеет читать файлы .xlsx напрямую, не требуя установки никаких сторонних драйверов или наличия Excel на компьютере.
Посмотрим на пример такого кода:
ТабДок = Новый ТабличныйДокумент;
Попытка
ТабДок.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);
// Теперь мы можем обходить строки и колонки ТабДока
Для Стр = 1 По ТабДок.ВысотаТаблицы Цикл
Значение = ТабДок.Область(Стр, 1).Текст;
// Обработка данных...
КонецЦикла;
Исключение
Сообщить("Не удалось прочитать файл: " + ОписаниеОшибки());
КонецПопытки;
Этот метод избавляет от проблем с «поставщиками данных», разрядностью систем и регистрацией COM-объектов, работая одинаково хорошо как на клиенте, так и на сервере под любой операционной системой. Если же чтение файлов требуется для того, чтобы регулярно собирать и обрабатывать прайс-листы с почты или FTP, такую задачу можно делегировать специализированной программе автоматизации.
Подводя итог: если вам необходимо использовать именно ADODB.Connection, всегда проверяйте соответствие разрядности 1С и драйвера ACE, используйте .udl файлы для диагностики и не забывайте про корректное экранирование кавычек в параметрах Extended Properties.