Администрирование · 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-разрядную версию — это частая ловушка.
- 1Определите разрядность клиента 1С по каталогу установки платформы
- 2Откройте соответствующий odbcad32.exe: SysWOW64 для 32 бит, System32 для 64 бит
- 3Перейдите на вкладку «Системный DSN» и нажмите «Добавить»
- 4Выберите нужный драйвер, задайте имя DSN и параметры подключения
- 5Нажмите «Проверить источник данных» и убедитесь в успешном тесте
- 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С.
Причина №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.
Соединение = Новый COMОбъект("ADODB.Connection");
СтрокаПодключения = "DSN=TradeBase;UID=reader;PWD=secret;";
Попытка
Соединение.Open(СтрокаПодключения);
Исключение
Сообщить("Ошибка ODBC: " + ОписаниеОшибки());
КонецПопытки;Отдельный случай: ошибка на сервере 1С и в тонком клиенте
В клиент-серверном режиме код, обращающийся к ODBC, может выполняться на сервере 1С. Тогда DSN и драйвер должны быть настроены на сервере приложений, а не на компьютере пользователя. Настройка источника на рабочей станции бухгалтера ничего не даст: сервер 1С о ней не знает.
Дополнительный нюанс — разрядность сервера 1С. Сервер «1С:Предприятия» x86-64 требует 64-разрядные драйверы и 64-разрядный системный DSN. Если обработка работает в файловой базе на ПК, но падает с IM002 в клиент-серверном варианте, почти наверняка источник не создан или создан не той разрядности на сервере.
Как выбрать действие
Проверка результата и границы самостоятельной работы
Базовая проверка — кнопка «Проверить источник данных» (Test Connection) в настройках DSN. Если тест проходит, а 1С всё равно возвращает IM002, значит приложение смотрит в другой список источников: перепроверьте разрядность и тип DSN (пользовательский/системный).
Также полезно проверить реестр: системные DSN хранятся в ветке HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI (для 64-разрядных) и HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ODBC\ODBC.INI (для 32-разрядных). Наличие там раздела с именем вашего источника подтверждает, что запись создана именно в нужном разделе.
Как проверить результат
Сообщение «Тест успешно завершён» в версии odbcad32.exe той же разрядности, что и 1С
Тест не проходит или DSN отсутствует в списке нужной разрядности
Метод 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С.