В новой редакции платформы 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
p.s. мы получили данные из внешней таблицы mysql средствами языка 1С. Что самое интересное, внешние таблицы доступны в конструкторе запроса.
upd: как можно изменять данные через ODBC я написал в этом посте.
В новой редакции платформы 1С 8.2.14 появилась возможность устанавливать связь с внешними источниками данных. У меня была идея написать программу для прямой работы с базой данных на нашем сайте из 1С:Предприятия 8
Перейти к публикации
Очень интересная возможность новой платформы, да все никак руки не доходят ее попробовать.
Хочется уточнить один вопрос: если я установлю драйвер MySQL, а потом настрою его в «Администратор источников данных ODBC» где-нибудь в «Пользовательский DSN» или «Системный DSN», соответственно прописав там параметры подключения — смогу ли я потом подключаться к этому источнику просто по имени этой настройки? И понадобится ли заново прописывать настройки подключения к источнику данных в каждой обработке при таком подключении?
Это я не пробовал, надо промоделировать 🙂 Пока я прописываю параметры в каждой обработке.
(1) я экспериментировал, параметры подключения вводил дважды:
1) в режиме конфигуратора для автоматического создания структуры таблиц
2) в режиме предприятия для отображения динамического списка записей таблиц.
Параметры вводились только один раз, они запоминаются в каком-то менеджере внешних источников данных, который доступен через «все функции» -> Стандартные -> Управление внешними источниками данных
(3) Автор пишет «Тут необходимо понимать что в обработке надо обязательно заново прописывать параметры соединения с внешней базой данных, они не хранятся в конфигурации.». Получается, что хранятся? И как потом строка подключения из обработки выглядит? Можно пример?
(4)http://blog.1c-ei.ru/2011/05/1.html
(5) Спасибо за дополнительную информацию. Только Ваше подключение практически идентично авторскому. И парочка примечаний «Важно». Выходит к внешнему источнику данных через подключение, описанное в (1), встроенными средствами платформы обратиться нельзя.
Ладно, пока сам не попробую приставать больше не буду…
очень полезная возможность новой версии платформы представлена наглядно в очень полезной публикации этого сообщества 🙂 спасибо 🙂
Да, все это безусловно хорошая вещь — внешние источники данных.
Я вначале сильно обрадовался когда узнал что 1С сделала такой механизм.
Но потом был сильно огорчен когда узнал что с этими источниками можно работать только на чтение.:(
Да, все это безусловно хорошая вещь — внешние источники данных.
Я вначале сильно обрадовался когда узнал что 1С сделала такой механизм.
Но потом был сильно огорчен когда узнал что с этими источниками можно работать только на чтение.:(
Обидно что только на чтение, я уже размечтался что базу данных своего сайта смогу прикрутить и из 1С грузить информацию на сайт
Как то еще на тестовом релизе пытался связать с базой данных под управлением СУБД LETODB.Так и не получилось победить грабли вида иррациаональных чисел, и если среди DBF файлов базы имелись «пароленные» dbfки их прочитать так и не удалось, пока dbf редактором не исправил заголовок файла. а была такая надежда 🙁
За статью безусловно плюс. Как только появился 14 релиз 8.2 я пыталась подключить через внешние таблицы екселевский файл, пока результат отрицательный. У кого-нибудь получилось?
(9) Spacer,
Ну собственно не совсем понятно в чем беда. Изменять данные через ODBC вроде всегда можно было. А тут вся фишка в том что с таблицей через запросы можно работать. Вроде запросы всегда только на чтение в 1С использовались 🙂
Набросаю сегодня завтра пример как я на сайте в данные меняю. Дам ссылку тут.
upd. На инфостарт не в силах перепостить сейчас, потому кому интересно как менять данные через ODBC,смотрите тут .
Попозже оформлю на инфостарте статью.
очень интересно
мне бы было интересно как подключиться к файлу базы данных на сайте (например sqlite) — не задавались таким вопросом?
(15) aximo,
Я думаю что принцип соединения аналогичный.
Сначала качаем ODBC драйвер для sqlite.
Вот гугл выдал такую ссылку
http://www.ch-werner.de/sqliteodbc/
Потом из 1С прописываем сотроку соединения по аналогии
Показать
Под рукой нет такой базы чтобы проверить, но суть примерно такая.
sqlite — это файл. допустим он лежит на запароленном фтп… мне кажеться, что подключение будет несколько иное… кто знает — отпишитесь
Очень интресная тема, спасибо за статью.. обязательно попробую
(17) aximo,
Если база на запороленном ftp то надо вероятно другими средствами делать доступ, например поднимать ssh тонель и через него самбой шарить файл базы данных. Ну и строка подключения будет какой то такой.
Очень интресная тема.И очень полезная,если параметры подключения действительно хранятся в конфигураторе
Очень интресная тема.И очень полезная,если параметры подключения действительно хранятся в конфигураторе
А они там не хранятся 🙂
Потестировал на MySQL… Вывод, бестолковая приблуда, зачем промежуточный механизм? какие плюсы использования???
А может вы где-нибудь описание таблиц и полей bitrix выложите? Раз уже занимались этой темой…
Так это не секретная информация вроде как 🙂
http://dev.1c-bitrix.ru/api_help/iblock/fields.php
а вот как на 2003 сервере х64 получить доступ к xbase через ODBC … ни в какую не могу загрузить дрова….
попробую данный метод когда послю 14 релиз платформы
Всем доброго дня! Начал разбираться с использованием внешних источников. Столкнулся со следующей проблемой. Создал форму списка для таблицы MySQL. Подключение к Базе MySQL происходит, в обработчике загрузки формы делаю подключение. Но вываливается ошибка и, соответственно таблица пустая. Прилагаю скрин ошибки.
у менея точно такая же ошибка, походу при трансляции запроса 1с в mysql есть какойто ограничение по символам, изза етого формируется неправельный запрос (посмотри свой скрин там видно что текст запроса обрезан) если выбрать только 1-3 поля и они уместятся в запросе тогда работает, пока не разобрался с проблемой, возможно глючный ODBC , возможноно и в самой платформе глюк
(27) bssat, непонятно почему, но у меня в в рабочем коде выскочила точно такая же ошибка как у вас на скриншоте. Пока разбираюсь в чем дело…
думаю чето с 1с и ODBC MYSQL, так как если конектится к SQL таких ошибок нет
(30) roha, У меня с момента написания статьи запрос работал без проблем до 26 декабря в фоновом процессе. Что произошло я не понимаю.
Рядом с поломанным запросом лежит другой, к другому ресурсу и он нормально отрабатывает команды из 1С. Пробовал вручную через Mysql front написать запрос, все работает отлично.
Что то в механизме трансляции изменилось, по-моему после обновления на 8.2.15.289
В тех журнале вот такая информация:
Показать
Сам код был такой:
Показать
В Mysql front выполнил руками запрос, и все отрабатывает.
Показать
куда дальше копать не знаю 🙂
в 8.2.14.540 все работает….
Высянил что проблема в 8.2.15.289 если поле в базе данных имеет в имени символ подчеркивания то запрос вылетает с такой ошибкой.
т.е. если в таблице все поля заданы одним словом, то проблемы нет.Если используется символ подчеркивания то возникает ошибка трансляции запроса.
Надо дальше покопать
Спасибо большое за статью, сейчас интересуюсь это темой!
(1) V_V_V, насчёт подключения с использованием DSN: там просто строка подключения будет иметь вид «DSN=<Имя-DSN>;».
Теоретически, так можно избавиться от необходимости указывать логин/пароль в коде.
Статья очень помогла при подключении к СКУД Сфинкс. Спасибо.
(38) dagroma, не мог бы ты подробней описать процедуру подключения к сфинксу? а то у менять только named pipe конектица, а как её к 1с подключить пока не нарыл…
наткнулся на статью случайно, но очччень помогла в одном проекте. плюсанул)
(38) dagroma,
Помоги пожалуйста. прочитал что ты сфинкс прикрутил к внешним источникам данных. Помоги пожалуйста у меня что то не получается
Хотя тут все настроил верно. Подключается успешно.
Строка соединения выглядит так
«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));
Сообщить(«Соединение осуществлено в «+ТекущаяДата());
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;»
Ребята в чем у меня ошибка, что делаю не так????
(41) axell,
Ребята ошибка релиза 1С:Предприятие 8.2 (8.2.16.352), все тоже самое воспроизвел на 1С:Предприятие 8.2 (8.2.14.540)все работает.
Ребята и под занавес в 1С:Предприятие 8.2 (8.2.17.135) тоже все работает.
(22 pri_hod, поддерживаю!
Почему-бы напрямую не использовать ADO ?
(45)
Через ADO можно не только что-нибудь прочитать с сайта,
но и при желании записать какие-нибудь данные.
Например можно организовать нестандартный обмен с сайтом
с прямой записью в базу сайта, минуя файлы выгрузки.
Имеются определенныенаработки в этом направлении .
Поставил на Сервер 2008 х64. При попытке соединения выпадает ошибка:
«Ошибка ODBC. SQLSTATE: IM002
Номер ошибки: 0
Описание: [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию»
Причем всё тоже самое на обычной х32 соединяется и работает. Может ещё что-то надо добавить в строку соединения?
Причём настроил в виндовском менеджере источников данных вполне нормально завёл это соединение.
PS Изменил строку подключения на DSN=MySQL получил ошибку
Ошибка ODBC. SQLSTATE: IM014
Номер ошибки: 0
Описание: [Microsoft][Диспетчер драйверов ODBC] В указанном DSN архитектура драйвера и архитектура приложения не соответствуют друг другу.
Проблема решена удалением на сервере драйвера х64 и установкой х32
Скачал и установил ODBC-Коннектор, настроил его как надо — Тест показывает, что соединение установлено. При добалении таблицы во внешнем источнике данных, когда прописываю DRIVER={MySQL ODBC 5.1 Driver}, выдаёт вот такую вот ошибку: «ошибка получения параметров строки соединения. Возможно, драйвер не позволяет получать параметры строки соединения». Что я делаю не так? 1С:Предприятие 8.3 (8.3.3.641)
Устанавливать драйвер нужно на сервер 1С, а не на локальный комп, если у вас серверная версия 1С.
А если файловая — на свой комп, конечно.
А как установить связь с базой mssql? Например при изменении данных в конфигурации 1с нужно вносить изменения в базу mssql или через определенное время выполнять синхронизацию
Спасибо очень помогло
MySQL поддерживается внешними источниками неполноценно. Например запрос «ВЫБРАТЬ ПЕРВЫЕ 100» не работает. Отсюда как следствие невозможность отображения в динамических списках. В 8.3 уже есть поддержка MySQL
А платформа 8.3 интересно поддерживат только чтение или запись тоже ?
(54) KillHunter, Судя по ссылкеhttp://v8.1c.ru/o7/201402ext/index.htm поддерживает в 8.3 или будет поддерживать в следующих версиях
Блин на платформе 8.3.4.496 до сих пор ошибка с полями у которых есть нижнее подчеркивание. Сейчас попробую скачать последнюю версию платформы. Если кому поможет, то надо ставить драйвер mysql x32, c x64 не работает
Парни что я делаю не так? поставил себе последнюю платформу(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
Для решения проблемы указать
ПараметрыСоединенияССайтом.СУБД = «MySQL»;
В чем моя ошибка ,подскажите, пожалуйста!
Через внешний источник данных подключаюсь, пишу в строке соединения:
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)
Может, кто сталкивался, отчего такое возникает?
(59) Ukubaeva, Нашли проблему, брандмауер
(59) Ukubaeva, скачали (51)?
Пока я не прописал параметры соединения вот так:
соединения не получалось.
В самой строке соединения только три строки — DRIVER, SERVER, DATABASE.
Ха…
Да для чтения данных вообще лишних движений делать не надо, после того ка создали его в конфигураторе, в обработке просто делаем запрос, безо всяких параметров соединения.
Платформа 8.3.7.1831
Внешние источники создались, все ок.
В обработке пишу
Показать
при подключении ошибка
(65) Разобрался
(66)Такая же проблема. Расскажите как разобрались?
(67) Не видит БД, либо у пользователя с доступом к базе проблема.
Впринципе это и на скрин-шоте написано..