Настройка связи между mysql и 1С через ODBC в версии 8.2.14 (Внешние источники)

В новой редакции платформы 1С 8.2.14 появилась возможность устанавливать связь с внешними источниками данных. У меня была идея написать программу для прямой работы с базой данных на нашем сайте из 1С:Предприятия 8

В новой редакции платформы 1С 8.2.14 появилась возможность устанавливать связь с внешними источниками данных. У меня была идея написать программу для прямой работы с базой данных на нашем сайте из 1С:Предприятия 8 

По шагам надо сделать следующее: 

  • Скачать и установить ODBC драйвер для mysql 
  • Настроить доступ и параметры связи с базой данных 
  • Прописать необходимые таблицы в конфигураторе 
  • Написать обработку которая будет соединяться с базой данных из 1С:Предприятия 8 и выдавать результат запроса. 

Поехали… 

1. Скачиваем ODBC коннектор с сайта поставщика mysql
2. Устанавливаем его на компьютер. 
3. Заходим в конфигуратор 1С и добавляем новый внешний источник данных. 

 

4. Добавляем внешнюю таблицу: 

 

5. Указываем режим автоматического формирования списка таблиц 

 

6. Указываем параметры соединения. Пишем руками: 

Цитата

DRIVER={MySQL ODBC 5.1 Driver}; 
SERVER=192.168.1.10; 
DATABASE=bitrix;

и вбиваем логин и пароль для доступа к базе mysql 

7. Если все ок, то мы увидим список таблиц из базы данных сайта. 

 

8. Выбираем нужную таблицу галочкой 

 

9. И получаем ее в дереве метаданных. 

 

10. Создаем обработку для тестирования с одной процедурой: 

ПараметрыСоединенияССайтомМИКО = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
ПараметрыСоединенияССайтомМИКО.СтрокаСоединения= "
|DRIVER={MySQL ODBC 5.1 Driver};
|SERVER=192.168.1.10;
|DATABASE=bitrix;
|UID=root;
|PWD=dbpassword_4_user_root;";
ВнешниеИсточникиДанных.СайтМИКО.УстановитьОбщиеПараметрыСоединения(ПараметрыСоединенияССайтомМИКО);
ВнешниеИсточникиДанных.СайтМИКО.УстановитьСоединение();
Запрос = Новый Запрос("ВЫБРАТЬ
                      |   b_stat_browser.Ссылка,
                      |   b_stat_browser.ID,
                      |   b_stat_browser.USER_AGENT
                      |ИЗ
                      |   ВнешнийИсточникДанных.СайтМИКО.Таблица.b_stat_browser КАК b_stat_browser");
Таблица = Запрос.Выполнить().Выгрузить();

Тут необходимо понимать что в обработке надо обязательно заново прописывать параметры соединения с внешней базой данных, они не хранятся в конфигурации. 

11. Ставим точку останова на конец процедуры и запускаем обработку в режиме предприятия. 

12. Profit smile:) 

 

p.s. мы получили данные из внешней таблицы mysql средствами языка 1С. Что самое интересное, внешние таблицы доступны в конструкторе запроса. 

upd: как можно изменять данные через ODBC я написал в этом посте.

