1С. Подключение к Oracle Database через ADODB.Connection

Хочу поделиться своим опытом интеграции  с базой данных Oracle. В этой статье мы рассмотрим механизмы подключения и чтения таблиц Oracle для последующей обработки в 1С и запись данных из 1С обратно в таблицы Oracle при помощи ADODB.Connection.

  • Провайдер 

Перед началом работы необходимо убедиться в наличии в системе провайдера (драйвера), который позволяет подключаться к источнику данных. Для баз данных Oracle существует два основных драйвера. Один от компании Microsoft — MSDAORA и второй от Oracle — OraOLEDB.

Чтобы понять какой драйвер установлен в системе, можно воспользоваться файлом с расширением *.udl. С помощью блокнота создаем и сохраняем пустой файл с расширением .udl

Открываем его и видим следующую картину:

Переходим на вкладку «Поставщик данных«, на ней мы увидим список всех доступных провайдеров. Выбираем тот, который нам необходим. В моем случае это «Microsoft OLE DB Provider for ODBC Drivers»

  • Строка подключения

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

Что бы не воспроизводить строку по памяти или не искать строку в интернете, можно воспользоваться файлом .udl, созданный ранее. Для этого возвращаемся на вкладку «Соединение«.

Заполняем имя сервера, имя пользователя, пароль и имя базы. Тестируем подключение с помощью кнопки «Проверить соединение»

Если проверка соединения выполнена успешно, жмем ОК, чтобы сохранить файл. Теперь открываем файл с помощью блокнота, и видим нужную нам строку подключения:

«Provider=MSDASQL.1;Password=********;Persist Security Info=True;User ID=U_1C_DOC;Data Source=Oracle»

  • Процедура подключения

После получения строки подключения можно переходить к подключению Oracle из 1С.

// Выполняет подключение к Oracle 
//
// Возвращаемое значение:
// Соеденение - COM объект
//
&НаСервере
Функция УстановитьСоеденениеСOracle() 

	Соединение	= Новый COMОбъект("ADODB.Connection");
		
	Строка = "Provider=MSDASQL.1;Password=Пароль;Persist Security Info=True;User ID=U_1C_DOC;Data Source=Oracle";
	
	Попытка
		Соединение.Open(Строка);
	Исключение
		ОбщегоНазначения.СообщитьПользователю(ОписаниеОшибки());
		Соединение = Неопределено;
	КонецПопытки;	

	Возврат Соединение;
	
КонецФункции // УстановитьСоеденениеСOracle()
  • Процедура чтения

После удачного подключения можно переходить к процедуре чтения

// Выполняет чтение реестра услуг по ID-расчета из Таблицы "u_1c_doc.v_PAYACT" Oracle
//
// Параметры:
//      IDРасчета - идентификатор расчета.
//
// Возвращаемое значение:
//      ТаблицаУслуг - Таблица значений
//
Функция ПрочитатьТаблицуOracle(IDРасчета) Экспорт 

	Соединение = УстановитьСоеденениеСOracle();
	
	ТекстЗапроса = "select * from u_1c_doc.v_PAYACT where CALCULATIONID = '" + IDРасчета + "'";
	Если Соединение <> Неопределено Тогда 
		Выборка = Соединение.Execute(ТекстЗапроса);
		
		ТаблицаУслуг.Очистить();
		
		Пока Выборка.EOF() = 0 Цикл
			НовСтр 			= ТаблицаУслуг.Добавить();
			НовСтр.Контрагент	= Выборка.Fields("PARTNER").Value;
			НовСтр.НомерАкта	= Выборка.Fields("ACTNUMBER").Value;
			НовСтр.ДатаАкта		= Выборка.Fields("ACTDATE").Value;
			Выборка.MoveNext();
		КонецЦикла;
	КонецЕсли;

	Возврат ТаблицаУслуг.Выгрузить();
	
КонецФункции
  • Процедура записи

После обработки данных можем вернуть в Oracle необходимую нам информацию

// Выполняет запись регистрационных данных договора в таблицу "u_1c_doc.RegTable" Oracle
// Параметры:
//     Структура - Структура регистрационных данных.
//      - РегистрационныйНомер 	- Строка
//	- ДатаРегистрации	- Дата
//	- GUID			- GUID вида документа
// 
Процедура ЗаписатьРегистрационныеДанныеВOracle(Структура) Экспорт 
	
	Соединение 		= УстановитьСоеденениеСOracle(Индентификатор);
	
	РегистрационныйНомер	= Структура.РегистрационныйНомер;
	ДатаРегистрации 	= Структура.ДатаРегистрации;
	GUID 			= Структура.GUID;
	
	ПредставлениеДаты 	= "TO_DATE('" + Формат(ДатаРегистрации, "ДФ='yyyy/MM/dd ЧЧ:ММ:сс'") + "', 'yyyy/mm/dd hh24:mi:ss')";
	
	ТекстЗапроса = "INSERT INTO u_1c_doc.RegTable (REGNUMBER, REGDATE, DOCUMENTTYPEGUID) 	
	|VALUES (" + РегистрационныйНомер +" , " + ПредставлениеДаты + ", " + GUID + ")";
	
	Попытка
		Соединение.Execute(ТекстЗапроса);
	Исключение
		ОбщегоНазначения.СообщитьПользователю(ОписаниеОшибки());
	КонецПопытки;
	
	Соединение.Close(); // закрываем соединение 
	
КонецПроцедуры

В данной статье мы рассмотрели пример работы 1С с Oracle Database через ADODB.Connection. Надеюсь, мой пример поможет Вам сократить время на поиски необходимой информации по разным источникам в интернете. Удачи!

Comments

So empty here ... leave a comment!

Добавить комментарий

Sidebar