При настройке интеграции 1С:Предприятия с Microsoft SQL Server через механизм Внешние источники данных (ВИД) разработчики часто сталкиваются с ошибкой ODBC: «Источник данных не найден и не указан драйвер, используемый по умолчанию» (код ошибки IM002). Разберем причины возникновения этой проблемы и рассмотрим по шагам, как правильно настроить драйверы, строку подключения и программную инициализацию внешнего источника данных.
Проанализируем ключевые факторы, приводящие к сбою соединения:
DRIVER={...} указать имя, не зарегистрированное в системе, диспетчер ODBC вернет ошибку. Имена драйверов должны совпадать посимвольно (например, устаревший системный драйвер {SQL Server}, драйвер {SQL Server Native Client 11.0} и автономный {ODBC Driver 11 for SQL Server} — это совершенно разные библиотеки).ADODB.Connection и его открытие не инициализирует объект метаданных ВнешнийИсточникДанных. Платформа 1С выполняет запрос к внешней таблице через свой собственный механизм. Если параметры подключения для внешнего источника не были предварительно переданы, 1С пытается соединиться с пустыми параметрами, что вызывает ошибку драйвера.Выясним, какие драйверы зарегистрированы в операционной системе для используемой платформы 1С. Для 32-разрядной версии 1С:Предприятия необходимо запускать 32-разрядный диспетчер ODBC.
Разберем порядок проверки:
C:\Windows\SysWOW64\odbcad32.exe, а для 64-разрядных — C:\Windows\System32\odbcad32.exe.SQL Server Native Client 11.0 или ODBC Driver 11 for SQL Server.Рассмотрим, как задать параметры подключения внешнего источника данных в пользовательском интерфейсе.
В управляемом интерфейсе (Такси):
DRIVER={SQL Server Native Client 11.0};SERVER=kvazar;UID=sa;PWD=1234;DATABASE=Northwind;Если используется обычный интерфейс (толстый клиент), пункт управления внешними источниками данных отсутствует в меню «Операции». В таком случае параметры достаточно один раз задать через интерфейс управляемых форм либо выполнить настройку программно.
Посмотрим на пример кода, позволяющего динамически передать параметры подключения и открыть соединение перед выполнением запроса 1С к таблицам внешнего источника данных:
// Получаем общие параметры подключения из метаданных
Параметры = ВнешниеИсточникиДанных.Боерей.ПолучитьОбщиеПараметрыСоединения();
Параметры.СУБД = "MSSQLServer";
Параметры.СтрокаСоединения = "DRIVER={SQL Server Native Client 11.0};SERVER=kvazar;UID=sa;PWD=1234;DATABASE=Northwind;";
Параметры.АутентификацияСтандартная = Истина;
// Устанавливаем параметры соединения для текущего сеанса
ВнешниеИсточникиДанных.Боерей.УстановитьПараметрыСоединенияСеанса(Параметры);
// Явно устанавливаем соединение с внешней СУБД
ВнешниеИсточникиДанных.Боерей.УстановитьСоединение();
// Выполняем запрос к таблице внешнего источника данных
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| dbo_Categories.CategoryID КАК CategoryID,
| dbo_Categories.CategoryName КАК CategoryName,
| dbo_Categories.Description КАК Description
|ИЗ
| ВнешнийИсточникДанных.Боерей.Таблица.dbo_Categories КАК dbo_Categories";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.CategoryName);
КонецЦикла;
Обратим внимание: использование объекта ADODB.Connection не требуется, если работа ведется через метаданные ВнешнийИсточникДанных. Платформа 1С самостоятельно берет на себя трансляцию запросов и получение данных через системный драйвер ODBC.
При дальнейшей эксплуатации внешних источников данных важно помнить о системных ограничениях:
&НаСервере или регламентных заданиях), драйвер ODBC и системный DSN должны быть установлены непосредственно на сервере 1С:Предприятия. Разрядность драйвера обязана строго совпадать с разрядностью службы rphost (для 64-битного сервера требуется 64-битный драйвер). Серверные службы не видят пользовательские DSN, поэтому настраивать необходимо исключительно Системный DSN (System DSN).