1с подключение через odbc

Обновлено: 08.07.2024

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

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

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


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


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


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

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

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


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


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


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

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

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


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

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

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

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

Очень интересная возможность новой платформы, да все никак руки не доходят ее попробовать.
Хочется уточнить один вопрос: если я установлю драйвер MySQL, а потом настрою его в "Администратор источников данных ODBC" где-нибудь в "Пользовательский DSN" или "Системный DSN", соответственно прописав там параметры подключения - смогу ли я потом подключаться к этому источнику просто по имени этой настройки? И понадобится ли заново прописывать настройки подключения к источнику данных в каждой обработке при таком подключении? (1) я экспериментировал, параметры подключения вводил дважды:
1) в режиме конфигуратора для автоматического создания структуры таблиц
2) в режиме предприятия для отображения динамического списка записей таблиц.
Параметры вводились только один раз, они запоминаются в каком-то менеджере внешних источников данных, который доступен через "все функции" -> Стандартные -> Управление внешними источниками данных (3) Автор пишет "Тут необходимо понимать что в обработке надо обязательно заново прописывать параметры соединения с внешней базой данных, они не хранятся в конфигурации.". Получается, что хранятся? И как потом строка подключения из обработки выглядит? Можно пример? (5) Спасибо за дополнительную информацию. Только Ваше подключение практически идентично авторскому. И парочка примечаний "Важно". Выходит к внешнему источнику данных через подключение, описанное в (1), встроенными средствами платформы обратиться нельзя.
Ладно, пока сам не попробую приставать больше не буду. (1) V_V_V, насчёт подключения с использованием DSN: там просто строка подключения будет иметь вид "DSN=<Имя-DSN>;".
Теоретически, так можно избавиться от необходимости указывать логин/пароль в коде. Это я не пробовал, надо промоделировать :) Пока я прописываю параметры в каждой обработке. очень полезная возможность новой версии платформы представлена наглядно в очень полезной публикации этого сообщества :) спасибо :) Да, все это безусловно хорошая вещь - внешние источники данных.
Я вначале сильно обрадовался когда узнал что 1С сделала такой механизм.
Но потом был сильно огорчен когда узнал что с этими источниками можно работать только на чтение.:(

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

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

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

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

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

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


Обидно что только на чтение, я уже размечтался что базу данных своего сайта смогу прикрутить и из 1С грузить информацию на сайт Как то еще на тестовом релизе пытался связать с базой данных под управлением СУБД LETODB.Так и не получилось победить грабли вида иррациаональных чисел, и если среди DBF файлов базы имелись "пароленные" dbfки их прочитать так и не удалось, пока dbf редактором не исправил заголовок файла. а была такая надежда :( За статью безусловно плюс. Как только появился 14 релиз 8.2 я пыталась подключить через внешние таблицы екселевский файл, пока результат отрицательный. У кого-нибудь получилось? мне бы было интересно как подключиться к файлу базы данных на сайте (например sqlite) - не задавались таким вопросом?

(15) aximo,
Я думаю что принцип соединения аналогичный.
Сначала качаем ODBC драйвер для sqlite.

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

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

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

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

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

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

Потестировал на MySQL. Вывод, бестолковая приблуда, зачем промежуточный механизм? какие плюсы использования. А может вы где-нибудь описание таблиц и полей bitrix выложите? Раз уже занимались этой темой.

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

: Ошибка при вызове метода контекста (Выполнить)
Таблица = Запрос.Выполнить().Выгрузить();
по причине:
Ошибка выполнения запроса
по причине:
Ошибка внешней базы данных:
ошибка при выполнении запроса
по причине:
Ошибка 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



ВИД (внешние источники данных) в 1С – это объекты конфигурации, позволяющие использовать информацию из внешних ODBC-источников (баз данных), не основанных на 1С:Предприятии, внутри прикладного решения так же, как будто бы она хранится в самой информационной базе.

В качестве ODBC-драйвера был выбран пакет FreeODBC, т.к. он бесплатный и его везде используют.

В процессе гугления использовались источники:

Установка

Достаточно установить пакет tdsodbc (разрядность должна совпадать с сервером 1С!):

(дополнительно установятся: libodbc1 odbcinst odbcinst1debian2)

В файл odbcinst.ini добавить (если не добавилось автоматически) секцию для FreeTDS:

  • Для 32-битного пакета: /usr/lib/i386-linux-gnu/odbc
  • Для 64-битного пакета: /usr/lib/x86_64-linux-gnu/odbc

Если этого не сделать, или поставить пакет не той же разрядности, что сервер 1С, то будет ошибка:
[unixODBC][Driver Manager]Can't open lib 'FreeTDS' : file not found

А вот такая ошибка будет, если неверно указали путь к либам:
/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so file not found


"Ошибка аутентификации клиента 1cv8 средствми операционной системы: Аутентификационный контекст клиента отсутствует в рабочем процессе"

Как я понял, поключаться и работать с ВИД можно двумя способами:
1) Подключаться программно.
Пример:
(Спасибо caponid за инфу о поле СУБД):

Соед = Новый ПараметрыСоединенияВнешнегоИсточникаДанных ; Соед . СУБД = "MSSQLServer" ; //Явно указываем, потому что тот тип, что указали в строке соединения, игнорируется; Источник = ВнешниеИсточникиДанных [ "НазваниеИсточника" ] ; Источник . УстановитьПараметрыСоединенияСеанса ( Соед ) ;

Но тут у меня не получилось запихнуть проинициализированный объект ВИД в запрос:

2) Использовать механизм подключения в режиме Предприятия. Параметры подключения хранятся тут:
РегистрСведений.НастройкиПодключенияКВнешнемуИсточникуДанных
или
Все функции -> Стандартные -> Управление внешними источниками данных

