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
- ПКМ на разделе «Пользователи», «Создать — Пользователь»
- В открывшемся окне выбираем локального или доменного пользователя, либо группу