Три кита работы с COM-объектами. Работать через COM-соединение проще, чем вы думаете.
Данная статья будет полезна как начинающим, так и продвинутым программистам, которые по каким – либо причинам до сего времени не сталкивались с работой COM-соединением.
Дочитав эту статью до конца, уже через 15 минут, вы сможете напрямую «вытягивать» данные из другой информационной базы.
ps: Хочу заранее оговориться, данная статья не претендует на звание полного и исчерпывающего мануала. Скорее всего — это просто указатель движения в правильном направлении, для быстрого освоения работы с Com-соединением.
- Описание
- Подробнее
Описание
Когда вам это пригодится.
Приведу всего два реальных примера из своей практики:
1. При работе в типовой конфигурации «Бухгалтерия предприятия 2.0» необходимо получать данные первичных документов из сторонней самописной конфигурации. На основании полученных данных, автоматически создаются документы поступлений. При этом, пользователь работает исключительно в одной базе данных.
2. Пользователь работает в переферийном узле распределенной ИБ. Необходимо, в режиме Он-Лайн, синхронизировать справочник контрагентов. На этом примере и разберем правила работы с Com – объектами.
Чем отличаются COM и OLE. Почему все же COM.
1. При запуске приложения 1С:
— OLE использует модуль обычного приложения. Запуск занимает весьма продолжительно время.
— Com использует модуль внешнего соединения, который содержит минимальное количество процедур и функций.
В результате, запуск Com в типовой «Бухгалтерии предприятия 2.0» занимает в 6 раз меньше времени.
2. При запуске Com – соединения не создается отдельного процесса 1cv8. По отзывам пользователей партнерского форума 1С, завершение работы Ole происходит не всегда корректно. И в этом случае наблюдаются ощутимые проблемы с производительностью рабочей станции.
Не вдаваясь в дальнейшие сравнения, даже на основании двух вышеизложенных моментов, я однозначно выбираю COM.
Три кита и Кит первый.
Создаем соединение к другой базе
Сервер = «Kappa»;
БазаДанных = «Acc»;
Пользователь = «Администратор»;
Пароль = «123456»;
V82 = Новый COMобъект(«V82.ComConnector»);
СтрокаПодключения = «srvr='» + СокрЛП(Сервер)
+ «‘; ref='» + СокрЛП(БазаДанных)
+ «‘; usr='» + СокрЛП(Пользователь)
+ «‘; pwd='» + СокрЛП(Пароль) + «‘;»;
БазаИсточник = V82.Connect(СтрокаПодключения);
Подключение к базе, работающей в файловом режиме, приведено в комментариях к данной публикации.
Кит второй
Все объекты, которые вы получаете через Com (у нас это БазаИсточник) имеют тип Com-объект.
Поэтому, непосредственно, мы можем использовать только реквизиты примитивных типов:
— Булево
— Строка
— Число
— Дата
Остальные реквизиты мы можем идентифицировать в текущей базе, через поиск:
— по коду
— по наименованию
— по ИНН
— а для узлов РИБ, наиболее точно, по внутреннему идентификатору.
Все Com – объекты обладают полным набором свойств и характеристик языка программирования 1С.
Пример:
СсылкаНаКонтрагента = БазаИсточник.Справочники.Контрагенты.НайтиПоРеквизиту(«ИНН», ИНН);
Где, СсылкаНаКонтрагента – тип Com-объект.
КонтрагентГоловной = БазаИсточник.Справочники.Контрагенты.СоздатьЭлемент();
Исключение: в отладчике, у Com-объекта, предопределенные реквизиты имеют только англоязычную транскрипцию. Обычные реквизиты – русскую транскрипцию.
Пример:
КонтрагентСОМ = БазаИсточник.Справочники.Контрагенты.НайтиПоРеквизиту(«ИНН», ИНН);
Код = КонтрагентСОМ.Code;
Наименование = КонтрагентСОМ.Description;
НаименованиеПолное = КонтрагентСОМ.НаименованиеПолное;
Все предопределенные реквизиты вы сможете получить и в рускоязычном представлении. Но, в некоторых случаях может не корректно отработать метод:
БазаИсточник.ЗаполнитьЗначениеСвойств(ТекущийКонтрагент, КонтрагентCom);
где, ТекущийКонтрагент — имеет тип обычной переменной, а
КонтрагентCom — Com-объект.
Кит третий
Все конструкторы в базе-источнике создаются через метод NewObject.
Пример 1:
КонтрагентГоловной = БазаИсточник.Справочники.Контрагенты.СоздатьЭлемент();
КонтрагентГоловной.УстановитьСсылкуНового(БазаИсточник.Справочники.Контрагенты.ПолучитьСсылку(БазаИсточник.NewObject(«УникальныйИдентификатор», ТекущийUID)));
Пример 2:
СтрокаUID = БазаИсточник.XMLСтрока(СсылкаНаКонтрагента);
Запрос = БазаИсточник.NewObject(«Запрос»);
Запрос.УстановитьПараметр(«UID», БазаИсточник.NewObject(«УникальныйИдентификатор», СтрокаUID));
Запрос.Текст = «……..»;
Все глобальные методы в базе-источнике вызываются через Сom – соединение
Пример: UID = БазаИсточник.XMLСтрока(СсылкаНаКонтрагента);
Пример 2:БазаИсточник.ЗначениеЗаполнено(Контрагент)
Пример 3: БазаИсточник.ЗаполнитьЗначениеСвойств(Приемник, Источник);
Пример 4 (получение имени значения перечисления Com-соединения): ИмяПеречисления = БазаИсточник.XMLСтрока(БазаИсточник.Перечисления.СтавкиНДС.НДС10);
Теперь, вы знаете три простых правила работы с Com- объектами. Получение данных удаленной базы в режиме Он-Лайн – очень востребованная и одновременно простая задача. Желаю успехов в работе.

