К статье
Практический материал

Администрирование · 10 мин

Ошибка ODBC SQLSTATE IM002 (номер 0) в 1С: как найти причину и исправить

Ошибка ODBC SQLSTATE IM002 номер 0 в 1С: почему драйвер или источник данных не найден, как проверить разрядность, настроить DSN и восстановить подключение.

Ошибка «[Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию» с кодом SQLSTATE IM002 и номером ошибки 0 — одна из самых частых проблем при подключении 1С к внешним базам данных: SQL Server, MySQL, PostgreSQL, Access, Excel или сторонним учётным системам. Она возникает до начала передачи данных, поэтому поиск причины всегда начинается не с запроса, а с самого источника ODBC.

SQLSTATE IM002 означает, что диспетчер ODBC не смог найти указанный источник данных (DSN) или драйвер, к которому обращается приложение. Код 0 в паре с IM002 указывает именно на отсутствие записи в реестре или несовпадение разрядности, а не на ошибку авторизации или недоступность сервера — это важное разграничение для диагностики.

В 1С проблема чаще всего проявляется при использовании COM-объектов ADODB.Connection, при работе внешних обработок обмена данными, при подключении через строку соединения с параметром DSN или при развёртывании базы на новом компьютере, где источник данных ещё не создан. Ниже разобраны все типовые причины и порядок их устранения.

Что означает SQLSTATE IM002 и почему номер ошибки равен 0

SQLSTATE — это стандартизированный пятисимвольный код состояния, который возвращает драйвер ODBC. Префикс «IM» относится к ошибкам самого диспетчера драйверов, а не к СУБД. IM002 расшифровывается как «Data source not found and no default driver specified» — источник данных не найден, драйвер по умолчанию не указан.

Номер ошибки 0 (native error) означает, что сервер базы данных вообще не участвовал в обработке запроса: диспетчер ODBC «споткнулся» ещё на этапе поиска DSN или загрузки драйвера. Поэтому проверять логины, пароли и права на сервере БД при IM002 бессмысленно — до них дело просто не дошло.

Причина №1: несовпадение разрядности 1С и источника ODBC

64-разрядная Windows хранит два независимых списка источников ODBC: 64-разрядный и 32-разрядный. Приложение видит только «свой» список. Если 64-разрядный клиент 1С обращается к DSN, созданному в 32-разрядном администраторе, диспетчер честно отвечает IM002 — источник для него не существует.

Разрядность клиента 1С определяется установленным дистрибутивом платформы. Проверить её можно в диспетчере задач Windows: рядом с процессом 1cv8.exe у 32-разрядной версии в старых системах отображается пометка «*32», либо разрядность видна на вкладке «Подробности» через свойства исполняемого файла. Также разрядность видна в каталоге установки: 64-разрядная платформа обычно ставится в «C:\Program Files\1cv8\», 32-разрядная — в «C:\Program Files (x86)\1cv8\».

Для 32-разрядного администратора ODBC используйте файл C:\Windows\SysWOW64\odbcad32.exe, для 64-разрядного — C:\Windows\System32\odbcad32.exe. Запуск «Администратора источников данных ODBC» из панели управления на 64-разрядной системе открывает 64-разрядную версию — это частая ловушка.

Как создать DSN нужной разрядности
  1. 1
    Определите разрядность клиента 1С по каталогу установки платформы
  2. 2
    Откройте соответствующий odbcad32.exe: SysWOW64 для 32 бит, System32 для 64 бит
  3. 3
    Перейдите на вкладку «Системный DSN» и нажмите «Добавить»
  4. 4
    Выберите нужный драйвер, задайте имя DSN и параметры подключения
  5. 5
    Нажмите «Проверить источник данных» и убедитесь в успешном тесте
  6. 6
    Перезапустите сеанс 1С и повторите подключение

Причина №2: DSN создан не в том разделе или отсутствует драйвер

Источники ODBC делятся на пользовательские (User DSN) и системные (System DSN). Пользовательский DSN виден только той учётной записи, под которой он создан. Если 1С работает под другим пользователем — например, сервер 1С запущен под служебной учётной записью USR1CV8, а DSN создавал администратор под собой, — источник окажется «невидимым» и снова возникнет IM002.

Решение — создавать источник на вкладке «Системный DSN», либо создавать пользовательский DSN именно под той учётной записью, от имени которой работает 1С или сервер приложений. Для сервера 1С:Предприятия это почти всегда системный DSN.

Вторая частая ситуация — сам драйвер не установлен. Например, для подключения к MySQL нужен MySQL ODBC Connector, для PostgreSQL — psqlODBC, для старых файлов Access и Excel на 64-разрядной системе — Microsoft Access Database Engine. Если в списке драйверов на вкладке «Драйверы» администратора ODBC нужного пункта нет, сначала установите драйвер той же разрядности, что и клиент 1С.

Типичные ошибки при настройке
01
Создание DSN через панель управления для 32-разрядной 1С — источник попадает в 64-разрядный список и не виден приложению
02
Создание пользовательского DSN вместо системного — сервер 1С под служебной учётной записью его не видит
03
Установка драйвера другой разрядности — драйвер есть в системе, но недоступен нужному администратору ODBC
04
Опечатка в имени DSN в строке подключения — диспетчер ищет несуществующее имя и возвращает IM002

Причина №3: ошибки в строке подключения из 1С

Во внешних обработках и коде 1С подключение к ODBC часто выполняется через ADODB.Connection со строкой вида DSN=MySource;UID=user;PWD=pass;. Если значение после DSN= не совпадает с именем источника в администраторе ODBC (включая регистр в некоторых конфигурациях и лишние пробелы), диспетчер возвращает IM002.

Альтернатива — подключение без DSN (DSN-less), когда в строке явно указывается драйвер: DRIVER={SQL Server};SERVER=srv;DATABASE=db;.... Здесь IM002 возникает, если имя драйвера в фигурных скобках не совпадает с зарегистрированным в системе, например указан «SQL Server», а установлен только «ODBC Driver 17 for SQL Server». Точное имя драйвера смотрите на вкладке «Драйверы» администратора ODBC.

1c
Соединение = Новый COMОбъект("ADODB.Connection");
СтрокаПодключения = "DSN=TradeBase;UID=reader;PWD=secret;";
Попытка
    Соединение.Open(СтрокаПодключения);
Исключение
    Сообщить("Ошибка ODBC: " + ОписаниеОшибки());
КонецПопытки;

Отдельный случай: ошибка на сервере 1С и в тонком клиенте

В клиент-серверном режиме код, обращающийся к ODBC, может выполняться на сервере 1С. Тогда DSN и драйвер должны быть настроены на сервере приложений, а не на компьютере пользователя. Настройка источника на рабочей станции бухгалтера ничего не даст: сервер 1С о ней не знает.

Дополнительный нюанс — разрядность сервера 1С. Сервер «1С:Предприятия» x86-64 требует 64-разрядные драйверы и 64-разрядный системный DSN. Если обработка работает в файловой базе на ПК, но падает с IM002 в клиент-серверном варианте, почти наверняка источник не создан или создан не той разрядности на сервере.

Маршрут решения

Как выбрать действие

Ошибка только у одного пользователя на его ПКПроверьте DSN и разрядность администратора ODBC на его компьютере
Ошибка у всех пользователей клиент-серверной базыНастраивайте системный DSN и драйвер на сервере 1С:Предприятия
Ошибка появилась после обновления платформыПроверьте, не сменилась ли разрядность платформы с 32 на 64 бита, и пересоздайте DSN
Ошибка при подключении без DSNСверьте имя драйвера в строке подключения с вкладкой «Драйверы» администратора ODBC

Проверка результата и границы самостоятельной работы

Базовая проверка — кнопка «Проверить источник данных» (Test Connection) в настройках DSN. Если тест проходит, а 1С всё равно возвращает IM002, значит приложение смотрит в другой список источников: перепроверьте разрядность и тип DSN (пользовательский/системный).

Также полезно проверить реестр: системные DSN хранятся в ветке HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI (для 64-разрядных) и HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ODBC\ODBC.INI (для 32-разрядных). Наличие там раздела с именем вашего источника подтверждает, что запись создана именно в нужном разделе.

Контрольные точки

Как проверить результат

Тест DSN в администраторе ODBC
Норма

Сообщение «Тест успешно завершён» в версии odbcad32.exe той же разрядности, что и 1С

Тревожный признак

Тест не проходит или DSN отсутствует в списке нужной разрядности

Подключение из 1С
Норма

Метод Open выполняется без исключения, запросы возвращают данные

Тревожный признак

Снова текст с SQLSTATE IM002 и номером 0

Видимость для служебной учётной записи
Норма

DSN создан на вкладке «Системный DSN»

Тревожный признак

DSN есть только на вкладке «Пользовательский DSN»

Частые вопросы

Можно ли обойтись без создания DSN?

Да. Используйте DSN-less строку подключения с явным указанием драйвера, например DRIVER={ODBC Driver 17 for SQL Server}. Тогда настраивать администратор ODBC не нужно, но драйвер всё равно должен быть установлен и совпадать по разрядности с клиентом 1С, а имя драйвера в строке — точно совпадать с зарегистрированным.

Почему ошибка появилась после перехода на новый компьютер?

Источники ODBC хранятся локально в реестре каждого компьютера и не переносятся вместе с базой 1С или конфигурацией. На новом ПК нужно заново установить драйвер и создать DSN с тем же именем и той же разрядности, что и раньше.

DSN создан, тест проходит, но 1С выдаёт IM002. Что ещё проверить?

Проверьте три вещи: разрядность клиента 1С и администратора ODBC, где создан источник; тип DSN — пользовательский вместо системного не виден другим учётным записям; точное имя DSN в строке подключения, включая пробелы и опечатки. В клиент-серверном режиме убедитесь, что источник создан на сервере 1С, а не на клиентском ПК.

Какой драйвер нужен для подключения 1С к Excel или Access?

Для современных 64-разрядных клиентов обычно устанавливают Microsoft Access Database Engine (Redistributable) соответствующей разрядности. Важно: 64-разрядный драйвер не установится рядом с 32-разрядным Office без дополнительных манипуляций, поэтому часто проще использовать 32-разрядный клиент 1С для таких обменов.

Влияет ли антивирус или брандмауэр на ошибку IM002?

Нет. IM002 возникает до попытки сетевого соединения — сбой происходит на этапе поиска DSN или загрузки драйвера. Сетевые ограничения дают другие коды SQLSTATE, например 08001 или 08S01. Если у вас именно IM002, сеть и брандмауэр проверять не нужно.

Опасно ли пересоздавать DSN, которым пользуются другие программы?

Удаление или изменение существующего DSN затронет все приложения, которые к нему обращаются. Перед пересозданием запишите текущие параметры источника (драйвер, сервер, база, способ аутентификации), чтобы восстановить конфигурацию при необходимости.

Итог

Что важно запомнить

SQLSTATE IM002 с номером 0 — это всегда проблема поиска DSN или драйвера, а не сервера БД. Проверяйте в первую очередь разрядность клиента 1С и администратора ODBC, тип DSN (системный, а не пользовательский), наличие драйвера нужной разрядности и точное имя источника в строке подключения. В клиент-серверном режиме настройки выполняются на сервере 1С.