Некоторая работа с данными через COM
Опубликовал wowik в раздел Программирование - Практика программирования
В статье приведены примеры работы с Платформой 8.X через COM (точнее, через объект COMConnector). Примеры кода были использованы при реализации прикладных задач в процессе трудовой деятельности.
Работать с использованием COM можно между базами работающими на платформе 8.Х одного релиза (подключаться можно только к той платформе, которая имеет тот же релиз, что и текущая, и никак иначе, т.к. при данном виде подключения используются интерфейсы текущей базы). Правда, стоит отметить, можно обойти момент с релизами: например, подключаемся из 8.2.13 к 8.2.14, заменив библиотеку «comcntr.dll» из папки «bin» платформы 8.2.14 на аналогичную из 8.2.13 - но получается не вся функциональность, а «некоторая», с кучей ошибок).
Статей по технологии 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оединение.Справочники.НаборыУпаковок.ИндивидуальныйДляНоменклатуры