1с подключение к oracle

Обновлено: 04.07.2024

В соглашении в основном речь об изменении и упор на недокументированные средства. С другой стороны "ПолучитьСтруктуруХраненияБазыДанных" вполне документирована, плюс статьи ИТС "Индексы таблиц базы данных", "Размещение данных 1С:Предприятия 8.1", "Размещение данных 1С:Предприятия 8.1. Таблицы и поля". Правда в ИТС явным образом указано, что не следует работать с данными "в обход" платформы.

Я бы лично постарался организовать обмен через XML. Да, прямой обмен быстрее - достижимы скорости до дестяков тысяч записей в секунду, при обмене через XML (конечно не при стандартной схеме!) - даже в хорошо оптимизированном варианте имеет смысл рассчитывать лишь на 200-2000 записей в секунду, но вот стоимость поддержки первого варианта.

1. Для связи с 1С создать интерфейсные таблички для входящих и исходящих данных (включая поля статуса обработки, дату insert-а и обработки). Средствами 1С настроить периодическую работу с этими таблицами. В Oracle, так понимаю, можно ходить напрямую. В той системе, откуда должны передаваться данные, сделать табличку событий - events(с ключиком события, его названием) и по периодическому опросу этой таблицы начинать обработку, передачу данных.

2. Связываться с 1С через их собственные интерфейсы. Вроде они даже предоставляют механизм веб-сервисов для этого.

Мы делали как в п.1. При этом используем в качестве корпоративного стандарта интеграционную платформу IBM WebSphere Business Integration Server. Это "тяжелая" система, интегрирует еще порядка 10 других приложений.

В вашем случае все интеграционное решение очень просто реализуется на Apache Camel. Camel обладает возможностью подсоединения к 70-ти различным типам сервисов, включая базы данных, веб-сервисы, те-же файлы и др. А также мощной поддержкой EAI-паттернов.

Вот что желательно не делать, когда нужно связать несколько систем:
1. Не связывать БД напрямую друг с другом. Это "сильное" связывание приведет к проблемам при будущих модификациях.
2. По возможности, не использовать файлы вообще.
3. По возможности, не использовать синхронные вызовы, включая COM и OLE.

По ходу дела подумайте, а есть ли у вас справочники, которые нужно синхронизировать между системами?

Я — ярый противник местечковой интеграции и узкого подхода. Интеграция это всегда нетривиальная задача, которая кажется гораздо проще, чем есть на самом деле.

2. Связываться с 1С через их собственные интерфейсы. Вроде они даже предоставляют механизм веб-сервисов для этого.

Мы делали как в п.1. При этом используем в качестве корпоративного стандарта интеграционную платформу IBM WebSphere Business Integration Server. Это "тяжелая" система, интегрирует еще порядка 10 других приложений.

Как я упоминал, у нас интеграция построена на IBM-овской платформе. Но этот же процесс на Apache Camel можно реализовать в виде вот такого простенького маршрута:

В общем, если у вас есть доступ к одной и второй базе данных, вы знаете структуру данных — остальное дело техники.

Доступ к унаследованным базам данных удобно делать через camel-ibatis компонент, он и используется в примере. Посмотрите страничку этого компонента, там немного написано про его конфигурацию и показаны простые примеры. Сам же компонент это всего лишь удобная обертка над фреймворком iBATIS. Поэтому о всех ньюансах конфигурации можно прочитать в документации на iBATIS.

В ближайшее время я планирую написать небольшой пример интеграции между парой БД с использованием Camel. Ссылку оставлю в этой ветке.

При использовании для доступа к данным 1С:Предприятия 8.0 COM -соединения имеются следующие преимущества по сравнению с использованием Automation сервера:

  1. Более быстрая установка соединения, так как не требуется создания отдельного процесса операционной системы, а все действия производятся в рамках вызывающего процесса;
  2. Более быстрое обращение к свойствам и методам объектов 1C:Предприятия, так как для организации обращения не требуется организации межпроцессной коммуникации;
  3. Меньший расход ресурсов операционной системы.

В общем и целом работа с 1С:Предприятием 8.0 через COM -соединение подобна работе с 1С:Предприятием в режиме Automation сервера. Основные отличия заключаются в следующем:

  1. В случае Automation сервера запускается полноценное приложение 1С:Предпприятия 8.0, а в случае COM -соединения запускается относительно небольшой внутрипроцессный COM -сервер.
  2. При работе через COM -соединение недоступны функциональные возможности так или иначе связанные с организацией пользовательского интерфейса 1С:Предприятия 8.0;
  3. При работе COM -соединения не используется модуль приложения конфигурации 1С:Предприятия 8.0. Его роль при работе с COM -соединением играет модуль внешнего соединения.

1.1 Порядок установки COM-соединения

Для организации доступа к данным 1С:Предприятия 8.0 через COM -соединение, выполняется следующая последовательность действий:

Важно! В связи с отсутствием пользовательского интерфейса в COM-соеденении не все объекты, а также свойства и методы можно использовать в COM -соединении.

Объекты 1С:Предприятия, доступные извне через COM -соединение:

  1. Экспортируемые переменные и процедуры/функции модуля внешнего соединения
  2. Экспортируемые переменные и процедуры/функции общих модулей
  3. Включение и исключение модулей целиком с помощью установки свойств общих модулей
  4. Включение и исключение фрагментов общих модулей с помощью препроцессора
  5. Глобальный контекст 1С:Предприятия 8.0, за исключением объектов, жестко связанных с клиентским приложением (ТекстовыйДокумент, ТабличныйДокумент, . )

1.2 Модуль внешнего соединения

Как уже отмечалось обязанности модуля приложения при работе через COM -соединение, выполняет модуль внешнего соединения. Данный модуль может иметь процедуры-обработчики событий ПриНачалеРаботыСистемы() и ПриЗавершенииРаботыСистемы(), в которых могут быть размещены действия, выполняемые при инициализации и завершении соединения, соответственно.

Процедуры, функции и глобальные переменные, определенные в модуле внешнего соединения с ключевым словом Экспорт становятся, как и в случае модуля приложения, частью глобального контекста.

1.3 Общие модули

Для общих модулей введены свойства "Клиент", "Сервер" и "ВнешнееСоединение". Они предназначены для определения в конфигурации использования модулей в клиент - серверном варианте и в режиме COM -соединения.

1.4 Объект "V8.COMConnector"

Строка соединения с ИБ представляет собой цепочку фрагментов вида Параметр=Значение. Фрагменты отделяются друг от друга символами ';'. Если значение содержит пробельные символы, то оно должно быть заключено в двойные кавычки (").

Usr - имя пользователя;
Pwd - пароль.

Для файлового варианта определен параметр:

File - каталог информационной базы.

Для клиент-серверного варианта определены параметры:

Srvr - имя сервера 1С:Предприятия;
Ref - имя информационной базы на сервере.

Метод Connect возвращает ссылку на созданный объект COM -соединения.

Метод Connect устанавливает COM -соединение с информационной базой 1С:Предприятия 8.0 и возвращает ссылку на объект COM -соединение.

// Создается объект-коннектор
V8 = Новый COMObject ("V8.COMConnector");
// создается объект COM -соединение
Соединение = V8.Connect ("File=""c:\InfoBases\Trade""; Usr =""Director"";")

Авторизация доступа через COM -соединение возможна как с помощью параметров строки соединения «Usr» и «Pwd», так и через пользователя Windows, в любом случае должно быть право на «Внешнее соединение».

1.5 Объект "COM-соединение"

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

Кроме того, COM -соединение имеет дополнительный метод NewObject, с помощью которого можно создавать значения определенных типов.

тз = Соединение. NewObject ("ТаблицаЗначений");

Метод String Позволяет получать строковые представления значений 1С:Предприятия.

1.6. Особенности работы с COM -соединением

В Automation и в COM -соединении TRUE и FALSE имеют соответственно значения: -1 (минус единица) и 0.

Имеется возможность организации пула COM-соединений. При этом на принимающей на сервере 1С:Предприятия ЗАРАНЕЕ создаются несколько объектов COM-соединения и на установку соединения требуется еще меньше времени, поскольку не нужно создавать новый объект.

Реализован новый объект ПостроительЗапроса, предназначенный для генерации текстов запросов на основании указанных настроек. Данный объект поддерживает функциональность построителя отчета, не относящуюся к выводу отчета в табличный документ и другим задачам, связанным с пользовательским интерфейсом. Данный объект может использоваться на сервере 1С:Предприятия и в COM -соединении.

Доступно использование COM -объектов при работе встроенного языка на сервере 1С:Предприятия.

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

Провайдер

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



Здесь в разделе Drivers нас интересует пакет Oracle Data Access Components for Windows



Дальше разберетесь сами. Нужно только выбрать правильную разрядность. Не надо только качать пакет где в названии есть Xcopy. В нем используется какая-то полуавтоматическая установка через .bat файлы.
В процессе установки можно выбрать только то, что нас интересует Oracle Provider For OLE DB



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



После установки откроем наш файл *.udl и теперь мы видим, что на закладке Поставщик данных появилась еще одна строчка с провайдером Oracle Provider for OLE DB


На какой рабочей станции устанавливать драйвер

Теперь немного порассуждаем на каком компьютере должен быть установлен провайдер. Это может отразиться и на выборе разрядности драйвера, о чем говорилось в предыдущем пункте. Раз уж вы читаете эту статью вряд ли вы используете файловый вариант базы 1С, т.к. базы данных Oracle используются как правило очень крупными организациями. Скорее речь идет о клиент-серверном варианте базы 1С. Таким образом мы имеем два варианта.

Либо устанавливать драйвер на каждой клиентской машине, либо один раз на сервере, где физически установлен сервер 1С:Предприятия. Понятно, что ставить драйвер на каждую клиентскую машину это не вариант, тем более, что у разных пользователей могут быть установлены операционные системы с разной разрядностью. Да и само количество пользовательских станций может быть большим. Поэтому устанавливать драйвер будем на сервере 1С:Предприятия. Напомню, что код на сервере 1С:Предприятия выполняется от имени служебного пользователя USR1CV8. Соответственно у этого пользователя должны быть права на использование провайдера.

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

Так как драйвер мы установили на сервере, то и установка соединения должна выполняться на сервере, для этого процедуру подключения к оракловой базе разместим в серверном общем модуле ОбщегоНазначенияСервер.

Теперь хочу сделать несколько пояснений.

  • Если кто-то заметил, то псевдонимы полей в тексте запроса взяты в кавычки. Это особенность языка PL/SQL. Ни в языке запросов 1С ни в Transact-SQL эти кавычки не нужны.Поэтому, если будете использовать псевдонимы, помните про этот момент, иначе запрос вывалится с ошибкой.
  • В строке запроса

Теперь проделаем обратную операцию. Вставим записи из таблицы значений в таблицу базы данных Oracle.

И опять несколько замечаний

    В следующей строке

Спасибо, очень полезно!
И ещё, вроде бы, в INSERT INTO запросе вылетит ошибка, т.к. отсутствует открывающая скобка для VALUES (очепятка) %)

Создание базы данных Oracle для "1С:Предприятия" с помощью Oracle Database Configuration Assistant

Статья описывает процесс создания базы данных Oracle версии 10.2 для работы с платформой "1С:Предприятие 8.2".

Необходимо подчеркнуть, что база данных Oracle - это более объемная сущность, чем база данных MSSQL Server. Наиболее подходящая аналогия выглядит так:

  • Базе данных Oracle соответствует понятие экземпляра MSSQL Server.
  • Схеме данных в базе данных Oracle соответствует понятие базы данных в MSSQL Server.

Платформа "1С:Предприятие 8.2" не осуществляет создание базы данных Oracle. Создание базы данных Oracle выполняется администратором системы самостоятельно с помощью утилиты Oracle Database Configuration Assistant (dbca). Для запуска данной утилиты выполните Пуск - Программы - Oracle-OraHome10 - Configuration and Migration Tools - Database Configuration Assistant .


Процесс создания базы данных состоит из нескольких шагов.


На первом шаге выберите создание базы данных Oracle ( Create a Database ). Для продолжения нажмите Следующий > .


На втором шаге в списке шаблонов для создания базы данных выберите Custom Database . Нажмите Следующий > .


На третьем шаге в поле Global Database Name задайте имя базы данных Oracle, например ORA1C. Нажмите Следующий > .

Примечание.
Имя базы данных должно содержать от 1 до 8 символов.


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


Из соображений безопасности в поле Password задайте пароль для специальных пользователей базы данных Oracle.
Повторите введенный пароль в поле Confirm Password . Нажмите Следующий > .


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


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


На восьмом шаге задайте параметры восстановления базы данных в случае сбоя. Достаточно согласиться с параметрами, предложенными по умолчанию, и нажать Следующий > .



Платформа "1С:Предприятие 8.2" не использует такие возможности СУБД, как Oracle JVM, Oracle XML DB, Oracle Intermedia. Поэтому снимем флажки Oracle JVM , Oracle XML DB . Флажок Oracle Intermedia при этом снимается автоматически.

А диалог выбора компонент примет вид:


Для Репозитория Enterprise Manager необходимо задать схему данных, где будут созданы его служебные структуры.

Для продолжения создания базы данных нажмите кнопку Следующий > .


На десятом шаге задаются параметры базы данных Oracle. Объем памяти, доступной для данной базы данных Oracle, можно задать как в процентах от общей физической памяти сервера, так и более детально (выбрав пункт Custom и установив параметры SGA Size и PGA Size ).

Значения параметров на закладках Sizing и Connection mode можно оставить по умолчанию.

ВАЖНО!
На закладке Character Sets необходимо установить значение параметра Database Character Set в значение Use Unicode (AL32UTF8).


Для продолжения нажмите Следующий > .


На одиннадцатом шаге можно скорректировать расположение файлов базы данных Oracle, задать размер логов REDO, а также создать табличные пространства. Создавать табличные пространства для платформы "1С:Предприятие 8.2" нет необходимости, т. к. платформа создаст их автоматически при создании первой информационной базы.

Если необходимо, на последнем, двенадцатом, шаге сохраните шаблон для создания других баз данных Oracle, установив флажок Save as a Database Template .


Процесс создания базы данных занимает 10-20 минут.

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

Для того чтобы иметь возможность подключиться к базе данных Oracle, необходимо наличие сервиса Oracle TNS Listener . Его создание обычно не составляет особых проблем и выполняется средствами Oracle Net Configuration Assistant (netca). Запуск утилиты выполняется выбором меню Пуск - Программы - Oracle-OraHome10 - Configuration and Migration Tools - Oracle Net Configuration Assistant .


ОDBC - это стандартизованное API, разработанное по спецификации SQL Access Group, которое
позволяет соединяться с любой базой данных, поддерживающей SQL. В нем определен стандартный
набор функций, кодов ошибок и типов данных, которые можно использовать для разработки приложений,
независимо от базы данных. Обычно, ODBC используется, если требуется независимость от базы данных,
или осуществляется работа с разными источниками данных.

  1. (Главное) Не поддерживает большинства расширений Oracle ниже чем у OOO4O

Что такое Oracle Objects for OLE (OO4O)?

  1. Полная поддержка координатора транзакций в Microsoft Transaction Server (MTS)
  2. (Главное) Простой доступ к переменным и объектам специализированных типов данных реализованных в Oracle, включая:
    1. Object References (REFs – ссылочный тип)
    2. Object Instances (Objects – объектный тип)
    3. Nested Tables (Вложенные таблицы)
    4. Varrays (Массивы переменной длины)
    5. BLOBs, CLOBs, NCLOBs and BFILEs

    Недостатки: Необходимо установить клиент Oracle на каждой пользовательской машине где планируется работать через OO4O.

    Теперь рассмотрим сам процесс работы через OO4O.

    Для начала нужно установить клиентскую часть Oracle которая идёт вместе с поставкой СУБД Oracle.
    Затем сконфигурировать файл tnsnames.ora который находится в директории:
    . \oracle\ora92\network\admin

    Приведите содержание файла к следующему виду:

    ИмяБазы=
    (DESCRIPTION=
    (ADDRESS=
    (PROTOCOL=TCP)
    (HOST=IPАдресСервера)
    (PORT=1521)
    )
    (CONNECT_DATA=
    (SERVICE_NAME=ИмяБазы)
    )
    )

    Введите свое ИмяБазы и IPАдресСервера и сохраните файл.

    В 1С соединение с базой выглядит следующим образом:

    session = Новый COMОбъект ( "OracleInProcServer.XOraSession" ); //Создаем COM обьект
    db = session . OpenDatabase ( Base , Login + " / " + Pass ,); //Открываем базу

    Если метод session.LastServerErr возвратит ноль значит соединение прошло успешно, если возвратит другое число

    значит произошла ошибка, которая будет описана в методе session.LastServerErrText


    Функция ПодключитьсяКБазеOralce ( Base , Login , Pass )
    Попытка
    session = Новый COMОбъект ( "OracleInProcServer.XOraSession" );
    db = session . OpenDatabase ( Base , Login + "/ " + Pass ,);
    Исключение
    Сообщить ( session . LastServerErrText );
    КонецПопытки;
    Возврат session . LastServerErr
    КонецФункции

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

    db . Parameters . Add ( Ключ1 , Значение1 , 1 );

    db . Parameters . Add ( Ключ2 , Значение2 , 1 );

    db . Parameters . Add ( КлючN , ЗначениеN , 1 );

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

    Для й = 0 по db . Parameters . Count - 1 Цикл
    db . Parameters . Remove ( 0 );
    КонецЦикла ;

    Ну и наконец сам запрос к базе выглядит так:

    oradynaset = db.CreateDynaset ( ТекстЗапроса ,);

    Пример функции которая записывает результат запроса в Таблицу значений :

    Функция ЗапросКOracle ( ТекстЗапроса , Параметры =Неопределено )
    Если Параметры <> Неопределено Тогда
    Для й = 0 по db . Parameters . Count - 1 Цикл
    db . Parameters . Remove ( 0 );
    КонецЦикла ;
    Для Каждого СтрПараметр Из Параметры Цикл
    db . Parameters . Add ( СтрПараметр . Ключ , СтрПараметр . Значение , 1 );
    КонецЦикла;
    КонецЕсли;

    oradynaset = db.CreateDynaset ( ТекстЗапроса ,);

    //Формируем структуру Таблицы значений из результата запроса
    Тз = Новый ТаблицаЗначений;
    ЧКТ = oradynaset . Fields . Count ();
    Для сч = 0 По ЧКТ - 1 Цикл
    Тз . Колонки . Добавить ( Строка ( oradynaset . Fields ( сч ). Name ()));
    КонецЦикла ;

    //Копируем в Таблицу значений строки результата запроса
    й = 1 ;
    Пока ( oradynaset . EOF = 0 ) Цикл
    СТЗ = Тз . Добавить ();
    Для сч = 0 По ЧКТ - 1 Цикл
    СТЗ [ Строка ( oradynaset . Fields ( сч ). Name ())] = oradynaset . Fields ( Строка ( oradynaset . Fields ( сч ). Name ())). Value ;
    КонецЦикла;
    Состояние ( "загрузка данных в таблицу значений: " + й + " из " + oradynaset.RecordCount ) ;й = й + 1;
    oradynaset . MoveNext ();
    КонецЦикла ;

    Возврат Тз
    КонецФункции

    Пример Процедуры которая использует выше описанные функции:

    Процедура Выполнить ()
    // подключаемся к базе
    Если ПодключитьсяКБазеOralce ( "ИмяБазы" , "Логин" , "Пароль" ) <> 0 Тогда
    Возврат
    КонецЕсли;

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