MySQL ODBC Driver 5.2 для "Внешнего источника данных" 1С8.3

Решает проблему при использовании в запросах имен с нижним подчеркиванием при подключении Внешнего источника данных в 1С 8.3

Описание

При выполнении запроса к MySQL в 1С 8.3 столкнулся с проблемой преобразования запросов такого вида.

SELECT p.id_prod FROM product

1С преобразует этот запрос к виду

SELECT p.»id_prod» FROM product

Это вызывает ошибку синтаксиса и запрос не выполняется.
Я немного модифицировал ODBC драйвер, который преобразует запрос полученный от 1С к виду

SELECT p.`id_prod` FROM product

Это позволяет полноценно использовать Внешние источники для работы с MySQL.
Для подключения использовать строку вида

Установка

Распаковать архив и запустиь install.bat.
Проверить что драйвер успешно установился можно командой

binmyodbc-installer.exe -d -l

он отобразит нечто такое

C:Program Files (x86)MySQL_Connector_ODBCin>myodbc-installer -d -l
SQL Server
Microsoft ODBC for Oracle
Microsoft Access Driver (*.mdb)
Microsoft Access-Treiber (*.mdb)
Driver do Microsoft Access (*.mdb)
Microsoft dBase Driver (*.dbf)
Microsoft dBase-Treiber (*.dbf)
Driver do Microsoft dBase (*.dbf)
Microsoft Excel Driver (*.xls)
Microsoft Excel-Treiber (*.xls)
Driver do Microsoft Excel(*.xls)
Microsoft Paradox Driver (*.db )
Microsoft Paradox-Treiber (*.db )
Driver do Microsoft Paradox (*.db )
Microsoft Text Driver (*.txt; *.csv)
Microsoft Text-Treiber (*.txt; *.csv)
Driver da Microsoft para arquivos texto (*.txt; *.csv)
Microsoft Visual FoxPro Driver
Microsoft FoxPro VFP Driver (*.dbf)
Microsoft dBase VFP Driver (*.dbf)
Microsoft Visual FoxPro-Treiber
Driver para o Microsoft Visual FoxPro
SQL Server Native Client 11.0
MySQL ODBC 5.2(w) Driver

Использование

При подключении к источнику необходимо использовать строку следующего вида.

DRIVER={MySQL ODBC 5.2(w) Driver};SERVER=127.0.0.1;DATABASE=testbase;UID=admin;PWD=admin;»

Примечание

Тестировалось на Win7 x64 и Win7 x64. Драйвер собран под платформу x32 поэтому должен нормально работать и под другими версиями ОС.

40 Comments

  1. yuraos

    ЭХ!

    ЛЮБЛЮ Я ЗАПИСЫВАТЬ ПЕРВЫЕ КОММЕНТАРИИ К СТАТЬЯМ!!!

    А ПОЧЕМУ ???

    —————————————————-

    А ПОТОМУ, ЧТО:

    1) Можно смайлов в комментарий навставлять.

    2) В сообщения рассылаемых сайтом по почте говорится, что Я АВТОР ПУБЛИКАЦИИ.

    —————————————————-

    а вот изменять первый пост со смайлами не советую — смайлики пропадють.

    —————————————————-

    😀 😀 😀 😀 😀 😀 😀

    😎 😎 😎 😎 😎 😎 😎

    Reply
  2. yuraos

    Так это косяк функционала внешних источников 1С

    или ODBC драйвера?

    А если попробывать работать напрямую через ADO,

    а в СКД данные запихивать через набор данных объект в виде таблицы значений ???

    Есть подсистемка для работы из 1С с COM-объектами и в частности с ADO.

    Было б интересно узнать как она работает с MySQL.

    Запросы к нему можно выполнять прямо из консоли в составе подсистемы.

    Reply
  3. Magister

    (1) Что, правда? 🙂

    (2) 1С «официально» поддерживает MsSQL, Postgres, DB2, Oracle. Всё остальное — «прочие», и никто не обещает что будет работать.

    Вон с Firebird приколы жесткие есть — она не понимает SELECT TOP 10, ей надо SELECT FIRST 10 ну или лучше в конце диапазон с-по указывать. Из-за чего динамический список не работает — пришлось патчить драйвер ODBC.

    Reply
  4. Trotter_NN

    А по моей проблеме помочь не сможете ?

    http://forum.infostart.ru/forum9/topic81462/message862353/?result=reply#message862353

    Reply
  5. quick

    (2)

    Можно еще десятью способами подключаться. Тут смысл был в создании внешнего источника как обьекта метаданных.

    Это не косяк ODBC драйвера, это косяк транслирования запроса 1С-кой. Просто mysql не поддерживает синтаксис который она ему навязывает.

    Reply
  6. bforce

    Да, проблема актуальная. В свое время побороли ее через создание вьюх на стороне MySQL.

    С их помощью удалось не только вычистить все подчеркивания из полей таблицы, но и привести имена колонок в «человечий» русский вид (назвали колонки русскими буквами), что MySQL благополучно проглотил…

    За старание, конечно, отдельный плюс.

    Reply
  7. yuraos

    (5) quick,

    так получается, что

    автор работы идет по пути наименьшего для него сопротивления

    и для исправления 1С-ных косяков

    подламывает драйвер ODBC ???

    Reply
  8. yuraos

    (7)

    остальные приложения хоть будут после этого нормально работать через это драйвер???

    Reply
  9. yuraos

    (4) Trotter_NN,

    в смысле — как заставить 1С-7.7 работать нормально под Win > XP ???

    Reply
  10. yuraos

    (9)

    если проблемма в этом …

    … набираем в строке поиска по сайту слово «секретный»

    и первое что в списке предлагаемых ссылок:

    Секретный релиз платформы v77.27.1

    решение с минимальными извратами.

    Reply
  11. quick

    (8) остальные приложения не делают таких ужасов в запросах

    Reply
  12. quick

    (7) :)) посмешил.. но получается что все так и есть. То ли еще будет когда за линукс плотно возьмемся…

    Reply
  13. yuraos

    (12)


    — Урра! Мы научились вырезать гланды!!!

    — Фуууу!

    — Через **** !!!

    — УУУУУ!

    Народный мудрость

    Селяви, то есть особенности национальной жизни.

    🙂

    Reply
  14. yuraos

    quick,

    а слабо написать ODBC драйвер для файловой 1с-ной базы ???

    Герман

    тебя бы расцеловал бы…

    …а может даже бы озолотил.

    Reply
  15. hogik

    (14)

    «а слабо написать ODBC драйвер для файловой 1с-ной базы ??? «(с)

    Юрий (yuraos).

    Логичнее её заменить на другую сУБД у которой уже есть ODBC драйвер.

    И много чего ещё — есть… 😉

    P.S.

    А написать ODBC драйвер для файловой версии БД 1С-а сначала потребует написать SQL-ную СУБД для не полностью изученного формата хранения и способов обработки информации. И уже после этого можно будет приступить к написанию ODBC драйвера… 😉

    Reply
  16. hogik

    (16)

    Юрий (yuraos).

    Думаю, будет достаточно, если Вы меня послушаетесь.

    И поймете всю глупость Вашей идеи/вопроса про написание ODBC драйвера для файловой версии 1С-а.

    P.S.

    В (15) сообщении была попытка объяснить Вам это вежливо. Извините…

    Reply
  17. yuraos

    (17) Владимир(hogik), как говорится, извинения принимаются.

    🙂

    правда эта глупость довольно распространенная.

    Например andrewks эту идею глупостью не считает,

    дословно цитирую:

    «задачка нетривиальная. основная проблема — нехватка времени. поэтому на чистом альтруизме поднять это вряд ли получится«.

    Сам он правда пошел другим путем, как раз что-то вроде альтернативной СУБД для прямого доступа к файловой базе сделал.



    ЗЫ:

    да и вы, как я посмотрю, в молодости тоже баловались прямыми запросами в 1С-7.7

    😉

    Reply
  18. hogik

    (18)

    «… в молодости тоже баловались прямыми запросами в 1С-7.7″(с)

    Юрий (yuraos).

    Я никогда ими не «баловался».

    Данная поделка сделана, исключительно, по просьбам трудящихся. 😉

    Моё мнение по «проблеме» файловой версии 1С-а выражено в:

    http://infostart.ru/public/15211/

    http://infostart.ru/public/14664/

    Чего и надо, по моему мнению, делать для файловой версии 1С 8.х.

    Что касается мнения о «нетривиальности задачки», то это слабо сказано. 🙂

    Нормально она не реализуема без «вскрытия» родного 1С интерфейса к движку БД.

    А если еще учесть, что этот интерфейс не является SQL-подобным, то и идея писать ODBC драйвер становится совсем «глупостью».

    Reply
  19. yuraos

    (19) hogik,

    Эх эти трудящиеся-трудящиеся !

    Они такие нудные !!

    Все время требуют сделать для них какую-нибудь «глупость» !!!

    😉

    Reply
  20. quick

    (19) Никак не вразумею.. нафига что то делать для файловой 1С8?

    Я всегда полагал что когда начинаются проблемы с файловой версией, то нужно переходить на SQL вариант.

    Reply
  21. hogik

    (21)

    «нафига что то делать для файловой 1С8″(с)

    Евгений (quick).

    Согласен с Вами. О чем и пишу выше по теме.

    Надо делать не «для»(с), а вместо файловой.

    Т.к. задумка концепции 1С-продукта плохо укладывается в РМ с «запросным» ЯМД.

    И 1С-разработчикам пришлось делать переходник в лице т.н. сервера приложений.

    При использовании более подходящей сУБД можно обойтись без «переходника».

    И устранить основные недостатки файловых СУБД. И получить более дешёвую и простую в эксплуатации систему. Именно на замену файловой версии в случае «когда начинаются проблемы»(с). Т.е. промежуточный вариант между родной файловой и клиент-серверной версией. Т.к. большому количеству пользователей 1С-продукта вполне хватило бы варианта надежной работы системы на 10-50 пользователей.

    Reply
  22. hogik

    (20)

    Юрий (yuraos).

    Чувствую Вас сильно задело слово «глупость».

    Попробуйте читать в моих сообщения не только это слово. 🙂

    И расскажите нам КТО и ГДЕ будет выполнять SQL запрос в ODBC для файловой версии 1С-а? И как можно обойтись без написания «альтернативной СУБД для прямого доступа к файловой базе»(с) которую делает andrewks при, допустим, написания этого самого ODBC драйвера?

    Reply
  23. V_K

    На XP не хочет устанавливаться.

    Reply
  24. BATCOH

    Здравствуйте!

    Винсервер 2008R2 x64, сервер 1С 8.3.3.641, тоже x64.

    Драйвер успешно устанавливается, виден через myodbc-installer -d -l и через 32-битный odbcad32.exe.

    А вот 1С его в упор не замечает. Как и вообще все 32-битные ODBC-драйверы (проверял на обычном MySQL ODBC драйвере).

    Есть ли возможность собрать версию под x64?

    Reply
  25. PrinzOfMunchen

    Даа..))) А я просто писал обработку, которая создает sql-скрипт, создающий вьюшки без нижнего подчеркивания, в «верблюжей» нотации. А как можно подключиться в Linux? Через какие драйвера? и возможно ли вообще?

    Reply
  26. ReSY

    Спасибо за разработку

    Присоединяюсь к Ватсону, есть ли возможность реализации драйвера под версию x64, или настройки текущего под x64? Либо описание каким образом выполнялось изменение драйвера ODBC.

    Текущая версия платформы 8.3.4.408, версия Connector ODBC MySQL 5.2.6.

    Reply
  27. KillHunter

    Интересная разработка, а товарищ (27) ReSY, есть ли возможность реализации драйвера под версию x64, или настройки текущего под x64? Либо описание каким образом выполнялось изменение драйвера ODBC. тоже интересует этот вопрос ?

    Reply
  28. script

    Пожалуйста соберите под Win7 x64. Очень нужно.

    При выполнении binmyodbc-installer.exe -d -l

    есть куча драйверов а MySQL ODBC 5.2(w) Driver — нету. Помогите спасите.

    Пожет я что то не правильно делаю? У кого нибудь работает ?

    Reply
  29. script

    Что самое интересное дя этих манипуляций я удалил оригинальные драйвера на 32 и 64. Когда я понял что этот не устанавливается — поставил обратно оригинальный на 64 (mysql-connector-odbc-5.3.2-winx64) но 1С его не увидела, а 32 (mysql-connector-odbc-5.3.2-win32) 1С съела без проблем. Наверное от 1С тоже зависит 32 разрадная или 64 ??? Кто то знает правильный ответ?

    Если у меня 1С приняля оригинальный 32-разрядный драйвер, тогда и этот должен былу становится и подхватиться. Значит проблема не в том что у меня винда 64-ая. Тогда в чем?

    Reply
  30. script

    Вобщем сдела копию таблицы на MySQL. Переименовал колонки с нижним подчеркиванием. Избавился от подчеркивания. Пересоздал источник в 1С — При открытии из формы — ошибка таже.

    Но тем не менее такой код работает:

    Объект = ВнешниеИсточникиДанных.site.Таблицы.tovari.СоздатьОбъект();

    Объект.id = «99»;

    Объект.skuid = «88»;

    Объект.hash = Null;

    Объект.ip = Null;

    Объект.count = 3;

    Объект.price = 40;

    Объект.Записать();

    Reply
  31. script

    Если с чтением еще можно решить что то создавая Представления для таблиц на MySQL. То с записью во внешние источники беда. Через представления запись не работает, а на прямую мешает ошибка нижнего подчеркивания. Обложили.

    Reply
  32. YaroslavS

    У меня тоже под windows 2007 server x64 Драйвер этот 1С не видит. Хотя устанавливается вроде корректно и в списке драйверов отображается.

    Reply
  33. baza1978

    на x64 надо поставить полноценный MSI потом подменить дрова на дрова автора из папочки lib. Только вот проблемы это не решает. Как не работали запросы к полям с подчеркиванием, так и не работают. Зря только копеечку потратил.

    Reply
  34. cocon2003

    Убило примечание: тестировалось на 2-х совершенно одинаковых системах Win7 x64? Зачем? А собрано под x32? Жесть 🙂

    Reply
  35. quick

    В общем давно я на инфостарт не заглядывал. За это время много чего изменилось в моих проектах. Например я отказался от прямого доступа к внешним базам, т.к. ОС меняются, версии MySQL обновляются, сервера постоянно переезжают… и все превращается в непрерывный кошмар. Да и тянуть данные приходится не из одной базы а сразу с четырех расположенных на разных серверах, иногда в нескольких потоках. Поэтому последнее время перешел на написание веб сервисов на python + spyne.io и размещении их возле нужной внешней системы (mysql, postgresql, redis), а в 1С использую встроенные механизмы работы soap. Несмотря на первоначальную «сложность», в поддержке эта связка оказалась удобней, т.к. к ней же вяжется веб интерфейс и 1С 7.7.

    Да и к 1С 7.7 уже написал парсер sql запросов с разбором md файла. https://github.com/WorldException/v7py если кому интересно

    Если время будет как нибудь опубликую готовый набор для быстрого старта…

    Reply
  36. vitek1

    столкнулись с аналогичной проблемой — кавычки в запросе и специфичный синтаксис SQL (select first) для СУБД Informix. Можете рассказать про технологию модификации ODBC драйвера? Как можно повторить это на своем драйвере?

    Reply
  37. quick

    (38) vitek1, качаете исходники odbc драйвера, немного правите раздел где обрабатывается приходящий текст запроса и компилируете.

    Но как уже говорил, лучше сделать промежуточный веб сервис с готовой выборкой на каком нибудь нормальном языке, если конечно у вас не разработка на «отдал и забыл».

    Reply
  38. vitek1

    (39) насколько понимаю, поскольку informix коммерческий продукт, то исходников драйвера нет, в отличие от MySQL?

    с веб сервисом — сама идея не очень подходит. На 1С придется реализовывать очень много бизнес-логики по работе с базой. Писать для этого отдельные веб-сервисы не хочется. Да и лишаться возможности работы с базой с помощью стандартных упр. форм с встроенными функциями поиска и отборов не хочется. В этом вся и идея есть.

    Reply
  39. RSConsulting

    (3) Подскажите, как пропатчить, не могу найти инфу. Спасибо

    Reply
  40. Magister

    (41) Подробностей уже не вспомню, результат вот тут: http://magister.in.ua/lang/en/2013/11/firebird-odbc-driver-patched-for-1centerprise/

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *