Различия
Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия | ||
common_all:priemyraboty:rabotacherezcom [2016/05/24 11:42] alexander создано |
common_all:priemyraboty:rabotacherezcom [2016/05/24 11:53] alexander |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
{{ :common_pics:1c_128.png?nolink&128|}} | {{ :common_pics:1c_128.png?nolink&128|}} | ||
- | ====== COM, OLE... ====== | + | ====== Некоторая работа с данными через COM ====== |
[[common_all:priemyraboty:ole|назад]] | [[common_all:priemyraboty:ole|назад]] | ||
---- | ---- | ||
+ | |||
+ | |||
+ | Опубликовал [[http://infostart.ru/profile/46144/|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оединение.Справочники.НаборыУпаковок.ИндивидуальныйДляНоменклатуры)</code> | ||
+ | |||
+ | вместо | ||
+ | |||
+ | <code>НоменклатураСсылка.НаборУпаковок = COMCоединение.Справочники.НаборыУпаковок.ИндивидуальныйДляНоменклатуры</code> | ||
+ | ---- | ||
+ |