Работа с внешними источниками данных в 1С — это мощный инструмент, позволяющий интегрировать учетную систему с внешними базами данных, такими как MySQL, напрямую через механизм ODBC. Однако после восстановления сервера из образа или изменения конфигурации системного окружения разработчики часто сталкиваются с ситуацией, когда в конфигураторе таблицы данных отображаются корректно, а в режиме «1С:Предприятие» возникает ошибка: «Ошибка ODBC. SQLSTATE: IM002. Источник данных не найден и не указан драйвер, используемый по умолчанию». В этой статье мы подробно разберем причины этой проблемы и пошагово пройдем процесс её решения.
Прежде всего, проанализируем ситуацию. Ошибка SQLSTATE: IM002 генерируется диспетчером драйверов Microsoft ODBC. Она означает, что приложение (в данном случае сервер 1С или тонкий клиент) пытается обратиться к имени источника данных (DSN), которое не зарегистрировано в системе, либо в строке соединения указан драйвер, который отсутствует в реестре. Тот факт, что в конфигураторе всё работает, является ключевой зацепкой: конфигуратор и серверный кластер 1С могут запускаться в разных контекстах и иметь разную разрядность.
Первое, на что мы должны обратить внимание — это тип созданного DSN. В диспетчере драйверов ODBC существуют две основные вкладки для настройки источников данных: «Пользовательский DSN» и «Системный DSN».
Рассмотрим разницу:
Поскольку служба 1C:Enterprise 8 Server Agent обычно запускается от имени специальной учетной записи (например, USR1CV8), она не имеет доступа к вашим пользовательским настройкам. Всегда настраивайте внешние источники данных только во вкладке «Системный DSN». Если сервер восстанавливался из образа, права на ветку реестра, где хранятся системные DSN, могли сброситься, и службу 1С необходимо наделить правами на чтение соответствующих разделов.
Это самая распространенная причина ошибки IM002 в современных системах. Выясним причину: в 64-битных версиях Windows сосуществуют два диспетчера ODBC, и они работают независимо друг от друга.
Проанализируем ситуацию на сервере:
C:\Windows\System32\odbcad32.exe (используется 64-битными приложениями).C:\Windows\SysWOW64\odbcad32.exe (используется 32-битными приложениями).Если ваш сервер 1С 64-битный, то в режиме предприятия он будет искать DSN именно через 64-битный диспетчер. При этом конфигуратор 1С часто является 32-битным приложением (особенно в версиях до 8.3.20), и он успешно «видит» 32-битный DSN. Чтобы решить проблему, необходимо установить обе версии драйвера MySQL Connector/ODBC (x86 и x64) и создать два системных DSN с абсолютно идентичными именами в обоих диспетчерах.
Иногда проблема кроется в самой строке соединения. Если при настройке внешнего источника данных в 1С вы использовали прямое указание драйвера, проверьте его точное имя. После восстановления системы или обновления драйверов имя могло измениться.
Например, в системе был установлен MySQL ODBC 5.3 Unicode Driver, а после обновления появился MySQL ODBC 8.0 Unicode Driver. Для 1С это разные драйверы. Если в свойствах внешнего источника прописана старая версия, подключение не установится. Разберем, как это проверить: откройте диспетчер ODBC, перейдите на вкладку «Драйверы» и убедитесь, что имя в списке совпадает до символа с тем, что указано в настройках 1С.
Чтобы навсегда избавиться от зависимости от настроек диспетчера ODBC на каждом конкретном сервере, мы рекомендуем использовать соединение без DSN (DSN-less). В этом случае все параметры подключения передаются в виде строки. Для получения параметров текущего подключения можно использовать способ определения строки соединения внешнего источника данных.
Посмотрим на пример формирования такой строки для MySQL:
// Пример строки соединения для внешнего источника данных в 1С
СтрокаСоединения = "DRIVER={MySQL ODBC 8.0 Unicode Driver};SERVER=192.168.1.10;DATABASE=my_db;UID=admin;PWD=password;OPTION=3;";
Преимущества этого метода:
odbcad32.exe на каждом сервере кластера.Важно: При использовании этого метода драйвер соответствующей разрядности всё равно должен быть физически установлен в операционной системе.
Если настройки верны, но ошибка сохраняется, проанализируем права доступа. Служба сервера 1С должна иметь возможность прочитать настройки драйверов из реестра Windows. Проверьте разрешения для учетной записи, под которой запущена служба 1С (например, USR1CV8), на следующие ветки:
HKEY_LOCAL_MACHINE\SOFTWARE\ODBCHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC (для 32-битных компонент).В некоторых случаях после восстановления системы из образа права группы «Пользователи» на эти ветки могут быть ограничены, что блокирует доступ серверному процессу 1С к конфигурации ODBC.
Если ваша база MySQL находится не на локальном сервере, а, например, на хостинге вроде REG.RU, обратите внимание на настройки сетевого доступа. Рассмотрим основные моменты:
OPTION=3 (или другие комбинации флагов), который определяет поведение драйвера при работе с типами данных и курсорами.ODBC (или в строке инициализации) указано SET NAMES utf8 или cp1251.Мы выяснили, что ошибка IM002 в 90% случаев связана с несоответствием контекста выполнения. Если вы столкнулись с этой проблемой, действуйте по следующему алгоритму:
MySQL Connector/ODBC установлен в 64-битной версии (для сервера 1С) и 32-битной версии (для конфигуратора).Следуя этим шагам, вы обеспечите стабильную работу внешних источников данных и минимизируете время простоя системы при технических сбоях или обновлении серверного оборудования.