Строка подключения выглядит так:
"Driver=; Server=SERVER,1433; Database=BASE; User Password=PASS;"
Пользователя и пароль я запихивал в отдельные поля.

Если в режиме предприятия будут отсутствовать параметры подключения к внешнему источнику данных, то будет ошибка:
"[unixODBC][Driver Manager]Data source name not found, and no default driver specified"

Дату нужно форматировать перед добавлением, например, так:

"[FreeTDS][SQL Server]Conversion failed when converting date and/or time from character string."

"[FreeTDS][SQL Server]Cannot insert explicit value for identity column in table 't_logs' when IDENTITY_INSERT is set to OFF."

При добавлении таблицы с помощью помощника, поля с внешними ключами (foreign_key) будут по-умолчанию устанавливаться в тип объекта, а не Число. Мне это небыло нужно, поэтому вручную менял тип.

Нужно быть внимательным с поиском записи с помощью функции НайтиПоПолю(). Значение должно совпадать с типом поля в таблице. Например, строку перегонять в число:

Что не получилось

Не получилось сделать поля выбора (а-ля combobox) с выпадающим списком значений из ВИД. Ставишь реквизиту формы тип таблицы ВИД, переносишь его на форму. Все ок, элемент (контрол) создается, но не отображается. Заморачиваться не стал, вводил вручную id-шники записи, этого было достаточно.

1) FuncName
2) [FreeTDS][SQL Server]Invalid column name 'FuncName'.

1) dbo.FuncName
2) [FreeTDS][SQL Server]Cannot find either column "dbo" or the user-defined function or aggregate "dbo.FuncName", or the name is ambiguous.

1) SELECT <FuncName>
2) [FreeTDS][SQL Server]Incorrect syntax near the keyword 'SELECT'.

1) EXECUTE <FuncName>
2) [FreeTDS][SQL Server]Incorrect syntax near the keyword 'EXECUTE'.

1) * from dbo.FuncName()
2) Обращение к процедуре объекта как к функции (FuncName)

Так же не решился вопрос с кириллицей. А точнее, при создании записей из 1С в MS SQL текст на русском языке превращался в кракозябры, например:

" 0:@KB85 70O2:8 87 1!, >

Параметры сортировки базы: Cyrillic_General_CI_AS.
Что пытался сделать:
1) настроить FreeTDS, всунув в его конфиг параметр charset в секцию [global]:

ODBC (Open Database Connectivity) — это программный интерфейс, универсальное средство доступа к базам данных, разработанное для обмена между источниками (базами данных) разного типа. Данный интерфейс принято считать более низкоуровневым, чем библиотека ADOdb, однако причина эта кроется не в более низком качестве, но в том, что ODBC послужила своего рода фундаментом более поздней ADOdb – работу с последней поддерживают все типы баз, работающие и с первой.

В данной статье мы расскажем о том, как взаимодействуют ODBC и 1С, а точнее, поговорим о механизме 1С ВнешнийИсточникДанных и его использовании с вышеупомянутым интерфейсом.

В конфигураторе 1С 8 создадим новый ВнешнийИсточникДанных и назовем его.

Новый ВнешнийИсточникДанных в конфигураторе 1С 8

Рис. 1 Новый ВнешнийИсточникДанных в конфигураторе 1С 8

Для подключения к источнику данных необходимо заполнить строку соединения. Можно воспользоваться конструктором строки (кнопка “…” справа), однако я бы рекомендовал ручной ввод, как и делаю сам. Итак, вводим “Driver=; Server=localhost; Database=Test;”

Название драйвера копируем из конструктора строки соединения, где будет предложено несколько вариантов. Нас интересует тип “ODBC. ”. В моем случае было предложено “ODBC Driver 17 for SQL Server”.

Далее "Тип СУБД" – MS SQL server. Используем стандартную идентификацию – задаем пользователя и пароль.

Можно указать в строке соединения, например, “Driver=; Server=localhost; Database=Test; User Password=PASS; ” (но светить пароли мы тут не будем, разумеется).

ВнешнийИсточникДанных в конфигураторе 1С 8

Рис. 2 Заполнение строки соединения для подключения к источнику данных

Важный момент: скопируйте строку подключения – она пригодится позднее!

Следующая вкладка – “Данные”. Добавляем таблицу из нашего источника, используя функцию “Выбрать из списка таблиц внешнего источника данных”. Далее жмем зеленый плюсик, после чего система еще раз покажет окно подключения. Жмем “Ок”.

Добавление таблицы при настройке ODBC

Рис. 3 Добавление таблицы при настройке ODBC

При добавлении таблиц можно указать только их необходимые поля, оставив остальное за бортом. Пока что остановимся на этом – закрываем окно “ВнешнийИсточникДанных”.

Рис. 4 Закрытие ВнешнегоИсточникаДанных в конфигураторе 1С 8

Добавляем подключенную таблицу в подсистему, обновляем конфигурацию и запускаем в системе 1С режим Предприятие.

Сюрприз! В пользовательском режиме 1С при выборе нашей таблицы dbo_mytable возникает окно подключения к источнику данных.

Подключение к источнику данных

Рис. 5 Подключение к источнику данных

Подключение к источнику данных 1С

Рис. 6 Соединение с внешним источником данных выполнено

Теперь мы видим данные таблицы внешнего источника в ODBC. Подключение сохранилось и при следующем запуске и выборе таблицы из MSSQL в 1С:Предприятие окно подключения вызываться не будет.

2. Использование конструктора запросов 1С

Запускаем консоль запросов:

Консоль запросов в 1С:Предприятие

Рис. 7 Консоль запросов в 1С:Предприятие

Видим таблицу из внешней БД, с которой можно работать, используя конструктор запросов в 1С. Таблица, можно сказать, как влитая в нашей 1С, однако такой вариант работы с внешней БД, се же, не лишен некоторых недостатков:

· ВнешниеИсточникиДанных недоступны в расширениях (только снятие конфигурации с поддержки);

· добавление новой таблицы во внешней БД потребует добавления во ВнешнийИсточникДанных;

· в запросе нельзя соединить таблицы 1С и внешней БД. (возможное решение данной проблемы – сохранение результатов запроса к внешней БД во временную таблицу, так как ее уже можно будет соединять с таблицами 1С).

Ну, а о плюсах использования привычного конструктора запросов 1С, полагаю, читатель и так осведомлен: СКД, использование форм элемента списка и т. д.

Надеюсь, данный материал был познавательны и интересным, а если у Вас остались какие-либо вопросы, не стесняйтесь обращаться – мы всегда рады помочь!


MySQL в качестве системы управления базой данных доминирует в интернет-проектах. Приложение 1С:Предприятие может устанавливать соединения с серверами MySQL для обмена данными в обоих направлениях. Это может использоваться например:

  • для публикации сведений в интернет;
  • для получения сведений из интернет;
  • для обмена данными с другими приложениями 1С через общее интернет-хранилище.

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

DirectAdmin Web Control Panel

При использовании для управления хостингом DirectAdmin Web Control Panel следует выполнить следующую последовательность действий:

Проверить наличие драйвера в системе можно в Панель управления -> Источники данных ODBC -> Администратор источника данных ODBC, драйвер должен присутствовать в закладке Драйверы в списке установленных драйверов, в списке будет отражено имя и версия. Окно администратора источника данных ODBC можно вызвать командами:

  • x32 версия: %windir%\syswow64\odbcad32.exe
  • x64 версия: %windir%\system32\odbcad32.exe

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

[ HKEY_LOCAL_MACHINE \ SOFTWARE \ ODBC \ ODBCINST . INI \ ODBC Drivers ]

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

Все операции с сервером MySQL в программе необходимо выполнять через установленное соединение, которое реализуется универсальным COM-объектом типа Connection в его методе .Open(<строка подключения>, [<логин>], [<пароль>], [<опции>]) использующем специально подготовленную строку подключения.

Пример установки соединения:

СтрокаПодключения = СтрШаблон ( "DRIVER=; SERVER=%1; DATABASE=%2; PORT=%3; UID=%4; PWD=%5; MULTI_STATEMENTS=1; MULTI_RESULTS=1; STMT=SET CHARACTER SET utf8" , Хост , БазаДанных , Порт , Логин , Пароль ) ;

При успешной установке соединения свойство .State устанавливается в 1, а в случае ошибки остается в состоянии 0. Коллекция ошибок типа Errors доступна в объекте соединения, однако в нее попадают ошибки только уровня сервера, которые возникают после установки соединения с сервером. Если ошибка возникла до установки соединения по сетевой или иной причине, ошибка в коллекцию .Errors не попадет.

Для завершения работы с установленным соединением его желательно закрыть:

После успешного установления соединения сервером MySQL можно управлять посредством sql-выражений в пределах прав установленных для пользователя, логин которого был использован при подключении. Существует два способа выполнения sql-выражений: непосредственно через объект соединения; через дополнительный объект команды.

Запросы Соединения

Успешно открытый объект соединения типа Connection может передать на сервер MySQL sql-выражение для выполнения используя метод .Execute(<выражение>[, <обработано>[, <опции>]]), где:

Читайте также: