Различия
Здесь показаны различия между двумя версиями данной страницы.
Следующая версия Следующая версия справа и слева | |||
common_all:priemyraboty:rabotacherezcom [2016/05/24 11:42] alexander создано |
common_all:priemyraboty:rabotacherezcom [2016/05/24 11:47] alexander |
||
---|---|---|---|
Строка 4: | Строка 4: | ||
[[common_all:priemyraboty:ole|назад]] | [[common_all:priemyraboty:ole|назад]] | ||
---- | ---- | ||
+ | |||
+ | Некоторая работа с данными через 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 подключения к базе: | ||
+ | <code>Процедура ПодключениеКБазе1С(ПутьКБазе, Пользователь, Пароль = "", Сервер, БазаДанных) | ||
+ | СтрокаПодключения = ""; | ||
+ | Если Не ПустаяСтрока(Сервер) Тогда | ||
+ | СтрокаПодключения = "Srvr=""" + Сервер + """;Ref=""" + БазаДанных + """;Usr=""" + Пользователь + """;Pwd=""" + Пароль + """"; | ||
+ | Иначе | ||
+ | СтрокаПодключения = "File=""" + ПутьКБазе + """;Usr=""" + Пользователь + """;Pwd=""" + Пароль + """"; | ||
+ | КонецЕсли; | ||
+ | cntr = Новый COMObject("v82.COMConnector"); | ||
+ | COMCоединение = cntr.Connect(СтрокаПодключения); | ||
+ | КонецПроцедуры</code> | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | Получение типа "ДокументСсылка.ПриходнаяНакладная" из подключенной базы | ||
+ | |||
+ | <code>Тип = COMCоединение.NewObject("ОписаниеТипов","ДокументСсылка.ПриходнаяНакладная").Типы().Получить(0);</code> | ||
+ | |||
+ | |||
+ | Получение типа "СправочникСсылка.Номенклатура" из подключенной базы: | ||
+ | |||
+ | <code>Тип = COMCоединение.NewObject("ОписаниеТипов","СправочникСсылка.Номенклатура").Типы().Получить(0);</code> | ||
+ | |||
+ | Создание объекта "Запрос" | ||
+ | |||
+ | <code>Запрос = COMCоединение.NewObject("Запрос");</code> | ||
+ | |||
+ | Создание объекта "Структура" | ||
+ | |||
+ | Вариант 1. | ||
+ | |||
+ | <code>ПараметрыПоиска = COMCоединение.NewObject("Структура","КлючСвязиСерийныхНомеров",123);</code> | ||
+ | |||
+ | Вариант 2. | ||
+ | |||
+ | <code>ПараметрыПоиска = COMCоединение.NewObject("Структура"); ПараметрыПоиска.Вставить("КлючСвязиСерийныхНомеров",123);</code> | ||
+ | |||
+ | |||
+ | Создание объекта "СписокЗначений" | ||
+ | |||
+ | <code>СЗ = COMCоединение.NewObject("СписокЗначений");</code> | ||
+ | |||
+ | |||
+ | |||
+ | Создание таблицы значений | ||
+ | |||
+ | <code>ИтоговаяТаблица = COMCоединение.NewObject("ТаблицаЗначений");</code> | ||
+ | |||
+ | |||
+ | Добавление колонок таблицы значений | ||
+ | |||
+ | <code>ИтоговаяТаблица.Колонки.Добавить("Номенклатура", COMCоединение.NewObject("ОписаниеТипов","СправочникСсылка.Номенклатура"));</code> | ||
+ | |||
+ | |||
+ | |||
+ | Получение ссылки на документ если известен уникальный идентификатор | ||
+ | |||
+ | <code>Документ1С = COMCоединение.Документы.ПриходнаяНакладная.ПолучитьСсылку(COMCоединение.NewObject("УникальныйИдентификатор", УникальныйИдентификаторДокументаВВидеСтроки));</code> | ||
+ | |||
+ | Проверка что ссылка не пустая и не "битая": | ||
+ | |||
+ | <code>Если Найти(COMCоединение.String(Документ1С),"не найден") = 0 Тогда //документ найден</code> | ||
+ | |||
+ | |||
+ | |||
+ | Проверка реквизита справочника с типом "Перечисление"на соответствие определенному значению | ||
+ | |||
+ | <code>COMCоединение.XMLстрока(Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий) = "ЭкземплярТовара";</code> | ||
+ | |||
+ | |||
+ | |||
+ | Сравнение ссылок объектов (при сравнении ссылочных Com-объектов, как показывает практика, нужно сравнивать их по коду или по ссылке, а не напрямую) | ||
+ | |||
+ | <code>COMCоединение.xmlстрока(НоменклатураСсылка.НаборУпаковок) = COMCоединение.xmlстрока(COMCоединение.Справочники.НаборыУпаковок.ИндивидуальныйДляНоменклатуры) вместо | ||
+ | НоменклатураСсылка.НаборУпаковок = COMCоединение.Справочники.НаборыУпаковок.ИндивидуальныйДляНоменклатуры</code> | ||
+ |