Com коннектор 1С

Подключение к 1C 8.3 и 8.2 по COM

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

Но по каким то причинам у новичком часто возникает затруднения с этим не сложным процессом. Ниже я расскажу пример решения этой проблемы на примере простой задачки.

Файловая

Процедура ВыполнитьПодключениеЧерезCOM() // Формируем строку подключения СтрокаПодключения = «file=’C:\Infobases\MyBase’; usr=’admin’; pwd=’password’;»; ComConnector = ПолучитьCOMОбъектПоВерсииПлатформы(); СообщениеПользователю = Новый СообщениеПользователю; Попытка ComConnection = COMConnector.Connect(СтрокаПодключения); Исключение СообщениеПользователю.Текст = «Ошибка подключения: » + ОписаниеОшибки(); СообщениеПользователю.Сообщить(); Возврат; КонецПопытки; // Получаем список справочников подключенной базы Для Каждого спр Из ComConnection.Метаданные.Справочники Цикл СообщениеПользователю.Текст = «- » + спр.Имя; СообщениеПользователю.Сообщить(); КонецЦикла; КонецПроцедуры Функция ПолучитьCOMОбъектПоВерсииПлатформы() Экспорт // Определяем имя COM-объекта по версии платформы ИмяComОбъекта = «»; Инфо = Новый СистемнаяИнформация; Если СтрНайти(Инфо.ВерсияПриложения, «8.3») > 0 Тогда ИмяComОбъекта = «V83.COMConnector»; ИначеЕсли СтрНайти(Инфо.ВерсияПриложения, «8.2») > 0 Тогда ИмяComОбъекта = «V82.COMConnector»; Иначе ВызватьИсключение «Не удалось определить версию платформы»; КонецЕсли; // Инициализируем COM-объект и соединение COMConnector = Новый COMОбъект(ИмяComОбъекта); Возврат COMConnector; КонецФункции

Серверная

Процедура ВыполнитьПодключениеЧерезCOM() // Формируем строку подключения СтрокаПодключения = «srvr=’localhost’; ref=’infobase’; usr=’admin’; pwd=’password’;»; ComConnector = ПолучитьCOMОбъектПоВерсииПлатформы(); СообщениеПользователю = Новый СообщениеПользователю; Попытка ComConnection = COMConnector.Connect(СтрокаПодключения); Исключение СообщениеПользователю.Текст = «Ошибка подключения: » + ОписаниеОшибки(); СообщениеПользователю.Сообщить(); Возврат; КонецПопытки; // Получаем список справочников подключенной базы Для Каждого спр Из ComConnection.Метаданные.Справочники Цикл СообщениеПользователю.Текст = «- » + спр.Имя; СообщениеПользователю.Сообщить(); КонецЦикла; КонецПроцедуры Функция ПолучитьCOMОбъектПоВерсииПлатформы() Экспорт // Определяем имя COM-объекта по версии платформы ИмяComОбъекта = «»; Инфо = Новый СистемнаяИнформация; Если СтрНайти(Инфо.ВерсияПриложения, «8.3») > 0 Тогда ИмяComОбъекта = «V83.COMConnector»; ИначеЕсли СтрНайти(Инфо.ВерсияПриложения, «8.2») > 0 Тогда ИмяComОбъекта = «V82.COMConnector»; Иначе ВызватьИсключение «Не удалось определить версию платформы»; КонецЕсли; // Инициализируем COM-объект и соединение COMConnector = Новый COMОбъект(ИмяComОбъекта); Возврат COMConnector; КонецФункции

Обмен 1С 8.3 по COM

Поставлена задача:

Из конфигурации «Документооборот», необходимо подключится к базе УПП:

  • найти документ по заранее известном коду, допустим «123»
  • получить статус документа
  • если статус изменился — то поменять и в соответствующем документе «документооборота

Реализация задачи:

Создание подключения к базе 1C по COM

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

Функция ПолучитьПодключениеКФайловойБД()

Параметры = «File=»»C:\1CBase»»»;Usr=»»login»»;Pwd=»»password»»;»;

V82COMConnector= Новый COMОбъект(«V82.COMConnector»);

Попытка

Возврат V82COMConnector.Connect(Параметры);

Исключение

Предупреждение («Ошибка подключения!»);

Возврат Неопределено;

КонецПопытки;

КонецФункции;

Функция вернет СОМ объект, с помощью которого можно производить действия с другой базой данных 1С 8.2.

Для клиент серверного режима, строка подключения будет немного отличаться:

Функция ПолучитьПодключениеКСервернойБД()

Параметры = «Srvr=»»server»»;Ref=»»BaseName»»;Usr=»»login»»;Pwd=»»password»»;»;

V82COMConnector= Новый COMОбъект(«V82.COMConnector»);

Попытка

Base1С = V82COMConnector.Connect(Параметры);

Исключение

Предупреждение («Ошибка подключения!»);

КонецПопытки;

КонецФункции;

Если вы подключаетесь к базе на платформе 1C 8.1 — то вам необходимо использовать не «V82.COMConnector», а «V81.COMConnector».

Найти документ 1С по COM

Для примера, пусть номер нужного документа будет «1234», а наш Документ-объект — «ДокументОбъект»:

Соединение = ПолучитьПодключениеКСервернойБД();

СсылкаНаОбъект = Соединение.Документы.РеализацияТоваровУслуг.НайтиПоКоду(«1234»);

Если Не ЗначениеЗаполнено(СсылкаНаОбъект) Тогда

Сообщить(«Не найден документ!»);

Возврат;

КонецЕсли;

СтатусДокумента = СсылкаНаОбъект.Статус;

Если ДокументОбъект.Статус СтатусДокумента Тогда

ДокументОбъект.Статус = СтатусДокумента;

ДокументОбъект.Записать();

КонецЕсли;

Вот и все: мы подключились по COM, получили нужный документ прочитали его статус и если он отличается — установили статус нашему документу.

Обработать Запрос

// Подключим ВДГО
Попытка
Состояние(«Идет процесс соединения …»);
V8 = Новый COMОбъект(«V82.ComConnector»);
СтрокаСоединения_ = «Srvr=»»b4:1641″»;Ref=»»VDGO82″»;Usr=»»admin»»;Pwd=»»Fyu@h18″»;»;
БД = V8.Connect(СтрокаСоединения_);
Сообщить(«Соединение установлено»);
Исключение
СтрокаСообщенияОбОшибке = «При попытке соедиения с COM-сервером произошла следующая ошибка:» + Символы.ПС + ОписаниеОшибки();
Сообщить(СтрокаСообщенияОбОшибке, СтатусСообщения.Важное);
Состояние(«Соединение установить не удалось»);
Состояние();
Возврат;
КонецПопытки;
//Вытащим обороты по услугам
Запрос = БД.NewObject(«Запрос»);
Запрос.УстановитьПараметр(«НачПериода», НачПериода);
Запрос.УстановитьПараметр(«КонПериода», КонецДня(КонПериода));
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
КонецЦикла;

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

  • Как создать COM объект?
  • Примеры работы с COM объектом
  • Основы принципы работы с COM соединением

Для чего нужно COM Соединение?

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

Как создать COM объект?

В начале надо узнать, какая версия 1С у вас, из этого и будем исходить при создании COM объекта.

  • Для 1С 8.2: COMConnector= Новый COMОбъект(«V82.COMConnector»);
  • Для 1С 8.3: COMConnector= Новый COMОбъект(«V83.COMConnector»);

