Часто в практике разработчика 1С возникает ситуация: код, написанный для интеграции с внешней базой данных MySQL, прекрасно работает в режиме обычного или тонкого клиента (например, при запуске через внешнюю обработку), но при переносе этого же кода в регламентное задание возникает ошибка. Типичный текст ошибки выглядит так: [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию. В этой статье мы подробно разберем, почему это происходит и как правильно настроить серверную среду для стабильной работы.
Главная причина кроется в архитектурном различии между клиентским сеансом и серверным фоновым процессом. Когда вы запускаете код вручную, он выполняется в контексте вашего текущего пользователя и, как правило, в 32-битной среде клиентского приложения. Регламентное задание выполняется на стороне Сервера 1С:Предприятия, который имеет свои особенности:
USR1CV8), у которой нет доступа к вашим личным настройкам и профилю.Рассмотрим по шагам, как устранить эти препятствия.
Проанализируем ситуацию с драйверами. Если ваш Сервер 1С:Предприятия является 64-разрядным, то для работы регламентных заданий (которые выполняются в контексте сервера) обязательно должен быть установлен 64-битный драйвер MySQL ODBC. Даже если на этом же компьютере установлен 32-битный клиент 1С, серверу "все равно" на его драйверы — ему нужен свой.
Выясним, какая разрядность у вашего процесса 1С, с помощью несложного кода, который можно временно вставить в регламентное задание для проверки:
СистемнаяИнфо = Новый СистемнаяИнформация;
ТипПлатформы = СистемнаяИнфо.ТипПлатформы;
// Если вернет Windows.x86_64 — вам нужен драйвер x64
ЗаписьЖурналаРегистрации("ПроверкаРазрядности",,,,"Тип платформы: " + ТипПлатформы);
Важный нюанс для Windows x64: В системе сосуществуют два разных диспетчера ODBC. Это часто становится причиной путаницы:
C:\Windows\System32\odbcad32.exeC:\Windows\SysWOW64\odbcad32.exeЕсли сервер 1С 64-битный, настраивать соединение нужно только через первый вариант (в папке System32).
В сообщениях форума часто упоминается, что создание DSN не помогает. Проанализируем причину: по умолчанию диспетчер ODBC предлагает создать Пользовательский DSN (User DSN). Информация о таком источнике данных записывается в ветку реестра текущего пользователя (HKEY_CURRENT_USER).
Поскольку служба сервера 1С работает под учетной записью USR1CV8, она физически не может "увидеть" настройки, сделанные в профиле администратора. Поэтому для работы регламентных заданий необходимо:
HKEY_LOCAL_MACHINE и доступны всем пользователям системы, включая службу 1С.Чтобы не зависеть от настроек конкретного сервера и не плодить сущности в панели управления Windows, мы рекомендуем использовать так называемое "соединение без DSN". В этом случае все параметры (драйвер, сервер, база, логин, пароль) передаются напрямую в строке подключения.
Посмотрим на пример кода для 1С:
ПараметрыСоединения = "Driver={MySQL ODBC 8.0 Unicode Driver};Server=localhost;Port=3306;Database=my_db;User=root;Password=my_password;Option=3;";
Connection = Новый COMОбъект("ADODB.Connection");
Попытка
Connection.Open(ПараметрыСоединения);
// Дальнейшая работа с БД
Исключение
Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;
Обратите внимание: Имя драйвера в параметре Driver={} должно в точности совпадать с тем, что указано в колонке "Имя" на вкладке "Драйверы" диспетчера ODBC. Если установлен "MySQL ODBC 5.1 Driver", пишите именно его. Также крайне рекомендуется использовать Unicode Driver, так как 1С работает со строками в формате Unicode, и это избавит вас от проблем с кодировкой (знаков вопроса вместо кириллицы).
Если вышеуказанные шаги не помогли, проанализируем настройки безопасности. Служба 1С может не иметь прав на инициализацию COM-объектов или чтение веток реестра, связанных с ODBC.
Рассмотрим, что можно сделать:
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC.dcomcnfg. В разделе "Настройка DCOM" найдите компоненты, связанные с Microsoft ActiveX Data Objects (ADO), и убедитесь, что в разрешениях на запуск и активацию добавлена учетная запись службы 1С.libmysql.dll), путь к ним должен быть прописан в системной переменной PATH. После изменения системных переменных сервер необходимо перезагрузить.Для успешного подключения регламентного задания к MySQL необходимо соблюсти три условия:
1. Установить драйвер той же разрядности, что и Сервер 1С (чаще всего x64).
2. Использовать Системный DSN или (что лучше) DSN-less строку подключения.
3. Убедиться, что имя драйвера в коде 1С совпадает с установленным в системе Unicode-драйвером.
Следуя этим правилам, вы обеспечите надежную и стабильную интеграцию вашей конфигурации 1С с внешними источниками данных.