Почему не виден драйвер ODBC ClickHouse во внешних источниках данных и как исправить ошибки синтаксиса запросов

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Интеграция 1С с современными аналитическими СУБД, такими как ClickHouse, через механизм Внешних источников данных — это мощный инструмент для построения отчетов. Однако на пути разработчика часто встают неочевидные препятствия: драйвер, установленный в системе, упорно не появляется в списке доступных в Конфигураторе, а после настройки подключения простейшие запросы с соединениями (JOIN) «падают» с загадочными ошибками синтаксиса. В этой статье мы подробно разберем, как преодолеть эти трудности.

Выясняем причину отсутствия драйвера в списке источников

Рассмотрим ситуацию: вы скачали и установили актуальную версию ODBC-драйвера для ClickHouse, проверили его наличие в «Администраторе источников данных ODBC» в Windows, но при попытке добавить таблицу во внешний источник данных в 1С видите только «SQL Server». Проанализируем, почему это происходит.

Главная особенность работы платформы 1С в клиент-серверном варианте заключается в том, что список доступных драйверов и источников данных формируется на стороне сервера 1С:Предприятия, а не на локальном компьютере, где запущен Конфигуратор. Это классическая «ловушка», в которую попадают многие разработчики.

Разберем по шагам, что необходимо сделать для корректного отображения драйвера:

  1. Установка на сервер: Драйвер ClickHouse ODBC должен быть установлен непосредственно на той физической или виртуальной машине, где работает служба ragent (Агент сервера 1С).
  2. Соответствие разрядности: Если ваш сервер 1С 64-разрядный (что является стандартом для современных систем), то и драйвер ClickHouse обязательно должен быть 64-битным. 32-битные драйверы 64-битный процесс сервера просто не увидит.
  3. Тип DSN (System DSN): При настройке источника данных в Windows крайне важно создавать Системный DSN (System DSN). Пользовательские DSN (User DSN) привязаны к конкретной учетной записи пользователя. Поскольку служба сервера 1С обычно запускается под специальной технической учетной записью (например, USR1CV8), она не имеет доступа к вашему личному списку источников данных.
  4. Перезапуск службы: В некоторых случаях после установки нового драйвера требуется перезагрузить службу «Агент сервера 1С:Предприятия», чтобы кэш доступных провайдеров обновился.

Посмотрим на пример логики: если вы открываете файловую базу, драйверы видны, так как в этом режиме 1С работает как локальное приложение. Как только вы переходите в клиент-сервер — источником правды становится сервер (в отличие от выполнения запросов через COM-подключение, где работа идет через внешнее приложение).

Разбор ошибки синтаксиса {oj ...} при использовании соединений

Предположим, драйвер стал виден, таблицы подключены, но при выполнении запроса в СКД или через объект Запрос, где используется ЛЕВОЕ СОЕДИНЕНИЕ, вы получаете ошибку:


Code: 62. DB::Exception: Syntax error: failed at position 38 ('{') (line 4, col 7): {oj "db1"."sales" T1 
LEFT OUTER JOIN "db1"."sklady" T2 
ON (T1."id_sklad" = T2.id)}

Выясним причину. Эта ошибка возникает из-за того, что платформа 1С при генерации запроса к внешнему источнику через ODBC использует стандартные escape-последовательности ODBC для внешних соединений. Они обозначаются конструкцией {oj ...} (Outer Join). К сожалению, ClickHouse по умолчанию не поддерживает такой синтаксис и ожидает стандартный SQL.

Настройка драйвера ClickHouse для работы с 1С

Чтобы решить проблему с {oj}, необходимо правильно сконфигурировать сам ODBC-драйвер в Windows. Разберем основные параметры, которые помогут нам «подружить» 1С и ClickHouse:

  1. JOIN syntax: В настройках драйвера (вкладка Setup) найдите параметр, отвечающий за диалект соединений. Вам нужно форсировать использование стандартного синтаксиса (Standard SQL). В некоторых версиях драйвера это может называться Driver → Use SQL standard outer join syntax.
  2. Identifier Quoting: 1С любит заключать имена таблиц и полей в двойные кавычки ("Table"). ClickHouse же по умолчанию может ожидать обратные кавычки (`Table`) или вовсе обходиться без них. В настройках драйвера проверьте опцию Quotations и установите режим, совместимый с требованиями 1С.
  3. DBMS Type во внешнем источнике: В самом Конфигураторе 1С, в свойствах Внешнего источника данных, в поле СУБД никогда не выбирайте «MS SQL Server», если подключаетесь к ClickHouse. Правильнее всего будет выбрать значение «Прочее» (Other). Это заставит 1С генерировать более универсальные запросы.

Особенности использования СКД и автоматической генерации запросов

Проанализируем ситуацию, когда даже после настройки драйвера сложные запросы СКД продолжают выдавать ошибки. ClickHouse — это колоночная база данных, и ее логика выполнения соединений отличается от классических реляционных баз.

Например, ClickHouse требует четкого понимания типов соединений: ANY LEFT JOIN или ALL LEFT JOIN. Платформа 1С об этом «не знает» и шлет стандартный LEFT JOIN. Если ваша версия ClickHouse или драйвера не справляется с автоматической интерпретацией, стоит рассмотреть следующие обходные пути:

1. Использование прямого SQL-запроса: Вместо того чтобы позволять 1С самой строить запрос из объектов внешнего источника, вы можете написать запрос на языке ClickHouse (Native SQL).


Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ * ИЗ ВнешнийИсточникДанных.ClickHouse.Таблица.ИмяТаблицы";
// В некоторых случаях лучше использовать менеджер внешнего источника
// для выполнения прямого кода, если платформа позволяет.

2. Промежуточный Linked Server (Связанный сервер): Это продвинутое решение. На сервере MS SQL Server создается Linked Server до ClickHouse через тот же ODBC драйвер. В 1С внешний источник подключается не напрямую к ClickHouse, а к MS SQL Server. В этом случае MS SQL выступает в роли «умного» транслятора, который берет на себя все сложности с {oj} и кавычками.

Рекомендации по типам данных

При работе с ClickHouse через внешние источники часто возникают конфликты типов, особенно с датами и значениями NULL. ClickHouse активно использует тип Nullable(T). Если 1С встречает такое поле через ODBC, она может некорректно сопоставить его со своими внутренними типами.

Совет: В схеме внешнего источника данных в 1С после загрузки таблиц проверьте типы полей вручную. Для дат лучше явно указывать Дата, а для строк — контролировать длину. Если в ClickHouse используются специфические типы вроде UInt64, убедитесь, что в 1С им назначено число с соответствующей точностью.

Подводя итог, можно сказать, что связка 1С и ClickHouse через внешние источники данных вполне работоспособна, если соблюдать два главных правила: устанавливать 64-битный драйвер на сервер как System DSN и корректировать настройки синтаксиса в конфигурации самого драйвера. Для программной проверки параметров активного подключения подойдёт способ узнать строку соединения внешнего источника данных.

← На главную