Примеры кода были использованы при реализации прикладных задач в процессе трудовой деятельности.
Работать с использованием COM можно между базами работающими на платформе 8.Х одного релиза (подключаться можно только к той платформе, которая имеет тот же релиз, что и текущая, и никак иначе, т.к. при данном виде подключения используются интерфейсы текущей базы). Правда, стоит отметить, можно обойти момент с релизами: например, подключаемся из 8.2.13 к 8.2.14, заменив библиотеку "comcntr.dll" из папки "bin" платформы 8.2.14 на аналогичную из 8.2.13 — но получается не вся функциональность, а "некоторая", с кучей ошибок).
Статей по технологии COM достаточно много, в данной статье приведены примеры, которые можно сразу скопировать и вставить в свою конфигурацию.
При подключении с использованием COM, в подключенной базе есть некоторые ограничения: не работают события связанные с интерфейсом(модуль управляемого приложения, модуль сеанса), но работают события модуля внешнего соединения.
Почитать про COM можно здесь
Начнем.
Создание com подключения к базе:
Процедура ПодключениеКБазе1С(ПутьКБазе, Пользователь, Пароль = "", Сервер, БазаДанных)
СтрокаПодключения = "";
Если Не ПустаяСтрока(Сервер) Тогда
СтрокаПодключения = "Srvr=""" + Сервер + """;Ref=""" + БазаДанных + """;Usr=""" + Пользователь + """;Pwd=""" + Пароль + """";
Иначе
СтрокаПодключения = "File=""" + ПутьКБазе + """;Usr=""" + Пользователь + """;Pwd=""" + Пароль + """";
КонецЕсли;
cntr = Новый COMObject("v82.COMConnector");
COMCоединение = cntr.Connect(СтрокаПодключения);
КонецПроцедуры
Получение типа "ДокументСсылка.ПриходнаяНакладная" из подключенной базы
Тип = COMCоединение.NewObject("ОписаниеТипов","ДокументСсылка.ПриходнаяНакладная").Типы().Получить(0);
Получение типа "СправочникСсылка.Номенклатура" из подключенной базы
Тип = COMCоединение.NewObject("ОписаниеТипов","СправочникСсылка.Номенклатура").Типы().Получить(0);
Создание объекта "Запрос"
Запрос = COMCоединение.NewObject("Запрос");
Создание объекта "Структура"
Вариант 1.
ПараметрыПоиска = COMCоединение.NewObject("Структура","КлючСвязиСерийныхНомеров",123);
Вариант 2.
ПараметрыПоиска = COMCоединение.NewObject("Структура"); ПараметрыПоиска.Вставить("КлючСвязиСерийныхНомеров",123);
Создание объекта "СписокЗначений"
СЗ = COMCоединение.NewObject("СписокЗначений");
Создание таблицы значений
ИтоговаяТаблица = COMCоединение.NewObject("ТаблицаЗначений");
Добавление колонок таблицы значений
ИтоговаяТаблица.Колонки.Добавить("Номенклатура", COMCоединение.NewObject("ОписаниеТипов","СправочникСсылка.Номенклатура"));
Получение ссылки на документ если известен уникальный идентификатор
Документ1С = COMCоединение.Документы.ПриходнаяНакладная.ПолучитьСсылку(COMCоединение.NewObject("УникальныйИдентификатор", УникальныйИдентификаторДокументаВВидеСтроки));
Проверка что ссылка не пустая и не "битая":
Если Найти(COMCоединение.String(Документ1С),"не найден") = 0 Тогда //документ найден
Проверка реквизита справочника с типом "Перечисление"на соответствие определенному значению
COMCоединение.XMLстрока(Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий) = "ЭкземплярТовара";
Сравнение ссылок объектов (при сравнении ссылочных Com-объектов, как показывает практика, нужно сравнивать их по коду или по ссылке, а не напрямую)
COMCоединение.xmlстрока(НоменклатураСсылка.НаборУпаковок) = COMCоединение.xmlстрока(COMCоединение.Справочники.НаборыУпаковок.ИндивидуальныйДляНоменклатуры) вместо
НоменклатураСсылка.НаборУпаковок = COMCоединение.Справочники.НаборыУпаковок.ИндивидуальныйДляНоменклатуры
Статья навеяна курсами с сайта spec8.ru.
Спасибо.