Три кита работы с COM-объектами. Работать через COM-соединение проще, чем вы думаете.

Данная статья будет полезна как начинающим, так и продвинутым  программистам, которые по каким – либо причинам до сего времени не сталкивались с работой COM-соединением.
Дочитав эту статью до конца, уже через 15 минут, вы сможете напрямую  «вытягивать» данные из другой информационной базы.

ps: Хочу заранее оговориться, данная статья не претендует на звание полного и исчерпывающего мануала. Скорее всего — это просто указатель движения в правильном направлении, для быстрого освоения работы с Com-соединением.

Когда вам это пригодится.

 

Приведу всего два реальных примера из своей практики:

1.   При работе в типовой конфигурации «Бухгалтерия предприятия 2.0» необходимо получать данные первичных документов из сторонней самописной конфигурации. На основании полученных данных, автоматически создаются документы поступлений. При этом, пользователь работает исключительно в одной базе данных.

2.   Пользователь работает в переферийном узле распределенной ИБ. Необходимо, в режиме Он-Лайн, синхронизировать справочник контрагентов. На этом примере и разберем правила работы с Com – объектами.


Чем отличаются COM и OLE. Почему все же COM.

 

1.   При запуске приложения 1С:

—   OLE использует  модуль обычного приложения. Запуск занимает весьма продолжительно время.

—   Com использует модуль внешнего соединения, который содержит минимальное количество процедур и функций.

    В результате, запуск Com в типовой «Бухгалтерии предприятия 2.0» занимает в 6 раз меньше времени.

2.   При запуске Com – соединения  не создается отдельного процесса 1cv8. По отзывам пользователей партнерского форума 1С, завершение работы Ole происходит не всегда корректно.   И в этом случае наблюдаются ощутимые проблемы с производительностью рабочей станции.

Не вдаваясь в дальнейшие сравнения, даже на основании двух вышеизложенных моментов, я однозначно выбираю COM.

 

Три кита и Кит первый.

 

Создаем соединение к другой базе

Сервер = «Kappa»;
БазаДанных   = «Acc»;
Пользователь = «Администратор»;
Пароль = «123456»;

V82 = Новый COMобъект(«V82.ComConnector»);

СтрокаПодключения «srvr='» + СокрЛП(Сервер)
+
«‘; ref='» + СокрЛП(БазаДанных)
+
«‘; usr='» + СокрЛП(Пользователь)
+
«‘; pwd='» + СокрЛП(Пароль) + «‘;»;

БазаИсточник = V82.Connect(СтрокаПодключения);

Подключение к базе, работающей в файловом режиме, приведено в комментариях к данной публикации.


Кит второй

 

Все объекты, которые вы получаете через Com (у нас это БазаИсточник) имеют тип Com-объект.

Поэтому, непосредственно, мы можем использовать только реквизиты примитивных типов:

— Булево

— Строка

— Число

— Дата

 

Остальные реквизиты мы можем идентифицировать в текущей базе, через поиск:

—  по коду

—  по наименованию

—  по ИНН

—  а для узлов РИБ, наиболее точно, по внутреннему идентификатору.

 

Все Com – объекты обладают полным набором свойств и характеристик языка программирования 1С.

Пример:

СсылкаНаКонтрагента = БазаИсточник.Справочники.Контрагенты.НайтиПоРеквизиту(«ИНН», ИНН);

Где, СсылкаНаКонтрагента – тип Com-объект.

КонтрагентГоловной = БазаИсточник.Справочники.Контрагенты.СоздатьЭлемент();

Исключение: в отладчике, у Com-объекта, предопределенные реквизиты имеют только англоязычную транскрипцию. Обычные реквизиты – русскую транскрипцию.

Пример:

КонтрагентСОМ = БазаИсточник.Справочники.Контрагенты.НайтиПоРеквизиту(«ИНН», ИНН);

Код = КонтрагентСОМ.Code;
Наименование = КонтрагентСОМ.Description;
НаименованиеПолное = КонтрагентСОМ.НаименованиеПолное;

Все предопределенные реквизиты вы сможете получить и в рускоязычном представлении. Но, в некоторых случаях может не корректно отработать метод:

БазаИсточник.ЗаполнитьЗначениеСвойств(ТекущийКонтрагент, КонтрагентCom);

где, ТекущийКонтрагент — имеет тип обычной переменной, а 

КонтрагентCom — Com-объект.


Кит третий

 

Все конструкторы в базе-источнике создаются через метод NewObject.

Пример 1:

КонтрагентГоловной = БазаИсточник.Справочники.Контрагенты.СоздатьЭлемент();
КонтрагентГоловной.УстановитьСсылкуНового(БазаИсточник.Справочники.Контрагенты.ПолучитьСсылку(БазаИсточник.NewObject(«УникальныйИдентификатор», ТекущийUID)));

Пример 2: 

СтрокаUID = БазаИсточник.XMLСтрока(СсылкаНаКонтрагента);
Запрос = БазаИсточник.NewObject(«Запрос»);
Запрос.УстановитьПараметр(«UID», БазаИсточник.NewObject(«УникальныйИдентификатор», СтрокаUID));
Запрос.Текст = «……..»;

Все глобальные методы в базе-источнике вызываются через Сom – соединение

Пример: UID = БазаИсточник.XMLСтрока(СсылкаНаКонтрагента);

Пример 2:БазаИсточник.ЗначениеЗаполнено(Контрагент)

Пример 3: БазаИсточник.ЗаполнитьЗначениеСвойств(Приемник, Источник);

Пример 4 (получение имени значения перечисления Com-соединения): ИмяПеречисления = БазаИсточник.XMLСтрока(БазаИсточник.Перечисления.СтавкиНДС.НДС10);

 

Теперь, вы знаете три простых правила работы с Com- объектами. Получение данных удаленной базы в режиме Он-Лайн – очень востребованная и одновременно простая задача. Желаю успехов в работе.

 

91 Comments

  1. KapasMordorov
    Исключение: у Com-объекта, предопределенные реквизиты имеют только англоязычную транскрипцию. Обычные реквизиты – русскую транскрипцию.

    Пример:

    КонтрагентСОМ = БазаИсточник.Справочники.Контрагенты.НайтиПоРеквизиту(«ИНН», ИНН);

    Код = КонтрагентСОМ.Code;

    Наименование = КонтрагентСОМ.Description;

    Неужели?

    Код = КонтрагентСОМ.Код;
    Наименование = КонтрагентСОМ.Наименование;

    прекрасно работает.

    А каков замах:

    статья будет полезна как начинающим, так и продвинутым программистам

    .

    Reply
  2. director04

    (1) KapasMordorov, добрый день.

    А каков замах:

    Не знаю, как к вам обратиться по имени ))))

    Поясню «таков замах»: дело в том, что многие, даже и сильно продвинутые кодеры, могут многие годы прекрасно обходиться без механизмов Com-соединений (ну просто не было нужды). Пример — я.

    Это не значит, что данные прогеры, ни на что остальное не годны. Просто — не было случая.

    А вот случай настал, и надо с чего то начать.

    В этом случае не плохо прочитать чей-то опыт. Что бы не изобретать велосипед.

    С огромным уважением отношусь к замечаниям всех участников обсуждения. Уверен, что и мне и другим участникам форума они будут полезны.

    Поделитесь своим опытом, и внесите свой полезный вклад в обсуждение данного вопроса.

    Спасибо за понимание.

    Reply
  3. hohmankia

    Полностью согласен с автором статьи, т.к. сам такой же: 5 работаю с 1С и только совсем недавно столкнулся с необходимостью com-соединения и сходу не знал куда смотреть и как делать.

    Автору спасибо!

    Reply
  4. jamirza

    А мне понравилось — всё чётко и по делу.

    Reply
  5. Angeros

    по-моему комы прошлый век — медленно, топорно. web рулит!!!

    Reply
  6. director04
    по-моему комы прошлый век — медленно, топорно. web рулит!!!

    Все новые типовые решения от 1С (на управляемых формах) для интеграции используют Com-соединения.

    Да и веб-серверы подняты далеко не у всех.

    Reply
  7. CaSH_2004

    (0) Странная статья, мало того что (1) прав, так еще и «поиск по ИНН» — это что за такой типовой реквизит?

    Есть ПоискПоКоду(), ПоискПоНаименованию(), и ПоискПоРеквизиту() — никаких поисков по ИНН не существует, что вы и сами показываете в примере

    После комментария (0) могли бы и поправить статью.

    Вообще те истины которые тут изложены не тянут на публикацию, таких публикации можно клепать каждые пол года т.к. люди то новые появляются, а искать в интернете не умеют. Для людей которые «не в курсе» как работать с ОЛЕ — скачайте книжки «1С Предприятие системное программирование (Михайлов)», «ЕСИС 8.0», и был еще толмут по моему Радченко размером с энцеклопедию:) ее даже читать можно только в электронном т.к. сложно листать. Там расписано все что что нужно.

    А то странные программисты появляются — даже документацию скачать и прочитать не хотят, что же там можно в 1С делать 5 лет и не сталкиваться с ОЛЕ? Я как то видел разработку на 7-ке где разработчики ничего не знали про такой объект как «Документ» и задачи по товаро-движению реализованы через объект «Справочник»! Это просто надо видеть!

    PS: Если уж говорить про «поделитесь опытом» то вот вам интересный момент который я нигде не видел что бы был освещен, а стоило бы: по ОЛЕ не всегда корректно можно получить дробные числа. Иногда вместо 2.24 можно спокойно получить 2.23999999999999, поэтому правильно получать тип реквизита откуда береться число, его точность и округлять до дробного числа, иначе можете потерять копейку.

    Reply
  8. Slon1c

    А еще есть внешние источники данных … использую COM и OLE. Если нужно просто прочитать то COM, для интерактивной работы OLE …

    Reply
  9. Slon1c

    (7)Да тип нужно получать через метаданные …

    Reply
  10. sanches

    (7) Да, сам недавно ломал голову почему так происходит.

    Причем, если получать данные запросом, то от такой проблемы не спасает даже использование функции

    ВЫРАЗИТЬ (Сумма КАК ЧИСЛО(15,2))

    (0)

    КонтрагентГоловной = БазаИсточник.Справочники.Контрагенты.СоздатьЭлемент();
    КонтрагентГоловной.УстановитьСсылкуНового(БазаИсточник.Справочники.Контрагенты.ПолучитьСсылку(БазаИсточник.NewObject(«УникальныйИдентификатор», ТекущийUID)));

    У вас не хватает определения переменной ТекущийUID

    Reply
  11. Danil.Potapov

    статья про COM на картинке OLE

    Reply
  12. yuraos

    Плюс автору за простоту и ясность мысли,

    которой так не хватает в 1С-ных мануалов!

    Как раз то, что нужно для новичков!!!

    Более продвинутым советую пройтись по этой ссылке.

    🙂

    Reply
  13. yuraos

    (12)

    впрочем и для новичков будет полезно, поскольку

    технология COM далеко не исчерпывается

    COM-подключениями к 1C или EXCEL.

    Reply
  14. yuraos

    (5)(6) Angeros,

    а управляемое приложение, как не откроею — все тупит и тормозит.

    Там даже редактор управляемых форм и тот тормозной! 🙂

    Reply
  15. ZERO_

    (0)

    Не вдаваясь в дальнейшие сравнения, даже на основании двух вышеизложенных моментов, я однозначно выбираю COM.

    Ну, я бы не был столь категоричен… Com имеет свои преимущества и свои недостатки (как и Ole)…

    Все зависит от конкретной задачи (хотя из моей личной практики Com применял в десяток раз чаще, чем Ole).

    Еще забыли про важное отличие в виде доступа к интерфейсным возможностям 1СПредприятие…

    Также неплохо было бы акцентировать внимание на передачу параметров (например в виде параметра запроса), что ссылки на объекты текущей базы передавать нельзя! 🙂 А ссылки, полученые из базы-источника, — можно…

    Также, если статья для новичков,(которые не хотят лазить по Нетам) можно было бы дополнить строкой (или даже написать функцию, возвращающую «БазаИсточник») для обоих вариантов (Файл-серверного и клиент-серверного).

    А так, — понравилась структуризация материала… 🙂

    Reply
  16. Angeros

    (14) yuraos, Я не понимаю причем тут управляемые формы? я имею введу веб сервис. Установить апатч дело 2ух минут настроек он не требует. главное чтобы в сети был виден всем участникам обмена.

    Reply
  17. Zero_nv

    Эх… эту бы статью да на пару дней пораньше. Массу времени съэкономил бы. Понадобилось перенести доки через com, пришлось в инете по крупицам собирать

    Reply
  18. director04
    Также неплохо было бы акцентировать внимание на передачу параметров (например в виде параметра запроса), что ссылки на объекты текущей базы передавать нельзя! 🙂 А ссылки, полученые из базы-источника, — можно…

    Также, если статья для новичков,(которые не хотят лазить по Нетам) можно было бы дополнить строкой (или даже написать функцию, возвращающую «БазаИсточник») для обоих вариантов (Файл-серверного и клиент-серверного).

    А так, — понравилась структуризация материала… 🙂

    Спасибо, очень ценное замечание. Да, действительно упустил это из вида.

    Спешу исправить. Пример универсальной процедуры ниже.

    Функция ВыполнитьПодключение(Файловый)
    
    Отказ = Ложь;
    
    Если НЕ ЗначениеЗаполнено(Пользователь) ИЛИ НЕ ЗначениеЗаполнено(Пароль) Тогда
    Отказ = Истина;
    ИначеЕсли Файловый И НЕ ЗначениеЗаполнено(КаталогИБ) Тогда
    Отказ = Истина;
    ИначеЕсли НЕ ЗначениеЗаполнено(ИмяКластера) ИЛИ НЕ ЗначениеЗаполнено(ИмяБазы) Тогда
    Отказ = Истина;
    КонецЕсли;
    
    Если Отказ Тогда
    Предупреждение(«Настройте параметры соединения.», 10, «Соединение невозможно.»);
    Возврат Отказ;
    КонецЕсли;
    
    СтрокаСоединения = «»;
    
    V81 = Новый COMОбъект(«V81.ComConnector»);
    
    Если Файловый Тогда
    СтрокаСоединения = «File=»»» + СокрЛП(КаталогИБ) + «»»»;
    Иначе
    СтрокаСоединения = «Srvr=» + СокрЛП(ИмяКластера) + «;Ref=» + СокрЛП(ИмяБазы);
    КонецЕсли;
    
    Если НЕ ПустаяСтрока(Пользователь) Тогда
    СтрокаСоединения = СтрокаСоединения + «;Usr=» + СокрЛП(Пользователь);
    КонецЕсли;
    
    Если НЕ ПустаяСтрока(Пароль) Тогда
    СтрокаСоединения = СтрокаСоединения + «;Pwd=» + СокрЛП(Пароль);
    КонецЕсли;
    
    Попытка
    БазаИсточник = V81.Connect(СтрокаСоединения);
    Исключение
    Сообщить(«Не удалось подключиться с заданными настройками!» + ОписаниеОшибки(), СтатусСообщения.Важное);
    Отказ = Истина;
    КонецПопытки;
    
    Возврат Отказ;
    
    КонецФункции
    
    

    Показать

    Пояснение БазаИсточник — переменная модуля, или переменная обработки, доступная из всех процедур и функций.

    Reply
  19. DoctorRoza

    Норм статья .. может пригодиться!

    Reply
  20. Sasha255n

    Все прекрасно работает спасибо остался очень доволен.

    Reply
  21. VasiL0587

    Отличная статья, коротко и по делу. Автору респект!

    Reply
  22. AlexO

    (3) hohmankia,

    тоже только ПФ лепили? 🙂

    Reply
  23. AlexO

    (0)

    2. При запуске Com – соединения не создается отдельного процесса 1cv8.

    а что, по-вашему, в таком случае создается? Облако тегов?

    Reply
  24. AlexO

    (22) VasiL`,

    да?

    ну попробуйте на реальном деле что-то сделать.

    Reply
  25. director04
    да?

    ну попробуйте на реальном деле что-то сделать.

    Алекс, от ваших постов так веет безысходностью и неудачей ))))) Дерзайте, и все получится!

    Еще раз — удачи. 🙂

    Reply
  26. TMV

    (27)

    Алекс, от ваших постов так веет безысходностью и неудачей ))))) Дерзайте, и все получится!

    Еще раз — удачи. 🙂

    Не слишком ли бодрое пожелание для «продвинутого прогера»?)

    Reply
  27. yuraos
    Не слишком ли бодрое пожелание для «продвинутого прогера»?)

    (28) TMV,

    продвинутость достигается через преодаление гем-мороев платформы…

    великая продвинутость обрачена великой печалью

    🙂

    Reply
  28. yuraos

    (24)

    а что, по-вашему, в таком случае создается? Облако тегов?

    AlexO,

    что создается, это конечно вопрос интересный и архиважный с познавательной точки зрения.

    Но это, как говаривали вожди-классики, есть суровая объективная реальность.,

    «данная нам в ощущениях, копируемая и фотографируемая» (смотри ниже):

    При COM-соединении просесс 1cv8 остается один, но при этом сжирает больше памяти мегабайт на 25.

    При OLE-соединении появляется еще один процесс 1cv8, который к стати отжирает чуть меньше — 22 мегабайта.

    При желании любой это может проверить.

    Нужный план обмена можно взять здесь.

    Reply
  29. yuraos

    (18)(30)

    … Пример универсальной процедуры ниже.

    PS:

    Если использовать план обмена «Обмен данными COM»

    то код для создания соединения можно несколько упростить,

    поскольку все необходимые параметры и алгоритм подключения

    хранятся в узле плана обмена:

    КоннекторCOM = Неопределено;
    ОбъектCOM = Неопределено;
    ЕррорИнфор = «»;
    НужныйУзел = ПланыОбмена.ОбменДаннымиCOM.НайтиПоКоду(«КодНужногоУзла»);
    НужныйУзел.СоздатьОбъект().Connect(КоннекторCOM,ОбъектCOM,,ЕррорИнфор);
    Если ЗначениеЗаполнено(ЕррорИнфор) Тогда
    ВызватьИсключение(ЕррорИнфор);
    КонецЕсли;
    // далее используем полученное COM-соединение через переменную ОбъектCOM
    

    Показать

    Reply
  30. hohmankia

    (23) AlexO, очень смешно)) Петросян прям отдыхает… Поддержу автора: «От ваших постов так веет безысходностью и неудачей ))))) Дерзайте, и все получится!»

    Reply
  31. Abadonna

    (1), (7) Мужики, ну при чем тут автор? Меня больше удивляет (беспокоит) количество плюсов.

    Странно, что никто еще не написал расхожую фразу «Оказывается, всё гениальное — просто».

    Reply
  32. AlexO

    (27)

    я по COM перекрестные синхронизации делаю, а вы мне про «дерзайте»! 🙂

    посмеялся.

    Reply
  33. AlexO

    (30) yuraos,

    При COM-соединении просесс 1cv8 остается один

    да неужели?

    и какой такой процесс «остается», когда организуешь соединение по COM к базе?

    Разобрались бы сначала с автором, что и когда подключается.

    И когда наиболее оптимально производить подключение к другой базе.

    PS. если только и умеете «включать в другую базу» пользователя во время работы — то ужас-ужас вам и вашим пользователям.

    Reply
  34. AlexO

    (32) hohmankia,

    сочинить свое не хватает? 🙂

    Reply
  35. AlexO

    (31) yuraos,

    а можно вообще все в одну строку и максимум вложенностей в параметрах команд…

    1С — она именно для такого раздолбайства и создана 😉

    Reply
  36. AlexO

    (33) Abadonna,

    Странно, что никто еще не написал расхожую фразу «Оказывается, всё гениальное — просто».

    да пусть студенты америки открывают…

    хоть так самолюбие потешат :))

    Reply
  37. AlexO

    (7) CaSH_2004,

    и был еще толмут по моему Радченко размером с энцеклопедию:)

    «толмут» не Радченко, а группы авторов, среди которых Радченко разве что вступления к главам писал 🙂

    Reply
  38. AlexO

    (7) CaSH_2004,

    что же там можно в 1С делать 5 лет и не сталкиваться с ОЛЕ?

    что-что — печатные формы и постоянно тусоваться среди студентов со своими «достижениями».

    Так и 10 лет ни с чем не столкнутся… 🙂

    Reply
  39. AlexO

    (15) ZERO_,

    А так, — понравилась структуризация материала…

    кино дрянь, но спецэффекты красивые..

    Reply
  40. AlexO

    (11) naus,

    да ладно, тут народ вообще разницы не понимает — COM, OLE, ADO..

    буковки какие-то…

    Reply
  41. AlexO

    (6)

    Все новые типовые решения от 1С (на управляемых формах) для интеграции используют Com-соединения.

    для какой такой интеграции, и что за типовые от 1С в данном конкретном случае?

    Reply
  42. karakozov

    Полезная статья, хоть и вызвала столько дополнений и даже критики. К сожалению все время сталкиваешься с проблемами при создании чего нить через COM соединение.Причем все сложности обычно это само COM соединение.Данный обзор обновляет уже имеющуюся информацию, а самое интересное что до каких то вещей пришлось додуматься самому, и теперь было интересно почитать об этом в данной статье. Плюс автору.

    Reply
  43. director04

    AlexO, да угомонись ты, блин со своим словесным поносом…. Слушать уже надоело. Судя по такой богатой коллекции твоих публикаций , так ты вообще ничего путного за жизнь не написал

    Если интереса нет — иди мимо….

    Люди на ИС голосуют кто плюсом, кто рублем. Но не словесным поносом ведь….

    Иди мимо родненький…. иди уже….. 🙂

    Reply
  44. director04

    (44) karakozov,

    Полезная статья, хоть и вызвала столько дополнений и даже критики. К сожалению все время сталкиваешься с проблемами при создании чего нить через COM соединение.Причем все сложности обычно это само COM соединение.Данный обзор обновляет уже имеющуюся информацию, а самое интересное что до каких то вещей пришлось додуматься самому, и теперь было интересно почитать об этом в данной статье. Плюс автору.

    Я рад, что данная публикация очень многим понравилось и показалась востребованной.

    Именно на эту аудиторию и на эту реакцию я и рассчитывал.

    Что касается критиков….

    Их я всегда делю на:

    • Конструктивных. Эти люди обсуждают тему, изучают, дают ценные советы и предлагают решения.
    • Болтунов. Эти просто ктитикуют не предлагая ничего. Им и предложить скорее всего нечего. Наверное это просто люди с заниженной самооценкой. Пользы от них — ноль.

    Лично мне гораздо интереснее и полезней показалось обсуждение yuraos (30). Спасибо ему, что не пожалел времени на тестирование. Позитив налицо. А AlexO, простите — простая балаболка. 🙂

    Reply
  45. director04

    AlexO, иди мальчик…. Не мешай, родной, взрослым дядям серьезные вещи обсуждать… 🙂

    Reply
  46. hohmankia

    (36) AlexO, я ж говорю Петросян! )) Расслабься! Тебе поговорить не с кем что-ли?! Ну так в другом месте ищи свободные уши.

    Reply
  47. tomvlad

    (42) AlexO, судя по вашим словам Вы знаете все на свете гораздо лучше остальных.

    Предлагаю Вам описать предмет, изложенный в этой статье с Вашей точки зрения, а потом уже остальные оценят Ваш уровень.

    Иначе начинает складываться впечатление о студенте, страдающем комплексом неполноценности (уж извините, но в профиле никакой информации о Вас я не вижу, да и список публикаций не впечатляет).

    Reply
  48. AlexO

    (50) tomvlad,

    судя по вашим словам Вы знаете все на свете гораздо лучше остальных.

    т.е. вы уже не знаете многого?!

    судя по вашим словам.

    Reply
  49. tomvlad

    (52) AlexO, ОК, то есть Вы не в состоянии написать статью, описывающую методику работы с COM?

    Reply
  50. tomvlad

    (56) AlexO, охотно верю, что Вы знаете предмет гораздо лучше чем сам Сергей Нуралиев.

    Но…

    Что мы знаем про вас. Никаких серъезных разработок за душой не числится. Рейтинг LIFE в 3.43 раза (!!!! болтун?) превышает рейтинг за публикации. Никакой дополнительной информации в профиле нет.

    Только брызги слюны и вопли обиженного.

    Конечно, я могу ошибаться. Ну так поправьте. Напишите хоть что-нибудь кроме невоздержанных комментариев.

    Reply
  51. AlexO
    При запуске Com – соединения не создается отдельного процесса 1cv8. В результате, происходит ощутимая экономия ресурса рабочей станции.

    автор даже не в курсе, как работает COM, и что такое «OLE Automation». И откуда экономия в одном случае, и больше возможностей — в другом.

    Видимо, tomvlad тоже не в курсе, раз так рьяно поддерживает такой уровень понимания.

    Reply
  52. tomvlad

    (58) AlexO, вот честно говоря меня в настоящий момент совсем не интересует COM, т.к. много другой работы.

    Но автора я знаю, и знаю, насколько это уважаемый человек. А вот о вас кроме болтовни на форуме мы не знаем ничего.

    Судя по всему, у Вас масса свободного времени.

    Еще раз предлагаю — вместо пустопорожней болтовни взять и написать статью, в которой подробно изложить методику работы с COM. Если судить по вашим комментариям, это должно занять у вас не более нескольких минут.

    Результат — общая польза, вместо взаимных оскорблений.

    Reply
  53. Yashazz

    Может, я чего-то глобально не понимаю, но такое количество плюсов за обрывки цитат из штатной документации и общедоступных учебников — это не вполне нормально. Это вообще не статья. Заметки на полях от силы.

    Жаль я в своё время отказался баянить, глядишь, кой-что новое людЯм открыл бы…

    Автор, а расскажешь о том, как через com определить тип значения переменной, или получить объект типа «Тип»? Или как произвольный код выполнить? Или про тонкую настройку com+, и чем оно от dcom отличается, или как мирить разные минорные релизы?

    Reply
  54. Slon1c

    Вопрос к автору : Как вы синхронизировали перечисления ?

    Reply
  55. Slon1c

    (62)да здесь же на инфостарте ответы и лежат 🙂

    Reply
  56. sanches

    AlexO еще тот тролль 🙂

    Reply
  57. director04

    (63) Slon1c,

    Вопрос к автору : Как вы синхронизировали перечисления ?

    Перечисления — та же суть, что и строки. Определите имя перечисления, и по его значению, выберите необходимое перечисление в текущей БД.

    Reply
  58. Slon1c

    (66)Вопрос как раз в определении имени … Просто мне пришлось перебором его получать, есть ли более короткий способ ? Вот фрагмент кода :

    Для каждого лкстрока из Свойства.ПорядокВключенияСтоимостиВСоставРасходовНУ.Metadata().EnumValues Цикл

    Если лкстрока.Synonym = соединение.string(Свойства.ПорядокВключенияСтоимостиВСоставРасходовНУ) Тогда

    НоваяСтрока.ПорядокВключенияСтоимостиВСоставРасходовНУ =

    Перечисления.ПорядокВключенияСтоимостиОСВСоставРасходовНУ[лкстрока.Name];

    КонецЕсли;

    КонецЦикла;

    Reply
  59. Perfekt

    а можно поподробнее про com-соединение

    Reply
  60. director04

    (67) Slon1c, да, там есть один секрет. 🙂

    ИмяПеречисления = БазаИсточник.XMLСтрока(БазаИсточник.Перечисления.СтавкиНДС.НДС10)

    PS: Имя перечисления вернет например «НДС 10»

    Reply
  61. director04

    (68) Вячеслав_163, а что конкретно вас интересует?

    Reply
  62. CaSH_2004

    В принципе данную статью можно считать за тест на знание (и умение их искать) местной аудитории.

    Жаль что администрация не ввела более расширенный способ голосования за статью. Думаю для профессионального сайта уже стоило-бы ввести несколько рейтингов по публикациям что-то типа:

    — оценка за оформление от -5 до +5

    — оценка за новизну от -5 до +5

    — оценка за содержание (полезность/актуальность) от -5 до +5

    В общем цель чтобы публикация оценивалась по разным критериям и показывала полезность, а то иногда просто удивляет что все меряется количеством плюсов. Это как-то однобоко. Ведь как получается: прочитало 100 человек, из них 40 плюсануло, т.к. тема новая для них, а остальные 60 не стали минусовать, т.к. вроде автор хороший человек, а минус ассоциируется с отрицательным отношением к статье в целом (и переносится не осознано на автора) и соответственно неприятно ставить его. В итоге статья вроде как по рейтингу отличная, а толку для меня никакого.

    (0) Вот скажи автор тебя бы обидело если бы я поставил «минус»? А если бы без объяснения? А если поставят его 60 из 100 людей без объяснения причин? Ведь реально для людей кто занимается 1С профессионально тут прописные истины которые иногда в день по несколько штук приходится решать. Но для начинающих может это действительно откровение.

    К сожалению рейтинг составляют разные люди. Было бы удобно видеть какое-то различие (не читая имен) проголосовали разработчики, или просто товарищи которые скачивают. Статус то пользователям тут никак не меняют, на других ресурсах прямо под ником пишут статус/рейтинг, и понятно кто есть кто, а так приходится лазить в профиль пользователя.

    Наверно где то такое обсуждалось уже с администрацией сайта, киньте ссылку если кто знает — буду благодарен.

    Reply
  63. Slon1c

    (69)о, xml «рулит», еще сюда сериализацию и схемы добавить и все ок 🙂

    Reply
  64. CaSH_2004
    Reply
  65. director04

    (74) CaSH_2004, уважаемый.

    Если бы я ставил свою статью в ранг совершенного и законченного проекта (ну типа как продукты Apple), я бы просто отключил возможность комментариев.

    Считаете возможным дополнить сведения — дополните. Я буду вам признателен.

    Считаете это не нужным вам — не дополняйте. Пройдите мимо.

    Еще раз говорю: есть люди, которые почерпнули для себя что-то важное.

    Есть люди, которые узнали из вашего предыдущего поста, что -то дополнительно для себя.

    Если бы не было этой статьи, то не было бы и вашего поста.

    Кто-то шел бы до своих открытий чуточку дольше.

    Не заморачивайтесь лишнего. Те кто придет после вас — найдет и у вас кучу недочетов и недостатков.

    Если руководствоваться вашими постулатами, то наверное человечество не написало бы ни одной книги.

    Вы согласны?

    Разговор далее, по этому поводу, считаю неконструктивным.

    Лучше потрачу время на помощь тем, кто этого желает. Допустим 67 и 68.

    Вы не против?

    Reply
  66. CaSH_2004

    (75)Да пожалуйста, однако странное игнорирование вопросов и собственных ошибок. Я собственно выразил свое мнение и если вы считаете что писать то чего нет — нормально, а то что есть не стоит, то значит такая публикация заслуживает минус. Жаль что вместо желания изменить статью вы предпочитаете общение в комментариях, а по существу ничего не меняете: вроде и против ничего не имеете, но и менять не хотите.

    Reply
  67. Abadonna

    (0)

    Исключение: у Com-объекта, предопределенные реквизиты имеют только англоязычную транскрипцию. Обычные реквизиты – русскую транскрипцию.

    Пример:

    КонтрагентСОМ = БазаИсточник.Справочники.Контрагенты.НайтиПоРеквизиту(«ИНН», ИНН);

    Код = КонтрагентСОМ.Code;

    Наименование = КонтрагентСОМ.Description;

    НаименованиеПолное = КонтрагентСОМ.НаименованиеПолное;

    Не вводи в заблуждение неокрепшие умы.

    Соединение=ОбщСМ.ComConnect(КаталогИБ,Имя,Пароль);
    Спр=Соединение.Справочники.ДолжностиОрганизаций.СоздатьЭлемент();
    Спр.Наименование=»Тест»;
    Спр.Записать();
    

    Работает, только шуба заворачивается

    Равно как и

    Выборка=Соединение.Справочники.Номенклатура.Выбрать();
    Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Наименование);
    КонецЦикла;
    
    Reply
  68. director04

    (76) CaSH_2004,

    Да пожалуйста, однако странное игнорирование вопросов и собственных ошибок.

    Ни кто их и не игнорирует. Ваши посты — это очень удачное дополнение в поиск истины. Если они конструктивны (а ваши посты именно конструктивны), то читатель от этого только выигрывает.

    Изменять публикацию каждые пять минут — дело очень не продуктивное, так как бесплатные публикации подлежат обязательной модерации. Поэтому, все исправления и дополнения будут однажды добавлены. Но все враз.

    Я собственно выразил свое мнение и если вы считаете что писать то чего нет — нормально, а то что есть не стоит, то значит такая публикация заслуживает минус.

    я искренне рад вашему минусу. Поясню:

    • После того как вы поставили эту точку в ваших претензиях, надеюсь, что остальные ваши посты будут только по существу вопроса
    • Так как вы поставили оценку, значит вы не остались равнодушны к данной публикации. А для меня это уже есть весьма высокая оценка. Еще раз — Спасибо.
    Reply
  69. yuraos

    (37) AlexO,

    а у вас увожаемый смотру всего одна статейка и

    рейтинг за трёп превышает реальный рейтинг в 4 раза

    и это не смотря на то , что многие ваши комментарии «минусят» на этой ветке.

    Значить — еще больше народу ставить вам «минусы» просто лень

    или у них нет времени врубаться что к чему.

    😉

    Reply
  70. Raminus

    нормальная статейка, полезно.

    Reply
  71. director04

    (80) Raminus, Спасибо всем, кто оценил.

    Редкая публикация обходится одними благодарностями. Я к этому уже привык. 🙂

    Пишите, делитесь опытом. Реальная польза будет всем

    Reply
  72. Yashazz

    Да, и ещё: упомяните хотя б, что с файловыми базами тоже так работать можно, а то у вас лишь клиент-серверное подключение описано.

    Reply
  73. director04

    (82) Yashazz,

    Да, и ещё: упомяните хотя б, что с файловыми базами тоже так работать можно, а то у вас лишь клиент-серверное подключение описано.

    Спасибо, уже учел. В примере подключения к БД указал, что пример подключения к файловой БД приводится в комментариях (см. несколько выше).

    Хотел задать встречный вопрос: ранее вы спрашивали»

    Автор, а расскажешь о том, как через com определить тип значения переменной, или получить объект типа «Тип»? Или как произвольный код выполнить? Или про тонкую настройку com+, и чем оно от dcom отличается, или как мирить разные минорные релизы?

    Вопрос: удалось ли вам решить проблему определения типа значения переменной?

    Лично мне приходит на ум только лишь обращение к метаданным объекта, а через них определения типа.

    Может быть есть более изящное решение?

    Reply
  74. CaSH_2004

    (78)Вот буквально на днях тоже встал вопрос как вытянуть запросом в 8-ку из 7-ки данные по регистрам с указанием даты.

    Помучался сам часок, для интереса чтобы проверить угадаю ли как это сделать, но понял что не выходит и решил обратится к интернету, запросил Яндекс: «1С как сделать запрос через ОЛЕ», в 4-й строке получил нужный ответ. На поиск и прочтение потратил 2 минуты.

    Вот делюсь ссылками:

    Взаимодействие через OLE ч.1

    Взаимодействие через OLE ч.2

    Это я к вашему:

    Иногда некоторые моменты меня ставили в тупик. Приходилось перерыть масссу интернет-ресурсов, что бы докопаться до истины.

    Странно, но если есть решение то я его всегда нахожу в интернете и достаточно быстро, чего и всем советую, а заодно показываю КАК ЭТО ДЕЛАТЬ. Это пример статей за каторые я бы даже приплатил бы автору (если бы не пришлось на это тратить пол дня на его поиск и способ перевода). Т.е. статья имеет кучу информации полезной, в вашей же статье самое ценное — комментарии. Потому что описывать 3 приема, из которых 1-е — как подключиться, а 2-е вообще частично неверное, и вам еще в лом его исправить:

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

    это очень плохой пример который вы показываете другим. Странно но только на Инфстарте народ пишет по несколько строчек в качестве статьи. И чем дальше тем короче становяться статьи. Стараниями таких авторов-минималистов скоро статьи будут выглядеть например так:

    Проблема такая-то, решение я нашел в книге такой-то или на сайте таком то

    Естественно при таких статьях приходится перерыть их кучу чтобы собрать что-то внятное. Вы сами это испытали на себе (с ваших же слов) и сами же создали такую же пустую публикацию.

    Как я уже говорил, если вам влом опичывать все подробно, понадергали бы ссылок из разных мест, выложили бы их, и вывели бы из них свои 3 ВЕЛИКИХ КИТА. И думаю придирок было бы минимум.

    Reply
  75. director04

    (84),

    Вот делюсь ссылками:

    Взаимодействие через OLE ч.1

    Взаимодействие через OLE ч.2

    Если я правильно понял, при быстром просмотре, то в этих статьях речь идет исключительно про OLE.

    На данном форуме, мы рассматриваем исключительно Com.

    Если я сделал не верный вывод — поправьте меня, и прямо здесь выложите код, отвечающий на мой (и ваш) вопрос.

    По поводу качества статьи, извините уважаемый, уже достали.

    Лично одно ваше мнение, для массы пользователей — не авторитет.

    Хотите убедиться — посмотрите на оценку статьи (на сегодня 78 баллов).

    Вполне возможно, что вы будете способны написать свой шедевр, и набрать баллов 700.

    Желаю удачи. А лазить здесь, и вместо конструктива плеваться и поносить, вам это надо?

    Есть желание исправить ситуацию — хватит брызгать слюной. Просто добавьте информации в комментариях и изложите ваше видение вопроса.

    Reply
  76. CaSH_2004

    (85)

    идет исключительно про OLE

    конечно, это как пример, причем для 7-ки а не 8-ки, и что тут такого? Статья от этого не хуже. Пользы на порядка 3 больше чем от этой статьи. Если люди плючуют за вас, пусть почитают побольше чем просто про 3-х ПОКАЛЕЧЕННЫХ КИТОВ 🙂

    Есть желание исправить ситуацию — хватит брызгать слюной. Просто добавьте информации в комментариях и изложите ваше видение вопроса.

    Я так и сделал, как смог. Не нужно так нервничать, если вы решили написать статью вам придеться выслушать как положительные так и отрицательные отзывы, и не один раз. Я же не просто пишу из-за сугубо своего мнения ни на чем не основанного, а привожу примеры. Не нравиться — не пишите плохие статьи, снимайте статью, обращайтесь к модератору или просто игнорируйте. Не нравиться вам мои комменты, понравиться другим, это ваши же слова!

    Не вижу ничего плохого в том что я выложил ссылки.

    Лично одно ваше мнение, для массы пользователей — не авторитет.

    Да вроде как не один если есть глаза и мозг, просто мне одному больше нужно наверно 🙂

    Кстати Галилео Гагилей насколько помниться тоже почти в одиночку утверждал что Земля крутиться, а все вокруг решили что он ненормальный. Это сравнение к тому что если баранов много то это значит что они априоре умнее пастуха! Никого не хочу обидеть, но ссылаться на количество плюсов — глупое утверждение. Плюсуют те для кого информация новая, остальные идут мимо, и таких на 2 порядка больше, если вы умеете думать то гяньте: просмотров 1745, а плюсов 80! Конечно там идет накрутка на каждое обновление страницы, но суть вы должны уловить. Просматривают те кто пишет комменты, а их еденицы, а не сотни, так что вывод что остальные также считают публикацию не стоящей внимание и плюса, просто не считают нужным минусовать, а почему я уже ранее писал.

    Reply
  77. director04

    (86) CaSH_2004,

    если вы умеете думать то гяньте: просмотров 1751, а плюсов 80!

    А разве это слабый процент? ))) Считайте КПД = 1745/80 = 21.8875 (кол. просмотров к количеству кликов)

    Посмотрите на свою топовую публикацию : http://infostart.ru/public/86911/

    КПД = 1847/113 = 16,345

    а в этой и того хуже : http://infostart.ru/public/137694/ Всего 28,57

    Ну и что, намного лучше? )))))

    Кстати Галилео Гагилей насколько помниться тоже почти в одиночку утверждал что Земля крутиться

    Желаю удачи Галилео…. Только чаще в свой глаз заглядывайте. Вдруг там бревно, а вы соломинки в чужих глазах рассматриваете )))

    Может хватит пиписьками меряться?

    Reply
  78. CaSH_2004

    (87)Да никто не меряется, я просто высказываю мнение, и полагаю что корректно. Имею право. Найдите у меня в публикациях недостатки, изложите как я внятно свои пожелания, я проанализирую и либо исправлю их либо обоснованно отвечу.

    http://infostart.ru/public/137694/ — это кстати экспромт, я так в комментах и сказал, что это по сути черновой вариант т.к. время не было. Так же как наверно и у вас. Согласен что других легче критиковать, но критика полезна, так что я вам помагаю, не обижусь на вашу помощь.

    Возможно после такой статьи как ваша и сам свою допилю — т.к. мне она тоже не нравиться.

    Кстати откуда такая интересная формула успеха 1745/80? А где переменная кол-во комментариев? Вроде как они вияют на просмотры.

    И мои публикации не планировались на плюсы, а на решение конкретной проблемы, я ее решил — нареканий нет, какие были все доработал. И если начинаете делить (да не делимы будете) то сначала замерьте время. Есть понятие как актуальный материал и как устаревший. Мой все уже скачали и поплюсовали кому нужно, смотрят наверно за обновлениями. Ваш пока на стадии актуальности. Когда все поплюсуют (месяца через 2-3) увидите как быстро ваш коэффициент пойдет вниз. Я даже не преполагаю что закончаться неграмотные кто станет плюсовать, у меня пока иногда плюсуют за ГОСиД.

    Reply
  79. director04

    (88) CaSH_2004, я вас понял. Предлагаю уже замять эти тему и работать дальше. Дела насущные есть у нас у всех.

    Ок?

    ps: Время рассудит все статьи этого форума.

    Reply
  80. Yuriko
    Reply
  81. director04

    Спасибо, именно такого конструктива и жду… )))))

    Лучше один конструктивный отзыв, чем сто никчемных комментария. Спасибо ….

    Reply
  82. Жолтокнижниг

    Есть предложение к автору, если он не хочет думать и сам выдавать конструктив, можно перепостить интересные моменты из ЖК, новичкам это понравиться, да и бывалым прогерам тоже, не все же читают книжки и умеют искать в интернетах. И будет радость, и куча плюсов.

    Reply
  83. Bukaska
    2. При запуске Com – соединения не создается отдельного процесса 1cv8. По отзывам пользователей партнерского форума 1С, завершение работы Ole происходит не всегда корректно. И в этом случае наблюдаются ощутимые проблемы с производительностью рабочей станции.

    да ладно…

    V82 = Новый COMобъект(«V82.ComConnector»);

    Вот если бы здесь не ComConnector, а ComApplication — то второй процесс бы был, во всяком случае мне говорил один из франей, что должен быть второй процесс, но если использовать именно ComConnector, то второго процесса не будет.

    Хотя опять же напрашивается вопрос, а когда каким из COM-соединений лучше пользоваться?

    Reply
  84. director04
    Есть предложение к автору, если он не хочет думать и сам выдавать конструктив, можно перепостить интересные моменты из ЖК, новичкам это понравиться, да и бывалым прогерам тоже, не все же читают книжки и умеют искать в интернетах. И будет радость, и куча плюсов.

    Спасибо за пожелание. ))) В принципе, благодарностей и так хватает (посмотрите на количество плюсов). А зануд и критиканов всегда было достаточно. Посвистели и сдулись…. Теперь читают только те, кому нужна суть, а не языком потрясти…. )))

    За предложение все одно — спасибо!

    Reply
  85. sitec-it

    По делу добавлю — нельзя сравнивать два СОМ-объекта, даже если это ссылки на один и тот же объект в базе, они всегда будут неравны. Приходится сравнивать по коду, наименованию или идентификатору.

    Reply
  86. AlexO

    (93) Bukaska,

    Вот если бы здесь не ComConnector, а ComApplication — то второй процесс бы был

    Товарищ — автор статьи, — вообще не понимает, где COM, а что такое — OLE. Но усиленно огрызается в комментариях. Видимо, считает, что это уравновешивает его незнание.

    Reply
  87. st4rk

    (121) AlexO,

    Проще назвать вещи своими именами.

    Механизм OLE он же Automation сервер:

    V82 = Новый COMObject(«V82c.Application»);

    в тонком клиенте,

    V82 = Новый COMОбъект(«V82.Application»);

    в толстом клиенте.

    Механизм внешнего соединения:

    V8 = Новый COMОбъект(«V82.COMConnector»);

    .

    (с) Радченко ТалмудПоПлатформе.Т2 ).

    Отличия в функциональности там же понятно расписаны.

    Reply
  88. AlexO

    (122) st4rk,

    Механизм OLE он же Automation сервер:

    Механизм внешнего соединения:

    А что, OLE — оно не внешнее подключение? Внутреннее? Радченко, может, и знает разницу между OLE и COM, но не говорит. А вы, соответственно, не знаете, и в книжках Радченко про это не прочитаете.

    И талмуд — Радченко далеко не главный автор. Это если про талмуд, а не про 8.2-брошюры.

    Reply
  89. Matrix1C

    (1) Давно это было… но всё же, конкретно в прошлом году не мог получить от базы реквизит Наименование, а Description работало.

    на счёт «продвинутых» — если брать анкеты сотрудников то там все продвинутые пользователи ПК, так что это слово давно не обозначает вершин имеющихся знаний.

    Так что Автору спасибо, простая понятная статья.

    Reply
  90. strange2007

    (1) На первых платформах 8.2 русские аналоги англонаименований периодически приводили к краху обмена данными. И это было на столько хаотично, что отловить баги не могли долго. Так что когда наберётесь опыта, не будете так смело критиковать))))))

    И да, помните — «дурак учится только на своих ошибках» (с).

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *