Ошибка при вызове конструктора comобъект не удается найти указанный файл

Я
   Vstur

05.02.14 — 11:04

Существуют обработки, организующие выводж в XLS-файлы.

На компьютерах OpenOffice 3.3

Беру новый OpenOffice 4.0.1.

Удаляю OO 3.3, ставлю ОО 4.0.1.

Запускаю в 1с обработку

Падается в строке:

    Попытка

        ServiceManager = Новый COMОбъект(«com.sun.star.ServiceManager»);

    Исключение

        Предупреждение(ОписаниеОшибки() + Символы.ПС + «программа OpenOffice не установлена на данном компьютере!»);

        Возврат;

    КонецПопытки;

с ошибкой:

«Ошибка при вызове конструктора COM-объекта. Не удается найти указанный файл.»

Удаляю ОО 4.0.1, возвращаю ОО 3.3, все опять работает.

Кто-нибудь сталкивался ? Укрощали ОО 4.xx ?

   Dmitry1c

1 — 05.02.14 — 11:09

>Не удается найти указанный файл

в реестре к COM-объекту указан путь, по которому нужной dll-ки нету

   Dmitry1c

2 — 05.02.14 — 11:11

> C:Program Files (x86)LibreOffice 4programsoffice.exe —nodefault —nologo

у меня по такому вот адресу

   Vstur

3 — 05.02.14 — 12:07

Странно, что при установке ОО 4.xx не прописывается, получается, что при установке 3.3 прописывалось, а сейчас нет…

   Vstur

4 — 05.02.14 — 12:39

Переустановил 4.x, поправил реестр в

-HKEY_LOCAL_MACHINE

-HKEY_CLASSES_ROOT

-HKEY_CURRENT_USER

процесс пошел…

   Torquader

5 — 05.02.14 — 14:01

Не знаю, 4.0.0 ставил после 3.Х (правда на Windows XP) всё работало из коробки (только нужно ответить «Да» на удаление третьей версии — иначе он на неё ссылки оставит).

   Vstur

6 — 05.02.14 — 16:49

Хоть и выводит в файлы, нормально так и не работает…

В статичных данных случайным образом выдает ошибки при выводе в xls в абс. примитивных конструкциях вида:

Sheet.getCellByPosition(2,НомерСтроки).setString(…чего-то там…);

ругаясь на setString.

То же самое на ОО 3.3 работает без всяких проблем.

Пришлось на 3.3 откатиться…

   Vstur

7 — 05.02.14 — 16:54

В общем, после ОО 3.3, похоже, мигрировать дальше некуда…

   EvgeniuXP

8 — 05.02.14 — 20:06

(7) как говорится, работает — не трожь!

   Torquader

9 — 05.02.14 — 21:20

(7) В четвёрке какие-то режимы поменяли, причём, если ячейки объединены, то попытка получить пропущенную ячейку честно возвращает Null.

  

Vstur

10 — 06.02.14 — 11:38

Не, у меня там примитив, никаких объединений и т.п.

Просто заметил, в свое время пытался с ОО 3.3 на 3.4 перейти, получил такие же ошибки на рабочих обработках.

Думал, может с 4.хх проблем не будет.

Видимо знак, не слезать с 3.3

TurboConf — расширение возможностей Конфигуратора 1С

ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.

Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.

Содержание:

1. Почему может возникнуть ошибка при вызове конструктора (COM-объект 1С)?

2. С помощью чего можно исправить ошибку при вызове конструктора (COM-объект 1С)?

3. Параметры при вызове конструктора (COM-объект 1С), которые регистрируют компоненты строки кода перед регистрируемым dll-файлом    

1.      Почему может возникнуть ошибка при вызове конструктора (COM-объект 1С)?

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

Сегодня мы разберем одну из ошибок, которые появляются при работе с базой, а именно ошибку при вызове конструктора (COM-объект 1С).

Ситуацию такую, мы можем наблюдать при загрузке с Excel при использовании (COM-объекта 1С), при обмене между базами. Ситуаций, когда возникает данное сообщение с возникшей проблемой довольно много при работе с программой.

Как правило, данная ошибка возникает из-за того, что при установке платформы1С не произошла автоматическая регистрация 64-х разрядной компоненты, которая отвечает за использование COM-соединения 1С 8.3. А почему это произошло, спросите? Все очень просто и в то же время сложно, если не знаешь, в чем все ядро проблемы. А причина в том, что те, у кого выдаются такие ошибки, используют 32(86) – разрядную операционную систему и ставят вместо платформы необходимой разрядности их системы, платформу 1С предназначенную для совсем другой системы.   

2. С помощью чего можно исправить ошибку при вызове конструктора (COM-объект 1С)?

Исправить данную ошибку, довольно легко. Для этого необходимо всего лишь зарегистрировать библиотеку dll в реестре при помощи командной строки или программы PowerShell, в зависимости от того, что любите использовать, и команды regsvr32.

Для того чтобы выполнить команду, достаточно будет в строке написать такой текст команды «regsvr32 «C:Program Files1cv88.3.ХХ.ХХХХbincomcntr.dll»». Вместо «ХХ.ХХХХ» необходимо указать необходимый релиз платформы, библиотеку которой, необходимо зарегистрировать в реестре системы.

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

Администратор: Командная строка   

3. Параметры при вызове конструктора (COM-объект 1С), которые регистрируют компоненты строки кода перед регистрируемым dll-файлом

Также есть некоторые особенности команды, которая регистрирует компоненты.

На данный момент я знаю только 4 параметра (которые при написании строки кода указываются перед регистрируемым dll-файлом):

·        /u — параметр, отменяет регистрацию

·        /i — параметр, который позволяет при необходимости, в зависимости от библиотеки.

·        /n —параметр используется только для установки компоненты 1С, в основном пишется вместе с предыдущим (/I);

·        /s – возможность отключить все сообщения при регистрации;

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

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

Таких программ достаточно много и писать, какое-то одно название смысла нет.

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

Специалист компании «Кодерлайн»

Олег Мороз

Ошибка при вызове конструктора (COMObject) по причине: Интерфейс не поддерживается

Ошибка происходит при попытке загрузить из Excel в 1С, когда код обработчика выполняется не на клиенте, а на сервере и в большинстве случаев текст ошибки говорит об отсутствии прав у пользователя сервера 1С.

Быстрый переход

  • Особенности
  • Устранение:
    • Может оказаться, что  «Microsoft Excel Application» отсутствует в списке, в данном случае
  • Заключение

Особенности

Кодом со стороны 1С без изменения места исполнения не устраняется, использование других функций подключения Com также не дает положительных результатов.

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

Устранение:

  • на сервере убиваем excel (taskkill /im excel.exe /f)
  • открываем оснастку «Службы компонентов» (Пуск->Администрирование->Службы компонентов)
  • в ней раскрываем ветку Службы компонентов->Компьютеры->Мой компьютер->Настройка DCOM
  • справа в списке находим Microsoft Excel Application, открываем Свойства, вкладка Удостоверение, выбираем пользователя с администраторскими правами, ОК.

Может оказаться, что  «Microsoft Excel Application» отсутствует в списке, в данном случае

  1. Запускаем REGEDIT
  2. Открываем ветку ComputerHKEY_CLASSES_ROOTAppIDEXCEL.EXE, если ее нет, то создаем
  3. Создаем в ней строковый параметр AppID  = {00020812-0000-0000-C000-000000000046}
  4. Выполняем команду «mmc comexp.msc /32», которая делает то же что и DCOMCONFIG, но позволяет видеть  32 битные компоненты.
  5. После этого в Component Services должен появиться «Microsoft Excel Application»

Чтобы решить эту проблему, я включил пользователя USRV82, под которым запускается сервер приложений 1С Предприятия 8.3, в группу Distributed COM Users, но ошибка сразу не ушла, потребовалась перезагрузка.

Для правки использовалась оснастка Локальные пользователи и группы (lusrmgr.msc) — это инструмент, предназначенный для управления локальными пользователями и группами.

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

Осложняло проблему то, что ошибка плавала: периодически выходила, либо в момент создания объекта, либо уже в момент вызова методов excel-application.

Так что нельзя однозначно сказать, что же решило проблему.

Заключение

В большинстве случаев уйти от дополнительной настройки операционной системы возможно,  если использовать вызова Com-Объекта на клиенте. При правильной установке объектов они работают даже при различных по битности 1с и Excel, OS.

В моем же случае клиентские компьютеры работали на Ubuntu, поэтому вся обработка перенесена на сервер.

Бывает такое: вы прописываете для компонента пользователя и пароль.

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

Впервые в истории планеты Земля все люди во всех странах задались единой целью: заработать столько денег, чтобы уподобиться героям рекламы.

  1. 13.11.2018, 09:23

    #31

    Akbar11 вне форума


    Пришел за помощью


    По умолчанию Re: Ошибка при вызове конструктора (COMObject)

    Цитата Сообщение от avm3110
    Посмотреть сообщение

    А сколько есть попыток угадать какую именно библиотеку ставил «2 раза»? Где ставил (на клиенте или на сервере)? под какими правами (пользователя или админа)?

    Да и по синтаксису… У тебя в диагностике:

    Что явно указывает на ошибку — «лишняя запятая». Параметр «Excel.Application» должен быть

    первым :mad:
    правильно:
    ExcelApplication = Новый COMObject(«Excel.Application»);

    Теперь ошибка немного другая

    {ВнешняяОбработка.Загрузка ВITIL.Форма.Форма.Форма(123)}: Ошибка при вызове конструктора (COMObject)
    ExcelApplication = Новый COMObject(«Excel.Application»);
    по причине:
    -2147024891(0x80070005): Отказано в доступе.


  2. 13.11.2018, 12:13

    #32

    avm3110 вне форума


    Гордость форума PRO


    По умолчанию Re: Ошибка при вызове конструктора (COMObject)

    Цитата Сообщение от Akbar11
    Посмотреть сообщение

    Регистрировал библиотеку на клиенте, под администратором. Той платформы которую запускаю

    Продолжаю занудно. Какую библиотеку регистрируете? Какой командой? У вас база файловая или клиент-сервер?
    Опишите поподробнее — как именно регистрируете «под администратором».


  3. 14.11.2018, 06:04

    #33

    Akbar11 вне форума


    Пришел за помощью


    По умолчанию Re: Ошибка при вызове конструктора (COMObject)

    Цитата Сообщение от avm3110
    Посмотреть сообщение

    Продолжаю занудно. Какую библиотеку регистрируете? Какой командой? У вас база файловая или клиент-сервер?
    Опишите поподробнее — как именно регистрируете «под администратором».

    Регистрация библиотеки командой regsvr32 «C:Program Files1cv88.3.10.2466bincomcntr.dll»
    Клиент — сервер
    Процес, нажимаю вин + Q, пишу командная строка строка, контекстное меню запустить от имени админа, запускаю, Логин + пароль и регистрирую библиотеку


  4. 14.11.2018, 07:05

    #34

    avm3110 вне форума


    Гордость форума PRO


    По умолчанию Re: Ошибка при вызове конструктора (COMObject)

    Цитата Сообщение от Akbar11
    Посмотреть сообщение

    Регистрация библиотеки командой regsvr32 «C:Program Files1cv88.3.10.2466bincomcntr.dll»
    Клиент — сервер
    Процес, нажимаю вин + Q, пишу командная строка строка, контекстное меню запустить от имени админа, запускаю, Логин + пароль и регистрирую библиотеку

    Мдя-я-я… все как в анекдоте…
    «Пьяный ходит вокруг фонаря ночью и о чем-то материться. Прохожий хочет помочь и участливо спрашивает в чем дело.
    Да я ключи потерял и уже полчаса не могу найти — следует ответ.
    прохожий оглядывает место под фонарем и удивляется. Да тут же ровный асфальт, сухо и отлично видно что ключей тут нет. Ты уверен что именно тут потерял?
    Да нет.. потерял я в грязной луже, вон там в подворотне. Но там же очень темно искать и очень грязно и очень мокро — поэтому я ищу именно тут».

    Уважаемый… У Вас диагностика «не зарегистрирован класс Excel.Application». Ну и что же вы хотите добиться «упорством достойного лучшего применения» регистрируя библиотеку 1с предприятия???? :mad:


  5. Пользователь сказал cпасибо:


  6. 14.11.2018, 07:10

    #35

    avm3110 вне форума


    Гордость форума PRO


    По умолчанию Re: Ошибка при вызове конструктора (COMObject)

    Цитата Сообщение от Akbar11
    Посмотреть сообщение

    Теперь ошибка немного другая
    {ВнешняяОбработка.Загрузка ВITIL.Форма.Форма.Форма(123)}: Ошибка при вызове конструктора (COMObject)
    ExcelApplication = Новый COMObject(«Excel.Application»);
    по причине:
    -2147024891(0x80070005): Отказано в доступе.

    А эта ошибка показывает, что пользователю под которым выполняется строка
    ExcelApplication = Новый COMObject(«Excel.Application»);
    нет прав на создание ком-объекта.

    У вас база клиент-серверная или файловая? Для файловой запустите 1с с правами администратора и попробуйте выполнить внешнюю обработку под админом с полными правами и правами администрирования.


  7. 14.11.2018, 08:14

    #36

    Akbar11 вне форума


    Пришел за помощью


    По умолчанию Re: Ошибка при вызове конструктора (COMObject)

    Цитата Сообщение от avm3110
    Посмотреть сообщение

    А эта ошибка показывает, что пользователю под которым выполняется строка
    ExcelApplication = Новый COMObject(«Excel.Application»);
    нет прав на создание ком-объекта.

    У вас база клиент-серверная или файловая? Для файловой запустите 1с с правами администратора и попробуйте выполнить внешнюю обработку под админом с полными правами и правами администрирования.

    В файловой все работает, даже не под админимон


  8. 14.11.2018, 13:33

    #37

    avm3110 вне форума


    Гордость форума PRO


    По умолчанию Re: Ошибка при вызове конструктора (COMObject)

    Цитата Сообщение от Akbar11
    Посмотреть сообщение

    В файловой все работает, даже не под админимон

    Поднимите файловую на сервере и там попробуйте.

    Если интерактивно в файловой будет работать, а в запущенном клиенте на сервере в клиент-сервере — нет. нужно смотреть права пользователя под которым работает 1С предприятие. А есть еще ряд настоек которые нужно будет проверять.

    Пришлите вначале результаты этого тестирования


  9. 27.11.2018, 03:06

    #38

    Akbar11 вне форума


    Пришел за помощью


    По умолчанию Re: Ошибка при вызове конструктора (COMObject)

    Цитата Сообщение от avm3110
    Посмотреть сообщение

    Поднимите файловую на сервере и там попробуйте.

    Если интерактивно в файловой будет работать, а в запущенном клиенте на сервере в клиент-сервере — нет. нужно смотреть права пользователя под которым работает 1С предприятие. А есть еще ряд настоек которые нужно будет проверять.

    Пришлите вначале результаты этого тестирования

    Здравствуйте. В файловой на сервере все работает

    Последний раз редактировалось Akbar11; 27.11.2018 в 03:23.


  10. 27.11.2018, 03:26

    #39

    Akbar11 вне форума


    Пришел за помощью


    По умолчанию Re: Ошибка при вызове конструктора (COMObject)

    На сервере ошибка

    {ВнешняяОбработка.Загрузка ВITIL.Форма.Форма.Форма(123)}: Ошибка при вызове конструктора (COMObject)
    ExcelApplication = Новый COMObject(«Excel.Application»);
    по причине:
    -2147467262(0x80004002): Интерфейс не поддерживается


  11. 27.11.2018, 07:59

    #40

    avm3110 вне форума


    Гордость форума PRO


    По умолчанию Re: Ошибка при вызове конструктора (COMObject)

    Цитата Сообщение от Akbar11
    Посмотреть сообщение

    В файловой на сервере все работает
    На сервере ошибка

    ну е-е-е-е… еще раз.. выше уже писал… Если на одном и том же компе одна и та же база поднята в файловом режиме, а затем в клиент-серверном (когда и сервер и клиент это один и тот же ком). И при этом на файловом «все работает», а на клиент-сервере подобная ошибка — следовательно проблема в правах под которым работает база.

    При файл серверном — это права пользователя под которым идет запуск базы, а на клиент сервере это права пользователя под которым крутиться сервер 1С предприятия.

    Решение — смотреть и фиксить эти права. Например как описано тут: — http://buh.ruboard.ru/public/196323/


Похожие темы

  1. Ответов: 1

    Последнее сообщение: 08.06.2017, 00:12

  2. Ответов: 9

    Последнее сообщение: 16.04.2014, 12:50

  3. Ответов: 0

    Последнее сообщение: 27.02.2014, 22:04

  4. Ответов: 2

    Последнее сообщение: 12.08.2013, 13:34

  5. Ответов: 1

    Последнее сообщение: 27.06.2013, 19:33

Социальные закладки

Социальные закладки


Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
  • BB коды Вкл.
  • Смайлы Вкл.
  • [IMG] код Вкл.
  • [VIDEO] код Вкл.
  • HTML код Выкл.

Правила форума

В этой статье речь пойдет об ошибках в COM-соединениях. Один из вариантов ошибки –
это «Ошибка при вызове конструктора (COMObject):
-2147221164(0x80040154): Класс не зарегистрирован…»
. Бывают и другие варианты
сообщений, все я перечислять не буду, в большинстве случаев — это означает, что
при установке платформы компонента comcntr.dll не смогла зарегистрироваться
автоматически.
COM — соединения используются в обменах между конфигурациями.

У меня в готовых решениях есть обработка
загрузки сотрудников из ЗУП, в которой тоже используется
COM — соединение и у
пользователей тоже может появиться ошибка. В случае с моей обработкой, при
проверке соединения, может появиться сообщение, что невозможно установить
соединение с конфигурацией ЗУП.  Это
может произойти, если Вы неправильно указали настройки подключения, неправильно
настроены права пользователя, через которого Вы подключаетесь или чаще всего – проблема
в компоненте comcntr.dll, которая при смене платформы автоматически не
зарегистрировалась. Вот и рассмотрим, как ее зарегистрировать вручную.

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

В командной строке Windows набираете cmd, в
писке выбора появится программа с таким названием, устанавливаете курсор на эту
программу и выбираете из контекстного меню «Запуск под администратором» (см.
картинку ниже).

Запуск командной строки от имени администратора

Затем ввести команду (можно двумя способами):

1.     
regsvr32
«C:Program Files (x86)1cv8[
версия платформы]bincomcntr.dll»

2.     
C:Program
Files (x86)1cv8[
версия платформы]bin>regsvr32 comcntr.dll

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

командная строка

Для смены каталога нужно написать cd, после которого установить пробел, а
затем указать тот путь, который нам нужен, например
C:Program Files (x86)1cv8[версия платформы]bin, затем после указания пути к каталогу нажимаете Enter. Смотрите пример смены каталога на
картинке ниже.

смена каталога в cmd

Вот теперь
рядом с каталогом можно ввести
regsvr32 comcntr.dll, нажать Enter и
зарегистрировать компоненту (смотрите пример на картинке ниже).

запуск regsvr3

Если все
сделали правильно, то получите сообщение (см. картинку ниже).

успешное выполнение регистрации компоненты comcntr.dll

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

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

   alexxey

21.02.05 — 11:57

Проблема сдедующая: написал на Visual Studio Com объект…при компиляции получилась dll и на том компе, где я компилирую проект — все ОК в реестре эта dll регистрируется и я могу из 1С с ним работать, но если я хочу зарегистрировать эту dll (COM объект) на другом компе с помощью regsvr32.exe, то выдается такое сообщение:
C:srcclass.dll was loaded,but the DllRegisterServer entry point not found…и т.д.
подскажите в чем может быть проблема и как ее решить

   Davinchi

1 — 21.02.05 — 12:16

Проблема в привязке ДЛЛ к машине , т.е. к реестру, т.к. там прописывается информация о внешних компонентах в разделе AddIn, возможно на другой машине этого раздела нет, а в ДЛЛ при регистрации реакция на этот случай не предусмотренна. У меня была подобная проблема, дело было в выше описанной причине…

   alexxey

2 — 21.02.05 — 12:18

А как с этим бороться-то?

   Davinchi

3 — 21.02.05 — 12:27

Так а какая у тя точно ошибка, и что вообще говорит 1С когда происходит загрузка внешней компонеты??? А то могу тя в заблуждение ввести, а пока на первый взгляд в ДЛЛ недостаточно необходимых интерфейсов… и что вообще делает ДЛЛ, содержит набор методов???

   alexxey

4 — 21.02.05 — 12:34

Dll содержит одну единственную функцию, которая возвращает мне авторизованный SoapClient в Dll реализован всего один интерфейс AddInLib.IInitDone
Ошибку regsvr32 пишет такую которую я описал выше
1С при попытке создания COM объекта говорит, что недопустимая строка с указанием класса

   Gloom

5 — 21.02.05 — 12:43

Небось .Net сборку мучаешь?

   alexxey

6 — 21.02.05 — 12:46

(5) да, а что?

   Gloom

7 — 21.02.05 — 12:50

(6)
To register or unregister a .NET class with COM, you must run a command-line tool called the Assembly Registration Tool (Regasm.exe). Regasm.exe adds information about the class to the system registry so COM clients can use the .NET class transparently.

   Davinchi

8 — 21.02.05 — 12:51

Во-во, все правильно, я над тем же бился… оказывается лечится все просто, тока нигде это не описано… Дело в том, что нельзя менять имя класса AddIn на что-либо другое, ето типа зарезервированный класс, по которому 1С обшается со внешними СОМ объектами, а у тебя он AddInLib, естественно 1С не знает такого класса, попробуй в ДЛЛ убрать Lib…

   Gloom

9 — 21.02.05 — 12:52

(8)Как говорится:
«Слышал звон, да не знаю, где он»

   evGenius

10 — 21.02.05 — 13:03

Точно в реестре все прописал, там наверное путь до сервера неверно указан?

   alexxey

11 — 21.02.05 — 13:11

(9) в реестре прописалась dll — все ОК, но при попытке в 1С создать com объект выдается ошибка:
{Форма.Форма(120)}: Ошибка при вызове конструктора (COMОбъект): Не удается найти указанный файл.
чего я сделал не так?

   alexxey

12 — 21.02.05 — 13:23

Я запустил regasm с ключом /regfile у меня создался файл Class.reg запустив его добавил данные в реестр, но выдается такая ошибка

   evGenius

13 — 21.02.05 — 13:35

А содержимое Class.reg проверил?

   alexxey

14 — 21.02.05 — 13:40

(to Gloom) В очередной раз говорю тебе огромное спасибо…разобрался с этой утилитой — теперь все работает

   alexxey

15 — 21.02.05 — 17:16

(to Gloom) Уважаемый Gloom, в продолжение темы возник такой вопрос:
а могу ли я зарегистрировать .net сброку на компе без .net framework?

   Gloom

16 — 21.02.05 — 17:19

(15)Зарегистрировать, в принципе, можно.
Вот только работать нифига не будет…

   alexxey

17 — 21.02.05 — 17:25

(16) :-) это я уже заметил, что в реестре ветка появляется, но 1С говорит, что класс не зарегистрирован.
Т.е. на компе пользователя, где я захочу использовать этот COM объект обязательно нужно .net framework ставить? так чтоли получается? только вопрос — а зачем он пользователю нужен?

   Gloom

18 — 21.02.05 — 17:29

   alexxey

19 — 21.02.05 — 17:35

(18) ok…обязательно почитаю это
я сейчас вот эту статью читаю
http://starcat.nm.ru/vbnet/book/gl15.html#1<br>похоже, что нельзя на компе без framework зарегистрировать сборку .net так ведь?

   Gloom

20 — 21.02.05 — 17:46

(19).Net сборки могут выполняться только в среде выполнения .Net — CLR(Common Language Runtime).
В частности, если ты заглянешь в раздел InprocServer32 для своего COM-сервера(значение по умолчанию), то увидишь там не путь к самой dll(как обычно), а именно к .NET Runtime Execution Engine — mscoree.dll…

  

alexxey

21 — 21.02.05 — 17:49

(20) да…так и есть..
понятно, спасибо

Автор Golickoff, 03 июн 2015, 02:49

0 Пользователей и 1 гость просматривают эту тему.

Всем привет.

Есть самописная компонента для 1с, сделанная по технологии COM. С её подключением возникают проблемы и методы их решения, описанные на всевозможных сайтах, не помогают. Ошибки меняются с каждой новой попыткой устранить проблему. Приводить код взаимодействия с компонентой целиком нет смысла, т.к. ошибка возникает на второй строке:

ПодключитьВнешнююКомпоненту("COM.dll");
Компонента = Новый COMОбъект("COM.FID");

Ошибка следующая:

Цитировать{Документ.СтиркаПриём.Форма.ФормаДокумента.Форма(6)}: Ошибка при вызове конструктора (COMОбъект)
   Компонента = Новый COMОбъект(«COM.FID»);
по причине:
-2147024894(0x80070002): Не удается найти указанный файл.

В интернете пишут, что это может быть вызвано некорректно прописанным путём к библиотеке в реестре, но путь указан верно. Компонента точно рабочая, т.к. уже проверялась ранее. Кто-нибудь может помочь с её подключением? И ещё, есть ли описание подключения подобных объектов в каких-либо курсах по 1С? Информация в ИТС кажется довольно неполной.
Версия 1С: 8.3, ОС: Windows 8.1

Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению … рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.


Компонента лежит в папке bin каталога 1С, поэтому я не прописываю путь к ней.

Добавлено: 03 июн 2015, 05:37


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

Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению … рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.


В общем, если кто-то однажды попадёт в эту ветку через поисковик в поисках ответов, есть следующая проверенная инфа:
1) Если компонента отказывается работать через 1С, но вы на 100% уверены что она рабочая, запускайте её через jscript. Достоинства данного способа заключаются в том, что компоненту не нужно вызывать через 1С и можно сэкономить нервы. К недостаткам можно отнести необходимость умения работать с jscript.
2) Если первый способ не подходит, ставьте на нужную машину свою среду разработки компоненты (в моём случае это Visual Studio) и компилируйте компоненту непосредственно на этом компьютере. При компиляции она регистрируется автоматически и работать в 1С будет железобетонно. Если мне всё же удастся понять, как протекает процесс регистрации при компиляции библиотеки и нормально зарегистрировать её без установки компилятора, я отпишусь здесь позже… Или не отпишусь, если забуду. В любом случае, я постараюсь помочь, если кто-то напишет мне ЛС.

Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению … рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.


V0vchik

12 / 12 / 13

Регистрация: 06.03.2011

Сообщений: 166

1

1C 8.x

30.05.2015, 08:41. Показов 4782. Ответов 16

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

COM библиотека. Зарегистрировал с помощью regasm, все прошло успешно, в регистре она тоже есть, но когда пытаюсь использовать в 1с пишет:
{Обработка.РаботаСМетками.Форма.Форма.Форма(3)}: Ошибка при вызове конструктора (COMОбъект)
МойОбъект = Новый COMОбъект(«COMRFID.RFID»);
по причине:
-2147024894(0x80070002): Не удается найти указанный файл.

Почему так? Что я делаю не так?

1C
1
2
3
4
5
6
7
Процедура ЧтениеМеток(Команда)
    МойОбъект = Новый COMОбъект("COMRFID.RFID");
    МойОбъект.StartReading();
    Объект.Метки = МойОбъект.GetAllTags();
    МойОбъект.StopReading();
    МойОбъект.DisconnectFromReader();  
    КонецПроцедуры



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

30.05.2015, 08:41

Ответы с готовыми решениями:

Ошибка об отсутствии MSVCP140D.dll, ucrtbased.dll, CONCRT140D.dll, VCRUNTIME140D.dll
Добрый день, товарищи. Возникла проблема. Делаю программу с использованием openCV 3.1 на Visual…

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll — 32-х и 64-битными версиями?
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете…

Затупил, скажите где взять libmysqld.dll, libmysqld50.dll, libmysqld51.dll
Вечер добрый, ставлю ZEOS на Delphi 7, и для нормальной работы нужны файлы libmysqld.dll,…

Сборка Qt: отучение Qt от mingw10.dll, libgcc_s_dw2-1.dll и других Qt***.dll
В связи с тем, что часто возникают одни и те же вопросы, а в нете копаться никто не любит привожу…

16

Модератор

Эксперт 1С

3724 / 2918 / 575

Регистрация: 10.03.2011

Сообщений: 11,491

Записей в блоге: 1

01.06.2015, 14:20

2

Цитата
Сообщение от V0vchik
Посмотреть сообщение

COMRFID.RFID

Что это?

Обычно COM реализовывается в dll



0



12 / 12 / 13

Регистрация: 06.03.2011

Сообщений: 166

02.06.2015, 10:03

 [ТС]

3

Dethmontt, COMRFID это сама библиотека, а RFID это класс. Сама библиотека зарегистрирована через regasm и в регистре я ее вижу, но вызвать функционал не могу.

Добавлено через 3 часа 27 минут
Как вообще должна быть написана библиотека чтоб можно было ее вызывать из 1с? Guid присвоил, ProgID тоже, COM Visible включил, подписал strong name, не работает и все



0



Dethmontt

Модератор

Эксперт 1С

3724 / 2918 / 575

Регистрация: 10.03.2011

Сообщений: 11,491

Записей в блоге: 1

03.06.2015, 00:22

4

Для C#
<namespace>.<Class>

Добавлено через 23 минуты

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
namespace Hello1C_
{
 
    [Guid("66F9DF27-2924-48BA-A4EC-F5F4E40484BB")]
    internal interface IMyClass
    {
        [DispId(1)]
        //описываем методы которые можно будет вызывать из вне
        string GetString_();
    }
 
   [Guid("3187FC44-C0AC-4D11-89AB-C3D09B70AB47"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IMyEvents //для событий
    {
    }
 
    [Guid("27E78B9F-AAFE-48DD-8BB7-4D402E5F3BEE"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(IMyEvents))]
        public class MyClass : IMyClass 
 
    {
        public string GetString_()
        {       
            return "Hello world ВК";
        }
    } 
 
}
1C
1
My_VK = New COMObject("Hello1C_.MyClass")



0



V0vchik

12 / 12 / 13

Регистрация: 06.03.2011

Сообщений: 166

03.06.2015, 06:58

 [ТС]

5

Dethmontt, не работает. Добавил изображения. Код почти тотже что и у вас:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
namespace Hello
{
 
    [Guid("66F9DF27-2924-48BA-A4EC-F5F4E40484BB")]
    internal interface IMyClass
    {
        [DispId(1)]
        //описываем методы которые можно будет вызывать из вне
        string GetString();
    }
 
    [Guid("3187FC44-C0AC-4D11-89AB-C3D09B70AB47"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IMyEvents //для событий
    {
    }
 
    [Guid("27E78B9F-AAFE-48DD-8BB7-4D402E5F3BEE"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(IMyEvents))]
    public class MyClass : IMyClass
    {
        public string GetString()
        {
            return "Hello world ВК";
        }
    }
 
}

Миниатюры

C# DLL d 1c
 

C# DLL d 1c
 

C# DLL d 1c

C# DLL d 1c



0



12 / 12 / 13

Регистрация: 06.03.2011

Сообщений: 166

03.06.2015, 08:07

 [ТС]

6

Dethmontt, все с com разобрался, но счас другая проблема. На моем ноутбуке в 1с работает нормально, а на других компьютерах не вызывается. Пишет что класс не зарегистрирован. Хотя если я из JavaScript с помощью cscript все работает и в регистре она есть. В чем может быть дело?



0



Модератор

Эксперт 1С

3724 / 2918 / 575

Регистрация: 10.03.2011

Сообщений: 11,491

Записей в блоге: 1

03.06.2015, 09:40

7

Зачем /tlb и /codebase при регистрации?



0



12 / 12 / 13

Регистрация: 06.03.2011

Сообщений: 166

03.06.2015, 09:49

 [ТС]

8

Dethmontt, тоже гдето это видел. codebase для регистрации в gac а tlb без понятия. Как правильно это делать? И после второй компиляции на моем ноутбуке тоже перестает работать, а если создать новый проект с абсолютно темже кодом то все работает. Как это все вообще работает никак не могу понять?



0



Модератор

Эксперт 1С

3724 / 2918 / 575

Регистрация: 10.03.2011

Сообщений: 11,491

Записей в блоге: 1

03.06.2015, 09:56

9

Ну это особенности RegAsma

Добавлено через 29 секунд
Тут более подробно что и зачем нужно

https://msdn.microsoft.com/ru-… .110).aspx



0



12 / 12 / 13

Регистрация: 06.03.2011

Сообщений: 166

03.06.2015, 14:22

 [ТС]

10

Dethmontt, всеравно както непонятно почему эти dll не работают в 1с на других компьютерах. На другом компьютере зарегистрировал и через JS я могу вызывать эту библиотеку, но через 1с нет. В чем может быть дело? Может в 1с еще что-то нужно подкидывать чтоб она их подхватывала? Или куда-то именно в 1с



0



Модератор

Эксперт 1С

3724 / 2918 / 575

Регистрация: 10.03.2011

Сообщений: 11,491

Записей в блоге: 1

03.06.2015, 14:25

11

Синт. помощник 1С

COMОбъект (COMObject)
По имени приложения
Синтаксис:

Новый COMОбъект(<Имя>, <ИмяСервера>)
Параметры:

<Имя> (обязательный)

Тип: Строка.
ProgID класса COM, с которым он зарегистрирован в системе. Например, «Excel.Application».
<ИмяСервера> (необязательный)

Тип: Строка.
Имя компьютера, на котором надо создать указанный объект. Если параметр опущен, то создается на данном компьютере.
Описание:

Создает COM-объект внешнего приложения.
Пример:

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

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



0



12 / 12 / 13

Регистрация: 06.03.2011

Сообщений: 166

04.06.2015, 06:35

 [ТС]

12

Dethmontt, все таже проблема. JS на другом компьютере вызывает эту библиотеку и без проблем ее использует а 1с говорит мне что она не зарегистрирована. ProgId использую тотже



0



V0vchik

12 / 12 / 13

Регистрация: 06.03.2011

Сообщений: 166

04.06.2015, 07:57

 [ТС]

13

Dethmontt,

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Sdk;
 
namespace AnotherBro
{
    [Guid("BF3FB918-C643-4678-9BD9-25C7846CE328")]
    public interface ILetsDoDis
    {
        void StartReading();
        void StopReading();
        void DisconnectFromReader();
        string GetAllTags();
        void MessageTags();
    }
 
    [Guid("E436E98A-A448-4618-BB47-9A27369E2DB0"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IMyEvents
    {
    }
 
    [Guid("745C75C6-C78F-4A93-BFCE-3872339A8F36"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(IMyEvents))]
    public class LetsDoDis : ILetsDoDis
    {
        public string readerName;
        public ImpinjReader reader;
 
        //Reader special fields
        public List<string> tags;
        public static List<int> counters;
        public System.Timers.Timer timer;
        public bool readFired;
 
        //Writer special fields
        public Random random;
        public bool writeFired;
        public const ushort EPC_OP_ID = 123;
        public const ushort PC_BITS_OP_ID = 321;
 
        public LetsDoDis()
        {
            reader = new ImpinjReader();
            readerName = "speedwayr-10-E5-09";
        }
 
        public void MessageTags()
        {
            MessageBox.Show("" + GetAllTags());
        }
 
        public void StartReading()
        {
            readFired = false;
            reader.Connect(readerName);
 
            timer = new System.Timers.Timer(1000);
            timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
 
            tags = new List<string>();
            counters = new List<int>();
 
            //Configure reader
            reader.TagsReported += OnTagsReportedReading;
            reader.ApplyDefaultSettings();
 
            reader.Start();
            timer.Start();
 
            while (!readFired)
            { }
        }
 
        public void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            readFired = true;
            for (int i = 0; i < counters.Count; i++)
            {
                counters[i]++;
            }
        }
 
        public void StopReading()
        {
            reader.Stop();
            timer.Stop();
        }
 
        public void DisconnectFromReader()
        {
            reader.Disconnect();
        }
 
        public void OnTagsReportedReading(ImpinjReader sender, TagReport report)
        {
            foreach (Tag tag in report)
            {
                if (!tags.Contains(tag.Epc.ToHexString()))
                {
                    tags.Add(tag.Epc.ToHexString());
                    counters.Add(0);
                }
                else
                {
                    counters[tags.IndexOf(tag.Epc.ToHexString())] = 0;
                }
            }
        }
 
        public string GetAllTags()
        {
            if (tags.Count < 1)
                return null;
 
            string result = "";
 
            for (int i = 0; i < tags.Count; i++)
            {
                result += tags[i] + ";";
            }
 
            return result;
        }
    }
}

Если вкратце то вызываем StartReading() -> MessageTags() -> StopReading() -> DisconnectFromReader()
MessageTags() выводит окно WinForms (MessageBox) где отображает результаты сканирования.

1C
1
2
3
4
5
6
7
Процедура ПриНачалеРаботыСистемы()
RFID = Новый COMОбъект("AnotherBro.LetsDoDis");
RFID.StartReading();
Сообщить(RFID.GetAllTags());
RFID.StopReading();
RFID.DisconnectFromReader();
КонецПроцедуры
Javascript
1
2
3
4
5
var obj = new ActiveXObject("AnotherBro.LetsDoDis");
obj.StartReading();
obj.MessageTags();
obj.StopReading();
obj.DisconnectFromReader();

В JS работает а в 1с нет. Добавил пару скриншотов работы. Вообще не понимаю что не так.

Миниатюры

C# DLL d 1c
 

C# DLL d 1c
 



0



Dethmontt

Модератор

Эксперт 1С

3724 / 2918 / 575

Регистрация: 10.03.2011

Сообщений: 11,491

Записей в блоге: 1

05.06.2015, 13:36

14

Лучший ответ Сообщение было отмечено V0vchik как решение

Решение

V0vchik, база файловая?

Добавлено через 6 минут
Ну или выполняй на JS =))))

Вот пример:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
ScrptCtrl=Новый COMОбъект("MSScriptControl.ScriptControl");
        ScrptCtrl.Language="jscript";
        ScrptCtrl.AddCode("function Eprst()
        |{
        |  var obj = new ActiveXObject(""AnotherBro.LetsDoDis"");
        |  obj.StartReading();
        |  obj.MessageTags();
        |  obj.StopReading();
        |  obj.DisconnectFromReader();
        |}
        |");
 
     ScrptCtrl.Run("Eprst");



1



12 / 12 / 13

Регистрация: 06.03.2011

Сообщений: 166

06.06.2015, 08:27

 [ТС]

15

Dethmontt, кажется да.
Оу а это интересное решение, спасибо)

Добавлено через 9 минут

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

function Eprst()

Какая интересная функция



0



12 / 12 / 13

Регистрация: 06.03.2011

Сообщений: 166

07.06.2015, 09:24

 [ТС]

16

Dethmontt, мне нужно вызывать RFID.GetAllTags() которые возвращает строку. Тут такой способ может не подойти. Можно ли в 1с из JS скрипта получить это значение?



0



Модератор

Эксперт 1С

3724 / 2918 / 575

Регистрация: 10.03.2011

Сообщений: 11,491

Записей в блоге: 1

07.06.2015, 23:56

17

V0vchik, просто так не получить!
Из скрипта на JS результат выполнения функции можно получить двумя способами
1. Записать результат в файл
2. Использовать в 1С поле HTML документа, на нем исполнять скрипт и результат читать из HTML документа



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

07.06.2015, 23:56

17

Содержание:

1.     Что такое COM и COM объект 1С

         COM – это объектная модель данных, выстроенная на Майкрософт компоненте, которая является независимой от платформы и распределённой объектной системой. Данная объектная модель служит для создания компонентов в двоичном программном обеспечении, при условии взаимодействия компонентов.

         Главным, единым, условием языка программирования, который сможет обеспечить объектную модель COM сервера 1С, является возможность писать структуры указателей и ними вызывать различные функции.

         Рассмотрим, что такое COM объект 1С – это некий объект, доступ к данным которого можно получить только при помощи функций, которые связаны. Набор из таких функций называют интерфейсом платформы 1С, а функции внутри наборов называются методами.

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

2.     Ошибка вызова конструктора COMОбъекта в 1С

         Ошибка возникает в некоторых случаях, когда бывает, что во время установки системы 1С не регистрируется файл с названием «comcntr.dll», из-за чего работать с COM соединением сервера 1С нельзя ни при каких условиях.

         В этом случае, при решении ошибки, важно учитывать нюансы при работе с операционной системой Windows (при этом, версия Windows должна быть выше XP, т.е. будем рассматривать выход для новых версий) и с администрированием системы 1С.   

3.     Устранение ошибки при вызове конструктора COMОбъект

Ошибка при вызове конструктора COMОбъект в 1С имеет следующее отображение: «2147221164 (0х80040154): Класс не зарегистрирован» либо «Ошибка при вызове конструктора COMОбъект: Недопустимая строка с указанием класса 1С»), вид ошибки представлен на скриншоте ниже:

Выполняем такие действия:

·        Для начала, переходим в режим администратора и запускаем командную строку. Важно обратить внимание, что в командной строке должно быть написано: «C:windowssystem32» (либо 64 в конце, если это 64-х битная версия операционной системы). Получаем, что корректный путь для корневой строки должен выглядеть таким образом:

·        Следующий шаг – это написать команду «regsvr32», она будет выглядеть так: «C:Program Files1cv88.3.ХХ.ХХХХbincomcntr.dll». Стоит отметить, что нужно прописать свой точный номер релиза платформы, а путь к самой библиотеке нужно брать в кавычки, конечный итог продемонстрирован ниже:

После этих действий, ошибка полностью устранена. В скриншотах-примерах была показана версия платформы 1С под номером «8.3.11.2867 х64».

Специалист компании «Кодерлайн»

Лев Туренко

  • Ошибка при вызове ifcplugin signhashsimple ошибка не определена
  • Ошибка при вызове конструктора comобъект 2147467262 0x80004002 интерфейс не поддерживается
  • Ошибка при вызове ifcplugin create ошибка конфигурации error code 2 version undefined
  • Ошибка при вызове конструктора comобъект 2147467262 0x80004002 no such interface supported
  • Ошибка при вызове cryptmsgopentoencode 80070057