Что такое com соединение в 1с
Перейти к содержимому

Что такое com соединение в 1с

  • автор:

Внешнее соединение

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

Внешнее соединение

Отличия от Automation-сервера

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

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

Внешнее соединение

Преимущества

При использовании внешнего соединения имеются следующие преимущества по сравнению с использованием Automation-сервера:

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

Пример

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

  • создается менеджер COM-соединений, с помощью которого производится установка соединения;
  • через полученный объект внешнего соединения производится обращение к допустимым методам, свойствам и объектам базы данных, с которой установлено соединение.

В качестве примера можно привести обращение к информационной базе 1С:Предприятия 8 через внешнее соединение из программы на языке MS Visual Basic.

Информационная база находится в каталоге c:\InfoBases\Trade. В программе 1С:Предприятие 8 создается объект типа СправочникМенеджер.Товары и создается новая группа элементов с названием ***** Экспорт из Excel ******. Во вновь созданную группу каталога записываются данные из таблицы MS Excel:

Dim cntr As Object
Dim trade As Object
Dim Элемент As Object

Set cntr = CreateObject («V82.COMConnector») ‘Создать менеджер COM-соединений
Set trade = cntr.Connect («File=»»c:\InfoBases\Trade»»; Usr=»»Director»»;») ‘Получить внешнее соединение
Set СправочникТоваров = trade.Справочники.Товары
Set ГруппаТоваров = СправочникТоваров.СоздатьГруппу ()

ГруппаТоваров.Наименование = «***** Экспорт из Excel ******»
ГруппаТоваров.Записать

N = 100 ‘Количество строк в документе
For Count = 1 To N

Set Элемент = СправочникТоваров.СоздатьЭлемент ()
Элемент.Наименование = Application.Cells (Count, 2).Value
Элемент.Розн_Цена = Application.Cells (Count, 3).Value
Элемент.Мел_Опт_Цена = Application.Cells (Count, 4).Value
Элемент.Опт_Цена = Application.Cells (Count, 5).Value
Элемент.Родитель = ГруппаТоваров.Ссылка

Контекст исполнения

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

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

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

  • системные константы;
  • значения заданных в конфигураторе объектов, доступ к которым осуществляется с помощью менеджеров (например, константы, перечисления, справочники, документы, журналы документов, отчеты, обработки, планы видов характеристик, планы счетов, планы видов расчета, регистры);
  • переменные, объявленные в модуле внешнего соединения с ключевым словом Экспорт.

В качестве своих методов внешнее соединение может иметь:

  • системные процедуры и функции;
  • процедуры и функции модуля внешнего соединения и общих модулей, объявленные с ключевым словом Экспорт;
  • дополнительный метод NewObject.

Пул соединений

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

Варианты использования

С помощью внешнего соединения можно, например, организовать веб-доступ к базе данных 1С:Предприятия 8:

Внешнее соединение

Также внешнее соединение позволяет организовать обмен XML-документами системы 1С:Предприятие 8 с внешним приложением:

Внешнее соединение

Авторы: Е.Ю. Хрусталева

COM соединение в 1С 8.3

Анна Викулина

Одним из способов перенести данные из одной конфигурации 1С в другую является программное подключение с помощью COM. Многие компании используют несколько различных баз, между которыми должны быть определенные связи и зависимости. Если необходимо не только перенести данные, но и выполнить определенную обработку данных, то COM соединение будет оптимальным механизмом. Умение анализировать данные из другой базы 1С пригодиться любому разработчику.

Подключаемся через COM к базе 1С

Для реализации COM соединения в 1С используется специальный механизм под названием COMConnector. Этот объект устанавливается вместе с платформой и применяется для связи информационных баз. Следует учесть, что для версий 8.2 и 8.3 используются разные по наименованию объекты – «V82.COMConnector» и «V83.COMConnector» соответственно.

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

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

  1. Какого она типа – файловая или клиент-серверная;
  2. Где она располагается;
  3. Под каким именем и паролем в нее можно зайти;
  4. Какие данные вас интересуют.

Из первых трех пунктов для реализации COM соединения необходимо сформировать строку параметров. В зависимости от типа ИБ она будет отличаться внешним видом. Используя полученную строку, происходит подключение, с помощью которого можно собирать для анализа и обработки данные из другой базы любыми методами.

 ПараметрыПодключенияФайловойИБ = "Filе=""Путь_к_базе""; Usr=""Имя_пользователя"";Pwd=""Пароль"""; ПараметрыПодключенияКлиентСервернойИБ = "Srvr=""Имя_Сервера""; Ref=""Имя_базы""; Usr=""Имя_пользователя""; Pwd=""Пароль"""; 

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

 &НаСервере Функция ПодключитьсяКбазе() экспорт ПараметрыПодключенияИБ = "Filе=""Е:\базы 1с\ЕRР""; Usr=""Администратор"";Pwd=""1"""; V83COMCon= Новый СОMОбъект("V83.COMConnector"); Попытка Возврат V83COMCon.Connect(ПараметрыПодключенияИБ); Исключение Сообщить(ОписаниеОшибки()); Возврат Неопределено; КонецПопытки; КонецФункции 

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

Получаем данные из базы 1С

После того как получили нужный объект, необходимо прочитать данные из другой базы. Для этого мы применяем запрос через COM соединение в 1С 8.3 с помощью полученного значения типа «COM объект» из функции. Важно сначала подключиться к базе, а затем уже выполнять запрос. Выполнение происходит через метод NewObject с указанием в качестве параметра типа объекта в строковом виде – «Запрос».

 &НаСервере Процедура ТестСОMНаСервере() Соединение = ПодключитьсяКбазе(); Если ТипЗнч(Соединение) <> Тип("Неопределено") Тогда ЗапросБПЗО = Соединение.NewObject("Запрос"); ЗапросБПЗО.Текст = "ВЫБРАТЬ первые 15 | СправочникПольз.Наименование КАК Наименование |ИЗ | Справочник.пользователи КАК СправочникПольз"; Выборка = ЗапросБПЗО.Выполнить().выбрать(); Пока Выборка.следующий() цикл Сообщить(Выборка.Номер); КонецЦикла; КонецЕсли; КонецПроцедуры 

К примеру, чтобы получить информацию о пользователях определенного подразделения, зададим условие в запрос через параметры. Один параметр будет простого типа – строка, а подразделение – ссылкой элемента справочника «Структура предприятия». Результат запроса является таблицей с перечисленными полями того типа, какого они существуют в базе, к которой произошло COM соединение. Если необходимо их преобразовать в другие типы – воспользуйтесь стандартными функциями платформы:

 ЗапросБПЗО = Соединение.NewObject("Запрос"); ЗапросБПЗО.Текст = "ВЫБРАТЬ первые 15 | СправочникПольз.Наименование КАК Наименование |ИЗ | Справочник.Пользователи КАК СправочникПольз I ГДЕ | СправочникПольз.Подразделение = &НужноеПодразделение | И СправочникПольз.Наименование подобно ""%"" + &НужноеИмя+ ""%"""; ЗапросБПЗО.УстановитьПараметр("НужноеПодразделение",Соединение.Справочники.СтруктураПредприятия.НайтиПоКоду("00-000023")); ЗапросБПЗО.УстановитьПараметр("НужноеИмя","Екатерина"); Выборка = ЗапросБПЗО.Выполнить().выбрать(); Пока Выборка.следующий() цикл Сообщить(Выборка.Наименование); КонецЦикла; 

Если нужно передать в базу массив для отбора по нескольким параметрам, например, подразделениям, тоже используется команда NewObject. Аналогично можно передавать список или таблицу значений, заполняя их элементами другой базы через соединение. Для поиска вам доступны все существующие методы объектов и механизмов платформы.

 ЗапросБПЗО = Соединение.NewObject.("Запрос"); ЗапросБПЗО.Текст = "ВЫБРАТЬ первые 15 | СправочникПольз.Наименование КАК Наименование | ИЗ | Справочник.Пользователи КАК СправочникПольз I ГДЕ | СправочникПольз.Подразделение В (&НужноеПодразделение) | И СправочникПольз.Наименование подобно ""%"" + &НужноеИмя+ ""%"""; МассивПодразделений = Соединение.NewObject("Массив"); МассивПодразделений.Добавить(Соединение.Справочники.СтруктураПредприятия.НайтиПоКоду("00-000023")); МассивПодразделений.Добавить(Соединение.Справочники.СтруктураПредприятия.НайтиПоКоду("00-000038")); МассивПодразделений.Добавить(Соединение.Справочники.СтруктураПредприятия.НайтиПоКоду("00-000046")); ЗапросБПЗО.УстановитьПараметр("НужноеПодразделение", МассивПодразделений); ЗапросБПЗО.УстановитьПараметр("НужноеИмя","Екатерина"); Выборка = ЗапросБПЗО.Выполнить().выбрать(); Пока Выборка.следующий() цикл Сообщить(Выборка.Наименование); КонецЦикла; 

При переносе документов или элементов справочников всегда возникает вопрос о контроле переноса определенного объекта. С помощью COM соединений можно решить подобные проблемы через уникальный идентификатор. Нужно найти объект в подключаемой базе по идентификатору из текущей ИБ с помощью функции «ПолучитьСсылку», используя идентификатор в виде строки. Если такового не нашлось, вы можете создать его с помощью COM соединения.

 СтрИдент = Строка(Справочники.Пользователи.НайтиПоКоду("00-0000313").УникальныйИдентификатор()); Если НЕ ЗначениеЗаполнено(Соединение.Справочники.Пользователи.ПолучитьСсылку(Соединение.NewObject("УникальныйИдентификатор", СтрИдент))) тогда НовыйПользователь = Соединение.Справочники.Пользователи.СоздатьЭлемент(); НовыйПользователь.Наименование = Справочники.Пользователи.НайтиПоКоду("00-0000313").Наименование; НовыйПользователь.ФизическоеЛицо = Справочники.Пользователи.НайтиПоКоду("00-0000313").ФизическоеЛицо; НовыйПользователь.Записать(); КонецЕсли; 

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

Внешнее соединение

 Соединение..; ПеременнаяИзФункции = Соединение..; 

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

Использование COM-соединения при работе в онлайн-режиме с базами на платформе «1С: Предприятие»

В типовых продуктах на платформе Mobile SMARTS предусмотрена возможность обмена данными с товароучетной системой в онлайн-режиме. Это значит, что получение справочников и документов на мобильное устройство будет происходить непосредственно из базы 1С, без ручной загрузки/ выгрузки данных с помощью внешней обработки. С товароучетной системой «1С: Предприятие» такой обмен может происходить с помощью внешнего соединения (COM-соединения), для реализации которого в 1С используется специальный механизм под названием COMConnector.
Для установки внешнего соединения с информационной базой «1С:Предприятия 8», используется COM-объект V83.COMConnector (для платформы версии 8.3) или V82.COMConnector (для платформы версии 8.2). С помощью одного экземпляра объекта можно установить неограниченное количество соединений. Если COM-соединение не работает, возможно, потребуется перерегистрировать файлы dll (запустить файл «Зарегистрировать COM.bat», который находится в папке «Connectivity» платформы Mobile SMARTS).
Более подробно о COM-соединении можно прочитать в статье «Внешнее соединение» на официальном сайте 1С. Однако, COM-соединение является не самым оптимальным методом обмена, и по некоторым параметрам может проигрывать такому методу, как Web-сервис.

Была ли статья полезна?

COM соединение в 1С 8.3 на примере

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

Иногда стандартного функционала не достаточно, например, когда нужно применить сложные алгоритмы обработки данных. В таких случаях целесообразнее использовать в 1С 8.3 COM-соединение. Этот механизм позволяет подсоединиться к другой базе и получать из нее все необходимые данные. Такой способ отличается повышенным быстродействием и надежностью.

схема работы с ком-соединением

Реализация COM-соединения

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

Обратите внимание, что способ подключения к файловым и клиент-серверным базам отличается. Мы будем применять «V83.COMConnector», так как работа идет с базами на платформе 8.3. Следовательно, для более низких версий будут использоваться COMConnector V81 и V82 соответственно.

&НаСервере Функция ПодключитьБД() // Данный формат используется, если надо подключиться – файл. ИБ ПараметрыПодключенияИБ = "File color: black;">"D:\BUH30""; Usr color: black;">"administrator"";Pwd color: black;">"123456"""; // Данный формат используется для подключения к клиент-сервер. ИБ // ПараметрыПодключенияИБ = "Srvr=""НаименованиеСервера"";Ref=""ИмяИБ"";Usr=""ЛогинПользователя"";Pwd=""ПарольПользователя""; V83COMCon= Новый COMОбъект("V83.COMConnector"); Попытка Возврат V83COMCon.Connect(ПараметрыПодключенияИБ); Исключение Сообщить(ОписаниеОшибки()); Возврат Неопределено; КонецПопытки; КонецФункции 

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

&НаСервере Процедура ПолучитьОплаченныеСчетаНаСервере() СоединениеБУХ = ПодключитьБД(); Если ТипЗнч(СоединениеБУХ) > Тип("Неопределено") Тогда ЗапросБП30 = СоединениеБУХ.NewObject("Запрос"); ЗапросБП30.Текст = "ВЫБРАТЬ | РеализацияТУ.Номер КАК Номер, | РеализацияТУ.СуммаДокумента КАК СуммаДокумента |ИЗ | Документ.РеализацияТоваровУслуг КАК РеализацияТУ |ГДЕ | РеализацияТУ.Проведен = ИСТИНА | И РеализацияТУ.Дата МЕЖДУ &ДатаН И &ДатаО"; ЗапросБП30.УстановитьПараметр("ДатаН", Объект.ДатаН); ЗапросБП30.УстановитьПараметр("ДатаО", Объект.ДатаО); Объект.СписокДокументов = ЗапросБП30.Выполнить().Выгрузить(); КонецЕсли; КонецПроцедуры 

После выполнения наша обработка будет выглядеть так, как показано на рисунке ниже.

Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.
Связаться с нами можно по телефону +7 499 350 29 00.
Услуги и цены можно увидеть по ссылке.
Будем рады помочь Вам!

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *