Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
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>​
 +----
 +