Подключение 1C к Oracle Database
Хочу поделиться своим опытом интеграции 1С с базой данных Oracle. В этой статье мы рассмотрим механизмы подключения и чтения таблиц Oracle для последующей обработки в 1С и запись данных из 1С обратно в таблицы Oracle при помощи ADODB.Connection.
Contents
Oracle и 1C: Провайдер
Перед началом работы необходимо убедиться в наличии в системе провайдера (драйвера), который позволяет подключаться к источнику данных. Для баз данных Oracle существует два основных драйвера. Один от компании Microsoft — MSDAORA и второй от Oracle — OraOLEDB.
Чтобы понять какой драйвер установлен в системе, можно воспользоваться файлом с расширением *.udl. С помощью блокнота создаем и сохраняем пустой файл с расширением .udl
Открываем его и видим следующую картину:

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

Adodb Connection 1C:Строка подключения
После того, как мы убедились, что провайдер установлен, можно переходить к получению строки подключения к базе Oracle.
Что бы не воспроизводить строку по памяти или не искать строку в интернете, можно воспользоваться файлом .udl, созданный ранее. Для этого возвращаемся на вкладку «Соединение«.
Заполняем имя сервера, имя пользователя, пароль и имя базы. Тестируем подключение с помощью кнопки «Проверить соединение»

Если проверка соединения выполнена успешно, жмем ОК, чтобы сохранить файл. Теперь открываем файл с помощью блокнота, и видим нужную нам строку подключения:
«Provider=MSDASQL.1;Password=********;Persist Security Info=True;User ID=U_1C_DOC;Data Source=Oracle»
Процедура подключения 1C к Oracle: запрос из 1С к 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!