Когда вам это пригодится.
Приведу всего два реальных примера из своей практики:
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- объектами. Получение данных удаленной базы в режиме Он-Лайн – очень востребованная и одновременно простая задача. Желаю успехов в работе.