Подключение 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!