Функция ПолучитьПодключение(СтрокаПодключения)
Попытка
//Создаем COM Объект
V83COMConnector= Новый COMОбъект(«V83.COMConnector»);
//Выполняем подключение к информационной базе
База = V83COMConnector.Connect(СтрокаПодключения);
Возврат База;
Исключение
Сообщить(ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
КонецФункции

Переменная «СтрокаПодключения» может быть двух видов:

В результате выполнения этой функции мы получим COM Объект через который можно обращаться к подключаемой базе.

Примеры работы с COM объектом

Для примера рассмотрим ситуацию, когда нам нужно через COM соединение создать склад:

Обратите внимание что «ВидСклада» мы указали через переменную «COMСоединение».

Так же часто требуется выполнить запрос через COM соединение, разберем пример на основе тех же складов:

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

Основы принципы работы с COM соединением

  • Все объекты, полученные через COM соединения, имеют тип COMОбъект, из за этого мы можем передать только простые типы, такие как: число. строка, дата, булево.
  • Для того чтобы получить элементы справочников, ссылки на документы и т.д. нужно использовать стандартные функции языка 1С. Например: НайтиПоРеквизиту(); НайтиПоНаименованию(); Выборкой; Запросами и т.д..
  • В результате каждого подключения будет задействована одна лицензия.

Сначала зарегистрируем библиотеку comcntr.dll. Для этого запускаем cmd от имени администратора и выполним поочередно следующие команды:

cd C:\Program Files (x86)\1cv8\8.3.13.1690\bin
regsvr32 comcntr.dll

Вместо «8.3.13.1690» — нужно подставить требуемую версию платформы

Или можно обойтись одной строкой команды:

regsvr32 «C:\Program Files (x86)\1cv8\8.3.13.1690\bin\comcntr.dll»

Далее опишу полный процесс создания COM+ соединения

1. Запускаем оснастку «Службы компонентов» из папки Администрирование.

Пуск — Панель управления — Система и безопасность — Администрирование — Службы компонентов

или

win+R -> control userpasswords -> Службы компонентов

2. Раскрываем ветку «Службы компонентов» — компьютер — Приложения COM+

Создать — приложение

3. Откроется окно мастера установки приложений COM+. Ждем «Далее»

4. Выбираем «Создать новое приложение»

5. Вбиваем имя приложения. В моем примере — «v83COMConnector». Отмечаем чекбокс «Серверное приложение»

6. В следующем окне указывается учетная запись, от имени которой будет запускаться компонент. В моем примере я выбираю чекбокс «Текущий (вошедший в систему) пользователь

7. В следующем окне просто жмем «Далее»

8. На следующем шаге можно добавить пользователей, либо группу пользователей, которым необходимо предоставить права на запуск COM+ приложения (локальные/доменные — не важно)

9. Закрываем мастер кнопкой «Готово»

10. Теперь необходимо создать компонент. Возвращаемся к оснастке «Службы компонентов», раскрываем созданное COM+ приложение, встаем на ветку «Компоненты»

Создать — Компонент

11. Откроется окно «Мастера установки компонентов COM+». Жмем «Далее»

12. В следующем окне выбираем «Установка новых компонентов»

13. Теперь с помощью открывшегося окна проводника выберите ранее зарегистрированную библиотеку comcntr.dll, которая лежит в папке установленной 1С, в каталоге bin. В моем случае

C:\Program Files (x86)\1cv8\8.3.13.1690\bin\comcntr.dll

«Enter» или кнопка «Открыть»

14. В следующем окне просто жмите «Далее»

15. Закрываем окно мастера кнопкой «Готово»

16. Раскройте ветку «Компоненты». Здесь вы должны увидеть созданный на предыдущем шаге компонент. Выделите его, нажмите ПКМ — Свойства

17. На вкладке «Безопасность» нужно отметить галочкой CreateOwner и нажать «ОК»

Компонента COM+ создана. COM+ приложение настроено!

Обновление версии компонента

Иногда необходимо зарегистрировать иную версию библиотеки comcntr.dll.

Для того, чтобы посмотреть текущую зарегистрированную версию, необходимо войти в свойства компонена V83.COMConnector (см п.16) данного руководства

На вкладке «Общие» будет прописан путь. В моем случае это версия 8.3.13.1690

Зарегистрировать другую версию библиотеки можно при помощи уже рассмотренной команды regsvr32

regsvr32 «C:\Program Files (x86)\1cv8\8.3.14.1565\bin\comcntr.dll»

Права на запуск COM+

Если в п.8 вы забыли указать пользователей или группы, кому необходимы права для запуска COM+ приложения, то добавить нужных пользователей можно так:

  • Панель управления — Система и безопасность — Администрирование — Службы компонентов
  • Раскрываем ветку: Приложения COM+ — v83COMConnector — Роли — CreateOwner
  • ПКМ на разделе «Пользователи», «Создать — Пользователь»
  • В открывшемся окне выбираем локального или доменного пользователя, либо группу

Поделиться ссылкой:

Add a Comment

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