Содержание:
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:\windows\system32» (либо 64 в конце, если это 64-х битная версия операционной системы). Получаем, что корректный путь для корневой строки должен выглядеть таким образом:
· Следующий шаг – это написать команду «regsvr32», она будет выглядеть так: «C:\Program Files\1cv8\8.3.ХХ.ХХХХ\bin\comcntr.dll». Стоит отметить, что нужно прописать свой точный номер релиза платформы, а путь к самой библиотеке нужно брать в кавычки, конечный итог продемонстрирован ниже:
После этих действий, ошибка полностью устранена. В скриншотах-примерах была показана версия платформы 1С под номером «8.3.11.2867 х64».
Специалист компании «Кодерлайн»
Лев Туренко
Ошибка 2147221164 0x80040154 класс не зарегистрирован 1C 8.3 Автор Олег (Системный администратор), Last modified by Олег (Системный администратор) на 23 октября 2019 10:41 до полудня |
При установке популярной программы бухгалтерского учёта «1С» (версии 8.3) или обновления программы с версии 8.2 на 8.3, а также запуска какой-либо соответствующей процедуры, юзер может получить сообщение «Ошибка 2147221164 0x80040154 класс не зарегистрирован», вызванное отсутствием регистрации класса. Данная ошибка может быть вызвана несоответствием версий 1С на сервере и клиентском ПК, а также отсутствием регистрации необходимого класса COMConnector (dll-библиотека comcntr.dll) в ОС Виндовс. В данном материале я расскажу о сути указанной дисфункции, а также поясню, как от неё избавиться. Особенности возникшей дисфункцииРазбираемая мной ошибка 2147221164 0x80040154 в 1C обычно связана с соединением баз данных по COM-объекту, и может иметь несколько причин:
Разберёмся со способами решения возникшей проблемы. Их два. Способ №1. Регистрируем необходимые библиотекиЕсли на ПК 32-битная ОС, то будет необходимо запустить командную строку с админ. правами, и там набрать: C:\Windows\System32\regsvr32 «C:\Program Files (x86)\1cv8\XXXXX\bin\comcntr.dll» Вместо XXXXX будет нужно ввести номер вашей версии 1С, к примеру, это может быть 8.3.10.2252 или иная (пройдите по указанному пути, и просмотрите номер установленной у вас версии). После этого регистрация упомянутого dll будет завершена, и «Ошибка 2147221164 0x80040154 класс не зарегистрирован» должна исчезнуть. Если на ПК 64-битная ОС, то данная строка должна выглядеть так: C:\Windows\SysWOW64\regsvr32 «C:\Program Files (x86)\1cv8\ХХХХХ\bin\comcntr.dll» Где ХХХХХ – номер вашей версии 1С Выполните следующее:
ЗаключениеИсправление проблем с незарегистрированными классами в 1С обычно решается с помощью двух способов, обозначенных мной выше. Наибольшую эффективность показал второй из перечисленных способов, потому рекомендую воспользоваться алгоритмом его реализации для исправления ошибки 2147221164 0x80040154 на вашем PC. |
(1 голос(а)) Эта статья полезна Эта статья бесполезна |
Но если вы получаете ошибку: Ошибка при вызове конструктора (COMObject): -2147221164(0x80040154): Класс не зарегистрирован, это означает, что при установке платформы компонента comcntr.dll не смогла зарегистрироваться автоматически.
Решается данная проблема очень просто: заходим на сервер 1С, запускаем командную строку от имени администратора и прописываем следующую команду:
C:\Windows\SysWOW64\regsvr32 «c:\Program Files(х86)\1cv8\8.3…\bin\comcntr.dll»
где 8.3… заменяем на корректный путь, в зависимости от вашей версии платформы.
Если после данной манипуляции ошибка не ушла, то пробуем сначала удалить эту компоненту с сервера, а затем установить её заново:
Удаление:
C:\Windows\SysWOW64\regsvr32 /u «c:\Program Files\1cv8\8.3…\bin\comcntr.dll»
Установка:
C:\Windows\SysWOW64\regsvr32 «c:\Program Files\1cv8\8.3…\bin\comcntr.dll»
Первая статья в новом 2021 году будет посвящена программе 1С. Это связанна с тем что данное ПО очень распространено. Так как альтернативы пока что нет. К типовым конфигурация претензий практически нет, в них не появляются ошибки, при обновлении, переносе и других манипуляциях. Что нельзя сказать о самопысных конфигурациях или измененных типовых. Как правило занимаются этим программисты не высокого уровня, так как час разработки профессионала стоить достаточно дорого. В результате конечный пользователь получаем огромные проблемы которые возникают после каких либо манипуляций либо с базой или клиентами. Сегодня поговорим об одной интересной ошибки которая появляется при попытке распечатать какой либо документ «Ошибка при вызове конструктора (COMOбъект) класс не зарегистрирован».
Использование COMOбъектов в 1С это прошлый век, сейчас уже ни кто так не пишет. Раньше с его помощью реализовали печать документов. Они выгружались в Open\Libre Office и от туда уже печатались.
Появиться такая ошибка может после
1 Обновления платформы
2 Переустановки ОС и 1С
3 Обновление конфигурации
4 Проблем с офисными пакетами
5 и т.д.
Это самые распространенные.
У меня есть еще несколько статей в которых я рассказывал как можно исправить различные ошибки 1С рекомендую прочитать.
Ошибка при отправке запроса на сервер
При появлении ошибки в 1С нет кнопки подробнее
Как настроить сортировку в отчете
Как сохранить обработку (как внешнюю)
Как указать версию платформы
Как посмотреть изменения в конфигурации
Три способа избавиться от ошибки «Ошибка при вызове конструктора…»
И так после каких либо манипуляций с 1С у вас стала появляться ошибка.
Ошибка при вызове конструктора (COMOбъект): -2147221164(0x80040154) класс не зарегистрирован
Первый способ
Самое простое это переустановить офисные пакеты Open\Libre, так же как вариант если у вас стоял Open поставить Libre и на оборот. Это нужно для того чтобы обновить специальный компонент.
Второй способ
Попробовать зарегистрировать самостоятельно, для этого запускаем командную строку от имени администратора, переходим в каталог введя команду.
cd \windows\syswow64
И регистрируем
regsvr32 «C:\Program Files (x86)\1cv8\8.3.16.18.14\comcntr.dll»
Кстати данную манипуляцию нужно проводить на сервере.
Третий способ
Установить 32 битную версию клиента 1С, можно даже поверх х64. В итоге у вас появиться два ярлычка для запуска, один для х32 второй х64.
Версию можно указать и в ярлыке запуска 1С.
Можно еще попробовать самостоятельно создать COM + , но лично из своего опыта могу сказать это не помогает. Самый действенный вариант это установка х32 клиента. Так как компонента которая необходимо работает только с х32.
Так же проблема может быть непосредственно в самом коде.
есть такой нюанс столкнулся недавно
накрапал dll com visible
на клиенте работала на ура (клиент x32)
не сервере в упор не хотело
пришлось делать обертку для своей dll
линка сейчас не упомню
а вот в почту се сохранил выдержку как это сделать
(один умный человек написал маленькую статейку по этому делу, адреса не помню, ниже привожу то что я себе в памятки написал)
Содержание статьи
Например для вызова V82.ComConnector на стороне 64-битного сервера 1С.
Это происходит потому, что 64 битные приложения не могут запускать 32 битные DLL которые активируются при запуске 32 битного COM объекта 1С. Для решения проблемы нужно воспользоваться оберткой COM+ которая являясь 64 битным приложением может взаимодействовать с 32 битными библиотеками.
Для это необходимо выполнить следующие шаги:
1. Запускаем консоль «Службы компонентов» (например: Пуск -> Администрирование -> Службы компонентов.
2. В ветке Приложения COM+ добавляем новое приложение: Создать -> Приложение
3. На вопрос «Установка или создание нового приложения» — выбираем «Создать новое приложение».
4. Имя нового приложения лучше написать чтобы было понятно о чем речь: V8_ComConnector, способ активации — «серверное приложение».
5. Учетная запись для запуска приложения: выбираем учетку под которой стартует сервер 1С.
6. В ветке созданного приложения переходим на ветку «Роли» открываем роль «CreatorOwner» и далее в разделе «Пользователи» создаем пользователя — учетную запись под которой работает сервер 1С.
7. В ветке созданного приложения переходим на ветку «Компоненты» и создаем компонент: Создать -> Компонент
8. Выбираем «Установка новых компонентов», и в диалоге выбираем нужную DLL-ку (comcntr.dll)
9. Открываем свойства только что созданного компонента, идем на вкладку «Безопасность», проверяем в списке «Явно установленные для выделенных объектов роли» стоит ли «птичка» напротив роль CreatorOwner — если нет, тогда устанавливаем эту «птичку».
типа все.