67 Comments

  1. jorikfon

    В новой редакции платформы 1С 8.2.14 появилась возможность устанавливать связь с внешними источниками данных. У меня была идея написать программу для прямой работы с базой данных на нашем сайте из 1С:Предприятия 8

    Перейти к публикации

    Reply
  2. V_V_V

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

    Хочется уточнить один вопрос: если я установлю драйвер MySQL, а потом настрою его в «Администратор источников данных ODBC» где-нибудь в «Пользовательский DSN» или «Системный DSN», соответственно прописав там параметры подключения — смогу ли я потом подключаться к этому источнику просто по имени этой настройки? И понадобится ли заново прописывать настройки подключения к источнику данных в каждой обработке при таком подключении?

    Reply
  3. jorikfon

    Это я не пробовал, надо промоделировать 🙂 Пока я прописываю параметры в каждой обработке.

    Reply
  4. Serj1C

    (1) я экспериментировал, параметры подключения вводил дважды:

    1) в режиме конфигуратора для автоматического создания структуры таблиц

    2) в режиме предприятия для отображения динамического списка записей таблиц.

    Параметры вводились только один раз, они запоминаются в каком-то менеджере внешних источников данных, который доступен через «все функции» -> Стандартные -> Управление внешними источниками данных

    Reply
  5. V_V_V

    (3) Автор пишет «Тут необходимо понимать что в обработке надо обязательно заново прописывать параметры соединения с внешней базой данных, они не хранятся в конфигурации.». Получается, что хранятся? И как потом строка подключения из обработки выглядит? Можно пример?

    Reply
  6. German
  7. V_V_V

    (5) Спасибо за дополнительную информацию. Только Ваше подключение практически идентично авторскому. И парочка примечаний «Важно». Выходит к внешнему источнику данных через подключение, описанное в (1), встроенными средствами платформы обратиться нельзя.

    Ладно, пока сам не попробую приставать больше не буду…

    Reply
  8. dkprim

    очень полезная возможность новой версии платформы представлена наглядно в очень полезной публикации этого сообщества 🙂 спасибо 🙂

    Reply
  9. Spacer

    Да, все это безусловно хорошая вещь — внешние источники данных.

    Я вначале сильно обрадовался когда узнал что 1С сделала такой механизм.

    Но потом был сильно огорчен когда узнал что с этими источниками можно работать только на чтение.:(

    Reply
  10. Alex@ander
    Spacer пишет:

    Да, все это безусловно хорошая вещь — внешние источники данных.

    Я вначале сильно обрадовался когда узнал что 1С сделала такой механизм.

    Но потом был сильно огорчен когда узнал что с этими источниками можно работать только на чтение.:(

    Обидно что только на чтение, я уже размечтался что базу данных своего сайта смогу прикрутить и из 1С грузить информацию на сайт

    Reply
  11. ramzess

    Как то еще на тестовом релизе пытался связать с базой данных под управлением СУБД LETODB.Так и не получилось победить грабли вида иррациаональных чисел, и если среди DBF файлов базы имелись «пароленные» dbfки их прочитать так и не удалось, пока dbf редактором не исправил заголовок файла. а была такая надежда 🙁

    Reply
  12. Lara.Builova

    За статью безусловно плюс. Как только появился 14 релиз 8.2 я пыталась подключить через внешние таблицы екселевский файл, пока результат отрицательный. У кого-нибудь получилось?

    Reply
  13. jorikfon

    (9) Spacer,

    Ну собственно не совсем понятно в чем беда. Изменять данные через ODBC вроде всегда можно было. А тут вся фишка в том что с таблицей через запросы можно работать. Вроде запросы всегда только на чтение в 1С использовались 🙂

    Набросаю сегодня завтра пример как я на сайте в данные меняю. Дам ссылку тут.

    upd. На инфостарт не в силах перепостить сейчас, потому кому интересно как менять данные через ODBC, смотрите тут.

    Попозже оформлю на инфостарте статью.

    Reply
  14. anna_irk

    очень интересно

    Reply
  15. aximo

    мне бы было интересно как подключиться к файлу базы данных на сайте (например sqlite) — не задавались таким вопросом?

    Reply
  16. jorikfon

    (15) aximo,

    Я думаю что принцип соединения аналогичный.

    Сначала качаем ODBC драйвер для sqlite.

    Вот гугл выдал такую ссылку

    http://www.ch-werner.de/sqliteodbc/

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

    
    ПараметрыСоединенияССайтомМИКО.СтрокаСоединения= »
    |DRIVER={SQLite ODBC Driver};
    |SERVER=192.168.1.10;
    |DATABASE=bitrix;
    |UID=root;
    |PWD=dbpassword_4_user_root;»;
    
    

    Показать

    Под рукой нет такой базы чтобы проверить, но суть примерно такая.

    Reply
  17. aximo

    sqlite — это файл. допустим он лежит на запароленном фтп… мне кажеться, что подключение будет несколько иное… кто знает — отпишитесь

    Reply
  18. Zhe_ka

    Очень интресная тема, спасибо за статью.. обязательно попробую

    Reply
  19. jorikfon

    (17) aximo,

    Если база на запороленном ftp то надо вероятно другими средствами делать доступ, например поднимать ssh тонель и через него самбой шарить файл базы данных. Ну и строка подключения будет какой то такой.

    ПараметрыСоединенияССайтомМИКО.СтрокаСоединения= »
    |DRIVER={SQLite ODBC Driver};
    |SERVER=192.168.1.10;
    |DATABASE=\SmbSharedatabasesmytest.db;
    |UID=root;
    |PWD=dbpassword_4_user_root;»; 
    Reply
  20. vec435

    Очень интресная тема.И очень полезная,если параметры подключения действительно хранятся в конфигураторе

    Reply
  21. Raminus
    vec435 пишет:

    Очень интресная тема.И очень полезная,если параметры подключения действительно хранятся в конфигураторе

    А они там не хранятся 🙂

    Reply
  22. pri_hod

    Потестировал на MySQL… Вывод, бестолковая приблуда, зачем промежуточный механизм? какие плюсы использования???

    Reply
  23. comol

    А может вы где-нибудь описание таблиц и полей bitrix выложите? Раз уже занимались этой темой…

    Reply
  24. jorikfon

    Так это не секретная информация вроде как 🙂

    http://dev.1c-bitrix.ru/api_help/iblock/fields.php

    Reply
  25. Uscolegy

    а вот как на 2003 сервере х64 получить доступ к xbase через ODBC … ни в какую не могу загрузить дрова….

    Reply
  26. petrovaUL

    попробую данный метод когда послю 14 релиз платформы

    Reply
  27. bssat

    Всем доброго дня! Начал разбираться с использованием внешних источников. Столкнулся со следующей проблемой. Создал форму списка для таблицы MySQL. Подключение к Базе MySQL происходит, в обработчике загрузки формы делаю подключение. Но вываливается ошибка и, соответственно таблица пустая. Прилагаю скрин ошибки.

    Reply
  28. roha

    у менея точно такая же ошибка, походу при трансляции запроса 1с в mysql есть какойто ограничение по символам, изза етого формируется неправельный запрос (посмотри свой скрин там видно что текст запроса обрезан) если выбрать только 1-3 поля и они уместятся в запросе тогда работает, пока не разобрался с проблемой, возможно глючный ODBC , возможноно и в самой платформе глюк

    Reply
  29. jorikfon

    (27) bssat, непонятно почему, но у меня в в рабочем коде выскочила точно такая же ошибка как у вас на скриншоте. Пока разбираюсь в чем дело…

    Reply
  30. roha

    думаю чето с 1с и ODBC MYSQL, так как если конектится к SQL таких ошибок нет

    Reply
  31. jorikfon

    (30) roha, У меня с момента написания статьи запрос работал без проблем до 26 декабря в фоновом процессе. Что произошло я не понимаю.

    Рядом с поломанным запросом лежит другой, к другому ресурсу и он нормально отрабатывает команды из 1С. Пробовал вручную через Mysql front написать запрос, все работает отлично.

    Что то в механизме трансляции изменилось, по-моему после обновления на 8.2.15.289

    Reply
  32. jorikfon

    В тех журнале вот такая информация:

    58:43.5240-12,SDBL,3,process=rphost,p:processName=testfastwin7,t:clientID=3804,t:applicationName=1CV8,t:computerName=ADMINWIN7,t:connectID=2236,SessionID=96,Usr=Бекетов,Trans=0,Sdbl=’SELECT
    Q_001_T_001._RESULT_ID,
    Q_001_T_001._USER_TEXT,
    Q_001_T_001._ANSWER_ID,
    Q_001_T_001._ID sf_1
    FROM
    EDBT11354 Q_001_T_001
    WHERE
    (Q_001_T_001._FORM_ID = 3) AND (Q_001_T_001._RESULT_ID > 710)
    ORDER BY
    sf_1
    ‘
    58:43.5241-14,CALL,2,process=rphost,p:processName=testfastwin7,t:clientID=3804,t:applicationName=1CV8,t:computerName=ADMINWIN7,t:connectID=2236,SessionID=96,Usr=Бекетов,Interface=a73a0756-4f0e-4645-bda4-ec823b433ff7,Method=34,RetExcp=’Ошибка внешней базы данных:
    ошибка при выполнении запроса
    Ошибка ODBC. SQLSTATE: 42000
    Номер ошибки: 1064
    Описание: [MySQL][ODBC 5.1 Driver][mysqld-5.0.92]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near »»RESULT_ID»,
    T1.»USER_TEXT»,
    T1.»ANSWER_ID»,
    T1.ID
    FROM b_form_result_answer T1 » at line 2
    ‘

    Показать

    Сам код был такой:

    Запрос = Новый Запрос(«ВЫБРАТЬ
    | b_form_result_answer.RESULT_ID,
    | b_form_result_answer.USER_TEXT КАК Ответ,
    | b_form_result_answer.ANSWER_ID
    |ИЗ
    | ВнешнийИсточникДанных.www_miko_ru.Таблица.b_form_result_answer КАК b_form_result_answer
    |ГДЕ
    | b_form_result_answer.FORM_ID = 3
    | И b_form_result_answer.RESULT_ID > 710
    |АВТОУПОРЯДОЧИВАНИЕ»);
    

    Показать

    В Mysql front выполнил руками запрос, и все отрабатывает.

    SELECT
    Q_001_T_001.RESULT_ID,
    Q_001_T_001.USER_TEXT,
    Q_001_T_001.ANSWER_ID,
    Q_001_T_001.ID sf_1
    FROM
    b_form_result_answer Q_001_T_001
    WHERE
    (Q_001_T_001.FORM_ID = 3) AND (Q_001_T_001.RESULT_ID > 710)
    ORDER BY
    sf_1
    

    Показать

    куда дальше копать не знаю 🙂

    Reply
  33. jorikfon

    в 8.2.14.540 все работает….

    Reply
  34. jorikfon

    Высянил что проблема в 8.2.15.289 если поле в базе данных имеет в имени символ подчеркивания то запрос вылетает с такой ошибкой.

    т.е. если в таблице все поля заданы одним словом, то проблемы нет.Если используется символ подчеркивания то возникает ошибка трансляции запроса.

    Reply
  35. haput

    Надо дальше покопать

    Reply
  36. fr.myha

    Спасибо большое за статью, сейчас интересуюсь это темой!

    Reply
  37. q_i

    (1) V_V_V, насчёт подключения с использованием DSN: там просто строка подключения будет иметь вид «DSN=<Имя-DSN>;».

    Теоретически, так можно избавиться от необходимости указывать логин/пароль в коде.

    Reply
  38. dagroma

    Статья очень помогла при подключении к СКУД Сфинкс. Спасибо.

    Reply
  39. Levran123

    (38) dagroma, не мог бы ты подробней описать процедуру подключения к сфинксу? а то у менять только named pipe конектица, а как её к 1с подключить пока не нарыл…

    Reply
  40. savvato

    наткнулся на статью случайно, но очччень помогла в одном проекте. плюсанул)

    Reply
  41. axell

    (38) dagroma,

    Помоги пожалуйста. прочитал что ты сфинкс прикрутил к внешним источникам данных. Помоги пожалуйста у меня что то не получается

    Reply
  42. axell

    Хотя тут все настроил верно. Подключается успешно.

    Строка соединения выглядит так

    «DRIVER={MySQL ODBC 5.1 Driver};

    SERVER=10.10.107.244;

    DATABASE=tc-db-log;

    »

    Написал просто внешнюю обработку этот код отрабатывает на 5+

    «Connection = Новый COMОбъект(«ADODB.Connection»);

    ConnectionString = «DRIVER=MySQL ODBC 5.1 Driver;PWD=;PORT=3305;SERVER=10.10.107.244;UID=root;»;

    Попытка

    Connection.Open(СокрЛП(ConnectionString));

    Сообщить(«Соединение осуществлено в «+ТекущаяДата());

    Исключение

    Сообщить(ОписаниеОшибки());

    Возврат;

    КонецПопытки;»

    Ребята в чем у меня ошибка, что делаю не так????

    Reply
  43. axell

    (41) axell,

    Ребята ошибка релиза 1С:Предприятие 8.2 (8.2.16.352), все тоже самое воспроизвел на 1С:Предприятие 8.2 (8.2.14.540)все работает.

    Reply
  44. axell

    Ребята и под занавес в 1С:Предприятие 8.2 (8.2.17.135) тоже все работает.

    Reply
  45. yuraos

    (22 pri_hod, поддерживаю!

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

    Reply
  46. yuraos

    (45)

    Через ADO можно не только что-нибудь прочитать с сайта,

    но и при желании записать какие-нибудь данные.

    Например можно организовать нестандартный обмен с сайтом

    с прямой записью в базу сайта, минуя файлы выгрузки.

    Имеются определенные наработки в этом направлении.

    Reply
  47. AlekSo

    Поставил на Сервер 2008 х64. При попытке соединения выпадает ошибка:

    «Ошибка ODBC. SQLSTATE: IM002

    Номер ошибки: 0

    Описание: [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию»

    Причем всё тоже самое на обычной х32 соединяется и работает. Может ещё что-то надо добавить в строку соединения?

    Причём настроил в виндовском менеджере источников данных вполне нормально завёл это соединение.

    PS Изменил строку подключения на DSN=MySQL получил ошибку

    Ошибка ODBC. SQLSTATE: IM014

    Номер ошибки: 0

    Описание: [Microsoft][Диспетчер драйверов ODBC] В указанном DSN архитектура драйвера и архитектура приложения не соответствуют друг другу.

    Reply
  48. AlekSo

    Проблема решена удалением на сервере драйвера х64 и установкой х32

    Reply
  49. kashafeev

    Скачал и установил ODBC-Коннектор, настроил его как надо — Тест показывает, что соединение установлено. При добалении таблицы во внешнем источнике данных, когда прописываю DRIVER={MySQL ODBC 5.1 Driver}, выдаёт вот такую вот ошибку: «ошибка получения параметров строки соединения. Возможно, драйвер не позволяет получать параметры строки соединения». Что я делаю не так? 1С:Предприятие 8.3 (8.3.3.641)

    Reply
  50. alex-pro

    Устанавливать драйвер нужно на сервер 1С, а не на локальный комп, если у вас серверная версия 1С.

    А если файловая — на свой комп, конечно.

    Reply
  51. ogursoft

    А как установить связь с базой mssql? Например при изменении данных в конфигурации 1с нужно вносить изменения в базу mssql или через определенное время выполнять синхронизацию

    Reply
  52. pavel_pss

    Спасибо очень помогло

    Reply
  53. andrey314

    MySQL поддерживается внешними источниками неполноценно. Например запрос «ВЫБРАТЬ ПЕРВЫЕ 100» не работает. Отсюда как следствие невозможность отображения в динамических списках. В 8.3 уже есть поддержка MySQL

    Reply
  54. KillHunter

    А платформа 8.3 интересно поддерживат только чтение или запись тоже ?

    Reply
  55. andrey314

    (54) KillHunter, Судя по ссылке http://v8.1c.ru/o7/201402ext/index.htm поддерживает в 8.3 или будет поддерживать в следующих версиях

    Reply
  56. coollerinc

    Блин на платформе 8.3.4.496 до сих пор ошибка с полями у которых есть нижнее подчеркивание. Сейчас попробую скачать последнюю версию платформы. Если кому поможет, то надо ставить драйвер mysql x32, c x64 не работает

    Reply
  57. coollerinc

    Парни что я делаю не так? поставил себе последнюю платформу(8.3.5.1146), подключил базу через внешний источник данных. Если в конструкторе запросов выбираю поле без нижнего подчеркивания — то все работает. Если выбираю поле с нижним подчеркиванием, то выдает ошибку:

    {Форма.Форма.Форма(24)}: Ошибка при вызове метода контекста (Выполнить)

    Таблица = Запрос.Выполнить().Выгрузить();

    по причине:

    Ошибка выполнения запроса

    по причине:

    Ошибка внешней базы данных:

    ошибка при выполнении запроса

    по причине:

    Ошибка ODBC. SQLSTATE: 42000

    Номер ошибки: 1064

    Описание: [MySQL][ODBC 5.1 Driver][mysqld-5.5.25]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘»section_id»

    FROM lesson_article T1′ at line 2

    Reply
  58. ORIX86

    Для решения проблемы указать

    ПараметрыСоединенияССайтом.СУБД = «MySQL»;

    Reply
  59. Ukubaeva

    В чем моя ошибка ,подскажите, пожалуйста!

    Через внешний источник данных подключаюсь, пишу в строке соединения:

    DRIVER={MySQL ODBC 5.1 Driver};

    SERVER=192.168.0.12;

    DATABASE=asteriskcdrdb;

    Далее пишу пользователя и пароль указываю. Драйвер видит, но не подключается:

    Ошибка ODBC. SQLState:HY000 Номер ошибки: 2003

    Описание: [MySQL][ODBC Driver] Can’t connect to MySQL server on ‘192.168.0.12’ (10060)

    Может, кто сталкивался, отчего такое возникает?

    Reply
  60. Ukubaeva

    (59) Ukubaeva, Нашли проблему, брандмауер

    Reply
  61. alekseineputin

    (59) Ukubaeva, скачали (51)?

    Reply
  62. ui69

    Пока я не прописал параметры соединения вот так:

     ПараметрыСоединенияССайтом.АутентификацияСтандартная=Истина;
    ПараметрыСоединенияССайтом.ИмяПользователя=[имя_пользователя];
    ПараметрыСоединенияССайтом.Пароль=[пароль];
    ПараметрыСоединенияССайтом.СУБД=»MySQL»;

    соединения не получалось.

    В самой строке соединения только три строки — DRIVER, SERVER, DATABASE.

    Reply
  63. ui69

    Ха…

    Да для чтения данных вообще лишних движений делать не надо, после того ка создали его в конфигураторе, в обработке просто делаем запрос, безо всяких параметров соединения.

    Reply
  64. imbaZeratul

    Платформа 8.3.7.1831

    Внешние источники создались, все ок.

    В обработке пишу

    ПараметрыСоединенияССайтом = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
    ПараметрыСоединенияССайтом.СУБД = «MySQL»;
    ПараметрыСоединенияССайтом.АутентификацияСтандартная=Истина;
    ПараметрыСоединенияССайтом.ИмяПользователя=»root»;
    ПараметрыСоединенияССайтом.Пароль=»»;
    ПараметрыСоединенияССайтом.СтрокаСоединения= »
    |DRIVER={MySQL ODBC 5.1 Driver};
    |SERVER=127.0.0.1;
    |DATABASE=avto_car;
    |UID=root;
    |PWD=;»;
    ВнешниеИсточникиДанных.ВнешнийИсточникДанных1.УстановитьОбщиеПараметрыСоединения(ПараметрыСоединенияССайтом);
    ВнешниеИсточникиДанных.ВнешнийИсточникДанных1.УстановитьСоединение();
    Запрос = Новый Запрос(«ВЫБРАТЬ
    | avto_klient.Ссылка,
    | avto_klient.klient_id,
    | avto_klient.klient_name,
    | avto_klient.klient_soname,
    | avto_klient.klient_sname,
    | avto_klient.klient_avto,
    | avto_klient.klient_email,
    | avto_klient.klient_tel,
    | avto_klient.klient_dateadd,
    | avto_klient.klient_useradd,
    | avto_klient.klient_city,
    | avto_klient.Представление
    |ИЗ
    |   ВнешнийИсточникДанных.ВнешнийИсточникДанных1.Таблица.avto_klient КАК avto_klient»);
    Таблица = Запрос.Выполнить().Выгрузить(); 

    Показать

    при подключении ошибка

    http://prntscr.com/cndu9g

    Reply
  65. imbaZeratul

    (65) Разобрался

    Reply
  66. klyasseo

    (66)Такая же проблема. Расскажите как разобрались?

    Reply
  67. ui69

    (67) Не видит БД, либо у пользователя с доступом к базе проблема.

    Впринципе это и на скрин-шоте написано..

    Reply

Leave a Comment

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