Ошибка при вызове конструктора comobject отказано в доступе

Обновлено: 28.04.2024

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

Текст: «Ошибка при вызове конструктора (COMObject) по причине: -2147221005(0x800401F3): Недопустимая строка с указанием класса».

Решение — в регистрации библиотеки comcntr.dll из каталога программы для корректного вызова COMConnector.

Подготовительные действия

  • отключите службу Агента сервера 1С:Предприятия и программы, возможно использующие регистрируемую DLL;
  • если ранее использовалась библиотека устаревшей версии, удалите регистрацию comcntr.dll, запустив команду вызова regsvr32 с ключом /u.

Подходы к решению

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

2. Переустановка платформы с внесением исправлений

  • запускаем консоль «Службы компонентов»;
  • добавляем новый элемент, переходим «Компьютеры» — «Мой компьютер» — из списка выбираем «Приложения COM+»;
  • выбираем «Создать» — «Приложение»;
  • в Мастере установки выбираем второй вариант «Создать новое приложение», в поле «Введите имя нового приложения:» вводим «V83COMConnector», «Способ активации» устанавливаем «Серверное приложение», нажимаем «Далее»;
  • выбираем учетную запись под которой запускается приложение, по умолчанию — «Текущий (вошедший в систему) пользователь»;
  • на этапах «Добавление ролей приложения» и «Добавление пользователей для ролей» нажимаем «Далее», а затем «Готово».

В ветке только что созданного приложения переходим в подветку «Компоненты» и создаем компонент:

  • в контекстном меню выбираем «Создать» — «Компонент»;
  • кликаем по первому варианту «Установка новых компонентов»;
  • в открывшемся диалоге выбираем необходимый файл comcntr.dll и нажимаем «Открыть»;
  • нажимаем «Далее» и «Готово».

Обратите внимание: после установки измените свойства объекта. Для этого переходим к ветке V83COMConnector:

  • открываем свойства созданного компонента, переходим в ветку V83COMConnector — «Свойства»;
  • на вкладке «Безопасность», в «Авторизация» снимаем флаг «Принудительная проверка доступа для приложений»;
  • в «Политика программных ограничений» устанавливаем флаг «Применить политику программных ограничений» и выбираем «Уровень ограничений:» — «Неограниченный»;
  • нажимаем «Применить» — «ОК».

Полная версия со снимками экранов — в статье на Дзен-канале.

Здравствуйте. Подскажите, никто не сталкивался с такой проблемой?
Если запускать этот код из внешней обработки , то всё нормально, но как только я разместил код в общий модуль (сервер, привилегированный, вызов сервера) и подцепил рег. задание, то вылетает ошибка:

Может в настройках модуля что-то убрать?

(3) yurowski, у тебя 1С:Сервер запускается под конкретным пользователем - вот ему дать права, а не только, как по-умолчанию, "Разрешить запуск как службs"

Чтобы была возможность НА СЕРВЕРЕ обращаться к Excel через COM надо дать права доступа пользователю, от которого запускается сервер 1С. Если мы говорим про регламентные задания, то "перетащить на клиента" не вариант. Есть вариант - использовать умение платформы 8.3.6(7?) читать книги Excel в табличный документ без использования Excel - ТабличныйДокумент.Прочитать()
Там есть нюансы:
1. все листы склеиваются в один табличный документ через разделитель страниц. Вот тут находили решение по обратному разделению на страницы. К сожалению, имена страниц теряются.
2. Могут быть проблемы со считыванием значений как значения (например, дата). По умолчанию считываются текстовые представления. Можно указать параметр для чтения значений а не текста, но с первой попытки у меня что-то не срослось, и больше я не пробовал.
3. Цветовое оформление может быть считано не совсем точно.
Даже с такими ограничениями в одном проекте мне удалось успешно отказаться от обращения к Excel.

Теперь про права, если всё-таки без обращения через COM не обойтись.
Потребуется зайти в "Службы компонентов" (Панель управления-Администрирование, или comexp.msc, или dcomcnfg.exe) - Настройка DCOM, и найти там Microsoft Excel Application.
Если его там нет - значит у вас 64-разрядная система и установлен 32-разрядный Excel. Решение - запустить "comexp.msc /32" для управления 32-разрядными COM-серверами.
Что тут нужно:
1. установить явно от имени какого пользователя будет запускаться Excel (вкладка "Удостоверение").
2. На вкладке "Безопасность" пользователя, от которого стартует 1С (обычно USR1CV8), явно прописать в списках на запуск и доступ.

Maspi; Egovigor; klaus38; etri; vlast; N191119; rolin555; Ghost_X; onetone; tiniji; Tangram; mythos; natarezn; + 13 – Ответить

Есть конфа Документооборот 8 Проф 1,2. Сделан механизм загрузки некоторых данных в Документооборот из БП 2.0 через COM-объект ! Всё это благополучно работало и не могу понять, что случилось. Выскакивает вот такая ошибка :

Ошибка при загрузке данных через (Обработка "Выгрузка и загрузка данных XML")
Доброго времени суток. Возникла проблема при загрузке документов с УПП 1.3. (не типовая) на УПП.

Ошибка при подключении: "can't open device "\\. \COM1" : Отказано в доступе"
подкрючаю ардуино уно к компу. Win 7 sp1 2009 года. На компе стоит система безопасности secret.

скопируй(воспроизведи) объект на свой комп и подключи его, а не с сервера.
если не будет работать, тогда ищем дальше
А иначе может сервер украли(((

Выгрузил базу и подключил на своём компе локально ! Всё работает ! А как раньше на серваке не хочет ! Проверил права на серваке ! Права без ограничений ! Что ещё может быть ?

Запускается от имени администратора сервера и администратора 1С. Прав должно быть достаточно ? Администратор базы 1С и администратор кластера серверов 1С - это одна роль ?

Служба запускается либо из под локального пользователя, либо из под доменного (По умолчанию локальный кажется USR1С8)

исделай на серве новый директорий, перемести туда объект, дай себе любимому все права к директ и к объекту и (помогай нам Бог!). А сервом ты сам заведуешь?

Запускается от имени администратора сервера и администратора 1С. Прав должно быть достаточно ? Администратор базы 1С и администратор кластера серверов 1С - это одна роль ?

Раз сходу, не получается решить, пойдем по порядку:
1. Версия ОС на сервере?
2. На сервере у Вас 1С работает в клиент-серверном варианте или в файловом?
3. Приведите скринщот ошибки, с текстом доступным по кнопке "Подробнее".

1. Что возвращает функция ИмяCOMСоединителя()?
2. Какой разрядности сервер 1С:Предприятия?
3. Производились ли какие то действия, до ошибки? Обновление платформы например?

Клиентскую 32 разрядную часть на сервер устанавливали/обновляли недавно?

Отказано в доступе. Ну как бы в голову приходят два варианта
1. Нет прав у запускающего этот процесс на просмотр реестра
2. Нет прав у запускающего этот процесс на создание нового процесса (ком процесса)

Вы сами запускаете обмен? Он выполняется через регламентное/фоновое задание?

*И все же ответьте что возвращает функция ИмяCOMСоединителя()

Добавлено через 3 минуты
Попробуй зарегить его еще раз КомКонектор
regsrv32 C:\Program Files\1cv82\8.2.**.**\bin\comcntr.dll

свою версию платформы подставь

Добавлено через 8 минут
Стальная Крыса

12 - 23.08.11 - 03:30
сделал как в (5)
но получаю отлуп в виде "Отказано в доступе", это уже лучше, но результат все равно нулевой.

зы. внес учетку сервера 1С в группу "администраторы", перезапустил службу сервера 1С - успеха не дало.
в обед планирую перезапустить сам сервак - может этого-то как раз и не хватает.
Alex375

13 - 23.08.11 - 03:33
Я сталкивался с проблемами доступа при выполнении кода на сервере 8.2. В результате завел в домене учетку и запускаю от ее имени службу 1С сервера - проблем с доступом больше нет
Стальная Крыса

14 - 23.08.11 - 03:51
серверная учетка - именно доменная
Стальная Крыса

15 - 23.08.11 - 04:25
уф, заработало

при просмотре журнала "Система" увидел строку ошибки, которая гласит:

это навело на мысль.
в ветке созданного приложения COM+ в "ролях" добавил пользователя и указал учетку сервера.

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

Особенности

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

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

Устранение:

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

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

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

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

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

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

Заключение

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

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

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

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

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

— Денев Катрин

И чего всех прет подключатся из 8.х к 7.7.? из 7.7. к 8.х по СОМ намного удобнее же работать! Мазохисты.

по твоей ссылке 9-ый пост может дело в COMObject("V77.Application"); вместо COMObject("V1CEnterprise.Application"); ?

результат прежний, ошибка остается: <Форма.Форма.Форма>: Ошибка при вызове метода контекста (CreateObject) Спр = v7.CreateObject("Справочник.Валюты"); по причине: Произошла исключительная ситуация (1С:Предприятие): Неудачная попытка создания объекта (Справочник.Валюты): 0

По уму нужно v7.Initialize(v7.RMTrade,"/D" + ПутьКБазе77+ " /N"+Пользователь+" /P" + Пароль,"NO_SPLASH_SHOW"); делать в Попытке. Попробуй, посмотри на результат. 7.7 стоит правильно - прописана в реестре и т.д.?

и В моем случае база 8.2 одна, а 7.7 - несколько. Я пробовал сделать: но получил ошибку: <Форма.Форма.Форма>: Ошибка при вызове конструктора (COMОбъект) v7 = Новый COMОбъект("V77.ComConnector"); по причине: Недопустимая строка с указанием класса Что не так? Пробовал и попытку, ошибка та же, про установку и реестр не в курсе, ставил не я.

попробуй уж зараз и v7.EvalExpr("СоздатьОбъект(""Справочник.Валюты"")"); у меня помнится только так и работало.

Подключается без проблем СОМОбъект получаю. Я же описал в , что якобы не найден класс. и Успел применить, но без результатно: <Форма.Форма.Форма>: Ошибка при вызове конструктора (COMObject) v7 = Новый COMObject("V77M.Application"); по причине: Недопустимая строка с указанием класса Заменил на предыдущую: по причине: Произошла исключительная ситуация (1С:Предприятие): Неудачная попытка создания объекта (Справочник.Валюты): 0

>>Ошибка при вызове конструктора (COMObject) У меня впечатление что ты запускаешь 77 по ярлыку с сервера, а на самой машине локально 77 у тебя нет. Оно тогда такое и пишет.

, Как устанавливалась 7.7 не в курсе, но вручную запустить и зайти в базу я могу и справочник такой конечно же есть.

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

Пробовал другой объект создать, на данный момент имею код: Ошибка: <Форма.Форма.Форма>: Ошибка при вызове метода контекста (CreateObject) Спр = v7.CreateObject("Справочник.Банки"); по причине: Произошла исключительная ситуация (1С:Предприятие): Неудачная попытка создания объекта (Справочник.Банки): 0

т.е. программист не проверяет, установлено у него соединение или нет? мне такое даже в голову придти не могло.

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

Господи! Да как же тяжело с вами. Тебе "Открыта = БД.Initialize(БД.RMTrade, СтрокаПодключения, "NO_SPLASH_SHOW");", что возвращает?

Переустановил платформу, удалил базу из списка, добавл снова, ошибка прежняя: Строку подключения имею в виде: /D"D:asesбаза2012" /Nадмин /Pадмин (то есть так же) Ошибка в подключении(((

Не знаю точно, но - тут могут быть проблемы. Домашняя базовая - урезана по куче всего. А сама 7.7 точно запускается на этом же компе?

Запускается на этом компе Есть в реесте (если нужно) HKEY_CLASSES_ROOTV77.Application HKEY_CLASSES_ROOTWow6432NodeCLSID HKEY_CLASSES_ROOTWow6432NodeCLSIDProgID HKEY_LOCAL_MACHINESOFTWAREClassesV77.Application HKEY_LOCAL_MACHINESOFTWAREClassesWow6432NodeCLSID

Да, 64. Есть ветка: HKEY_USERSS-1-5-21-1419102363-2094869754-1374439945-1000Software1C1Cv77.7Titles Параметр: D:asesбаза2012 Значение: (рабочая)

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

Просто запустил установщик (по верху). Не удалял перед этим, т.к. куча прописанных баз. Обязательно сносить всё перед повторной установкой?

. пытался из своих запасов установить (коробка, диск, 1с 7.7, 7.70.027), но ругается на версию Виндовс((((((

8.2 запускается на клиенте, никаких директив не указываю, база 8.2 лежит на сервере, на компе-клиенте лежит база 7.7, к ней пытаемся подключиться. Строка подключения верного формата: Нужны ли эти все кавычки?

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

У меня был опыт подключения базы SQL 1с 8.2, также из базы на SQL 1с 8.2, вся разница была в строке подключения (сервер, кластер), но что здесь может быть не верно указано: Строка подключения (в отладке) имеет вид: /D"D:asesбаза2012" /N"админ" /P"админ"

Попытка-Исключение - обязательно? Если без попытки, то Открыта возвращает - Истина, но после строк: На долго зависает, хотя в справочнике Валюты не более 10 элементов. Может быть его надо потом как-то закрывать?

В Исключение используй ИнформацияОбОшибке. Проверка на открытость не нужна. Если база не откроется, то сработает Исключение.

+ Если не закроешь, то процесс зависнет в памяти и закроется только после выхода из 8.2. Поэтому при втором запуске обработки подключение к базе не произойдет. И ещё если 77 закроется неправильно, то придётся её запускать в монопольном режиме.

Благодарю вас, дорогие мои, что до сих пор уделяете внимание : ) Но правда, не в состоянии я самостоятельно сообразить((( Есть прогресс. Каждый раз при неудачной попытке проверяю диспетчер, про 1с 7.7 все чисто. На данный момент код значительно упростился и работает без ошибок: И что же я в итоге увидел: открылась форма списка справочника 7.7 ! Где я просил её открыться? Потом заменил строку: Спр.Выбрать; на И. все заработало. Как надо. Последний вопрос - теперь в конфигураторе 8.2 буду писать синтаксис из 7.7 ?

Подключение к базе установлено. Использую код: где, начДата и конДата - реквизиты на форме 8.2. Документы выводятся ВСЕ, но не за период начала и окончания. Подскажите пожалуйста, как из этого подключения выбрать документы за определенный период?

Читайте также: