Возможно драйвер не позволяет получать параметры строки соединения 1с

Обновлено: 04.07.2024

В 8 версии программы 1С разработчики добавили в функционал возможность подключения сторонних баз данных и получения информации из них напрямую из конфигуратора, без использования COM соединений и OLE объектов. Эта возможность реализована при помощи нового объекта – «Внешних источников данных»

Внешние источники данных в 1С можно использовать так же, как и остальные таблицы системы:

  1. При создании отчетов и расчетов с помощью системы компоновки данных (СКД);
  2. Для получения ссылок на информацию, хранящуюся в сторонних источниках;
  3. Для изменения хранящихся в таблицах данных;
  4. При формировании запросов.

Важно знать, что этот механизм не рассчитан на работу с другими базами данных 1С, поскольку сама модель функционирования «1С.Предприятия» не предполагает вмешательства в данные на уровне физических таблиц.

Создание нового источника

Добавление нового внешнего источника в программу происходит в режиме «Конфигуратора». В дереве конфигурации есть соответствующая ветка (Рис.1)

Попотеть при создании нового источника придется, несмотря на то, что форма нового объекта имеет всего четыре закладки:

Первая закладка имеет только один интересный параметр – режим управления блокировкой. Если не задаваться вопросами о блокировании данных в транзакциях, о тонкостях распараллеливания информационных потоков можно оставить этот параметр в режиме автоматической блокировки. Однако подобный подход может привести к появлению избыточных ограничений (например, когда вместо отдельной записи программа заблокирует всю физическую таблицу, лишив остальных пользователей возможности работы с ней).

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

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

Закладка «Данные» формы свойств внешнего источника

Форма закладки «Данные» представлена на Рис. 2

Здесь мы можем добавить таблицы внешнего источника и кубы. Добавлять таблицу можно двумя способами:

  1. Вручную, тогда перед нами откроется форма добавления таблицы (Рис. 3);
  1. Либо выбрать из списка физических таблиц источника (Рис. 4), в этом случае перед нами открывается специальный конструктор.

Рассмотрим подробнее форму добавления таблицы. Свойство «Имя» служит для однозначной идентификации объекта в конфигурации.

Сопоставление объекта метаданных и конечной физической таблицы происходит через свойство «Имя в источнике данных», расположенном на закладке «Дополнительно» (Рис. 5)

Дальше мы должны определить тип таблицы, точнее её объектность. Если данные, хранимые в структуре можно однозначно идентифицировать через какое-либо одно поле, таблица – может быть объектной. Если индивидуальность записи определяется набором ключевых полей – таблица должна иметь необъектный тип.

Сравнивая такие таблицы с другими объектами метаданных можно привести следующую аналогию:

  • Объектные таблицы – это справочники;
  • Необъектные – это регистры сведений.

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

Как видно из Рис.5, некоторые поля и кнопки формы недоступны для изменения:

  • Выражение в источнике данных;
  • Тип данных таблицы;
  • Поле представления;
  • Обработчики представления.

Их можно будет использовать только после того, как мы заполним поля таблицы, определив их тип и задав им идентификаторы (Рис. 6)

Здесь следует обратить внимание на параметр «Разрешить Null», если установлен этот флажок, такое поле нежелательно использовать в качестве ключа.

Конструктор таблиц

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

В первую очередь нам предложат определиться с драйвером, который будет использоваться для подключения (Рис. 7)

Неправильное определение этого параметра не позволит подключиться к сторонней информационной базе. Также следует понимать, что не все указанные в выпадающем списке драйвера могут быть использованы для автоматического формирования строки соединения. Если платформа выдала ошибку (Рис. 8), то строку соединения придется прописывать вручную.

Для SQL драйвера, нажатие на кнопку «Далее» открывает следующую форму (Рис. 9)

Сама строка представляет собой жестко регламентированную конструкцию.

Пример строки подключения

Рассмотрим стороннюю базу данных, созданную в Microsoft Access и расположенную в корне диска D. Для подключения этой базы мы должны использовать соответствующий драйвер, но его выбор в конструкторе строки приводит к появлению ошибки Рис.8.

Самостоятельно пропишем параметры подключения.

Driver= – именно так выглядит первая часть строки. В фигурных скобках мы определили драйвер.

Для файлов Excel она будет иметь вид , для экселевских файлов, созданных в офисе старше 2003, строка драйвера будет иметь вид .

Отделив точкой запятой этот параметр от следующего, мы должны прописать адрес нашего хранилища (в нашем случае DBQ=D:\База данных1.mdb).

Сложив эти два параметра получим Driver=;DBQ=D:\База данных1.mdb, записав этот параметр, получим доступ к внутренним структурам этой базы.

Для объекта «Внешний источник» мало просто создать его в конфигурации, его еще надо подключить и в режиме «Предприятия». Это можно сделать из меню «Все функции»->Внешние источники. При первом входе в нашу таблицу нам надо прописать ту же самую строку соединения уже в режиме «Предприятия».



ВИД (внешние источники данных) в 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]:


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(<выражение>[, <обработано>[, <опции>]]), где:


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

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

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


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


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


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

DRIVER=;
SERVER=192.168.1.10;
DATABASE=bitrix;

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

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


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


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


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

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

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

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