Ошибка при вызове конструктора comобъект excel
Как правило, ошибка возникает при фоновом обмене данными между базами 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 – Ответить
Ошибка происходит при попытке загрузить из Excel в 1С, когда код обработчика выполняется не на клиенте, а на сервере и в большинстве случаев текст ошибки говорит об отсутствии прав у пользователя сервера 1С.
Особенности
Кодом со стороны 1С без изменения места исполнения не устраняется, использование других функций подключения Com также не дает положительных результатов.
Убедиться в причине ошибки возможно, если посмотреть логи системы.
Устранение:
- на сервере убиваем excel (taskkill /im excel.exe /f)
- открываем оснастку «Службы компонентов» (Пуск->Администрирование->Службы компонентов)
- в ней раскрываем ветку Службы компонентов->Компьютеры->Мой компьютер->Настройка DCOM
- справа в списке находим Microsoft Excel Application, открываем Свойства, вкладка Удостоверение, выбираем пользователя с администраторскими правами, ОК.
Может оказаться, что «Microsoft Excel Application» отсутствует в списке, в данном случае
- Запускаем REGEDIT
- Открываем ветку Computer\HKEY_CLASSES_ROOT\AppID\EXCEL.EXE, если ее нет, то создаем
- Создаем в ней строковый параметр AppID =
- Выполняем команду «mmc comexp.msc /32», которая делает то же что и DCOMCONFIG, но позволяет видеть 32 битные компоненты.
- После этого в Component Services должен появиться «Microsoft Excel Application»
Чтобы решить эту проблему, я включил пользователя USRV82, под которым запускается сервер приложений 1С Предприятия 8.3, в группу Distributed COM Users, но ошибка сразу не ушла, потребовалась перезагрузка.
Осложняло проблему то, что ошибка плавала: периодически выходила, либо в момент создания объекта, либо уже в момент вызова методов excel-application.
Так что нельзя однозначно сказать, что же решило проблему.
Заключение
В большинстве случаев уйти от дополнительной настройки операционной системы возможно, если использовать вызова Com-Объекта на клиенте. При правильной установке объектов они работают даже при различных по битности 1с и Excel, OS.
В моем же случае клиентские компьютеры работали на Ubuntu, поэтому вся обработка перенесена на сервер.
Бывает такое: вы прописываете для компонента пользователя и пароль.
Затем через некоторое время меняете пароль и компонент перестает работать: выходит такая же ошибка «Интерфейс не поддерживается». Следует просто вбить новый пароль.
Один миллион, вложенный в эффективную рекламу, продает больше, чем десять миллионов, вложенных в неэффективную рекламу… Плохая реклама может и совсем отпугнуть покупателя.
— Дэвид Огилви
При обмене с базами возникает ошибка:
При попытке подключения к информационной базе произошла ошибка:
Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса: Недопустимая строка с указанием класса
Решение ошибки подключения через COM
Все что нам надо это выполнить регистрацию COM-соединения.
Вот что говорит 1С: Программа установки сама выполняет регистрацию COM-соединения “ для компьютера”. Имеется возможность выполнить регистрацию «для пользователя» с помощью командной строки «regsvr32 /n /i:user comcntr.dll».
А вот как это сделал я с помощью командной строки и команды Regsvr32.
Пуск – Выполнить ввел команду Regsvr32 «C:\Program Files\1cv82\8.2.14.533\bin\comcntr.dll» и жмем Enter.
Regsvr32 – команда регистрирует в реестре файлы .dll как компоненты команды.
regsvr32 [/u] [/s] [/n] [/i[:cmdline]] имя_dll
Специальные предложения
У меня была такая беда, только текст ошибки другой:
При попытке соедиения с COM-сервером произошла следующая ошибка:
Метод объекта не обнаружен (Connect)
И тоже помогло :)
Блин, а я с бубном плясал во круг служб компонентов, настроек DCOM и все что на ум приходило :)
Для Win 7 нужно создавать файл с расширением bat или cmd и выполнять от имени администратора иначе ни чего не получится.
Господа Ошибка
-2147221005(0x800401F3): Недопустимая строка с указанием класса
: Ошибка при вызове конструктора (COMОбъект)
Эксель = Новый COMОбъект("Excel.Application");
вот код
______________________________________
Процедура КнопкаВыполнитьНажатие(Кнопка)
// Вставить содержимое обработчика.
Эксель = Новый COMОбъект("Excel.Application");
Эксель.WorkBooks.Open(Путь);
Эксель.Sheets(1).Select();
.
.
____________
Везде где мог зарегистрировал comcntr.dll и в службе компонентов под учеткой админ и в настройке компонента все ок поставилось . Проблема не решилась и клиент Толстый "Управляемое и обычный". ОС 7 х64 платформа х32 на х64 тоже ставил такая же беда . Права полные запуск под админом . файл открытия Excel разблокированный что не так?
У меня ошибка осталась проделал и в реестре и в компоненте под полными правами .
: Ошибка при вызове конструктора (COMОбъект)
Эксель = Новый COMОбъект("Excel.Application");
-2147221005(0x800401F3): Недопустимая строка с указанием класса
_____
Только вот на ноуте Excel не устанавливал для открытия файла этого! Надо или не надо его устанавливать . связь 1С и Excell есть какая нибудь по билиотекам
А Вы не можете подсказать решение проблемы?:
При попытке редактирования документа выскочила ошибка: "Ошибка СУБД. Внутренняя ошибка компоненты dbeng8". Документ невозможно ни откорректировать, ни пометить на удаление.
(4) Nadegda_P,
Если файловая база 1С:Предприятие 8, то что-то подобное разок случилось в ситуации, когда пользователь в уже ранее проведенном документе перезаполнял табличную часть. И в момент этих его действий выключилось питание.
В результате получилась такая картина:
- движения документа есть,
- в списке документов он виден,
- запросами через консоль запросов получается выбрать и реквизиты документа, и строки табличных частей,
- но при открытии формы документа выдается ошибка наподобие указанной Вами, с подробностями, в которых упоминается несуществующая строка табличной части. И программа закрывается.
Попытки вылечить документ ни к чему не привели, и пришлось применить обходной путь:
1. Движения документа удалили с помощью обработки типа "Корректировка движений документов" (на Инфостарте есть такие),
2. Реквизиты документа подправили с помощью, например, "Групповой обработки объектов" - так, чтобы было видно, что не надо трогать его.
3. Сделали новый документ взамен этого, и провели его. А старый так и лежит, и никому вроде не мешает.
Если бы существовал бэкап, содержащий этот документ в нормальном состоянии, можно было бы XML-обменом попробовать загрузить документ из бэкапа. Но не было такого бэкапа.
Если файловая база 1С:Предприятие 8, то что-то подобное разок случилось в ситуации, когда пользователь в уже ранее проведенном документе перезаполнял табличную часть. И в момент этих его действий выключилось питание.
В результате получилась такая картина:
- движения документа есть,
- в списке документов он виден,
- запросами через консоль запросов получается выбрать и реквизиты документа, и строки табличных частей,
- но при открытии формы документа выдается ошибка наподобие указанной Вами, с подробностями, в которых упоминается несуществующая строка табличной части. И программа закрывается.
Попытки вылечить документ ни к чему не привели, и пришлось применить обходной путь:
1. Движения документа удалили с помощью обработки типа "Корректировка движений документов" (на Инфостарте есть такие),
2. Реквизиты документа подправили с помощью, например, "Групповой обработки объектов" - так, чтобы было видно, что не надо трогать его.
3. Сделали новый документ взамен этого, и провели его. А старый так и лежит, и никому вроде не мешает.
Если бы существовал бэкап, содержащий этот документ в нормальном состоянии, можно было бы XML-обменом попробовать загрузить документ из бэкапа. Но не было такого бэкапа.
ага, еще бы на SQL бы перевести базу, вообще цены бы вам не было )
(8) WKBAPKA,
Мы тоже не в деревне родились, и про клиент-серверный вариант работы с 1С знаем.
У меня на поддержке есть и базы файловые, и клиент-серверные в достаточном количестве.
В сети той организации, у которой эта проблема случилась, не было установленного 1С-сервера и SQL-сервера, и серверное железо не подходило для такого режима работы.
Да и пользователей в этой организации не столько, чтобы было необходимо переходить на вариант работы через сервер 1С-Предприятия.
Поэтому, раз проблема была только в одном этом документе, было сделано то, что я описал выше.
в смысле? у мну на домашней машине стоит 2005 скуль. и машина у меня не серверная.
вы бы могли эту базу вообще не поднять, там же один файл. в случае разрушения его, все, капут.
другой вопрос, что нужно покупать 1С сервер. это да. тока думаю, что они уже раза три как переплатили за ваши услуги. но то такое. не мое дело конечно.
Если пользователей не много то и железо для сервака не нужно суперское. В одной конторе 5 пользователей, стоит обычный комп проц уже не помню, но с 2 гб. оперативы, SentOS+PostgreSQL+1C все нормально работает уже 3 года.
Недавно обновлял платформу и 2 дня работали в файловом варианте, так все кричали что все ужасно тормозит.
Еще в профилях пользователей C:\Documents and Settings\….\Application Data\1C\1CEStart\1CEStart.cfg изменяем параметр UseHWLicenses=0 на UseHWLicenses=1
Отпишись ели получится
Garik8866; dante; AKV77; user895546; CratosX; user1042924; ch1mera; quNas; kondr1221; wolder; DrVitaly; mnb-next; Pavel_NT; rus_alexey; nano1c; 77dream77; StAlf; BoryaMbi; emilliya; blich; collider; sv_dima; Z_Z; Dimka74; EugeneMal; vikvikmag; barelpro; 1379511; mi0999; Татьяна_69; Xytras; busy1; alimuslim; Sh00rick; mousesport; markela; Alexion; aronskiy; sergsqr; swflash; Apolonov-Erik; smolyakov; Jon2011; Glukaman; FSerg; bar_s; + 46 – Ответить
(15)
Спасибо, то что нужно - помогло! Только я думаю надо добавить, что компоненту ещё надо запустить!
(15)
хотя у меня просто после обновления платформы перестало подключаться из базы в базу.
я попробовал.
вот только "Поставил галку «Применить политику программных ограничений» - Уровень ограничений «Неограниченный»" не нашел.
но стало наверное еще хуже.
стало примерно так ". метод Подключить не обнаружен . "
удалил Ветку V82COMConnector . и все заработало. вот только не знаю. после перезагрузки сервера что будет.
и это из Бухгалтерии 2.0 в Комплексную автоматизацию.
Но вот основную то необходимость из Бухгалтерии 2.0 в Докуметооборот сходу не получилось.
Пишет "При попытке создания обработки ОбменДаннымиXML произошла ошибка:: Поле объекта не обнаружено (ОбменДаннымиXML)"
ну есно! "Обработка.ОбменДаннымиXML" такого в ДО нет.
Чтож . будем шаманить дальше.
(15) Супер! Какой вы МОЛОДЕЦ! Столько времени промучалась с сервером! И как все просто решается! Спасибо огромное!
(15) Для Windows 7x64 у меня вот так получилось
в %systemroot%\SysWoW64\ нашел cmd.exe
далее клик на нем правой мышкой и открываю его из меню как администратор
открывается командное окно с путем: C:\Windows\system32
Далее RegSvr32 "С:\Program Files (x86)\1cv82\8.2.19.76\bin\comcntr.dll"
(15) яростно плюсанула 10 пальцами
давно пыталась решить проблему с этими коннекторами - особенно когда несколько разных платформ и выгрузка идет например с 8.2 торговли в 8.3 бухгалтерию
огромное СПАСИБО за такую подробную инструкцию.
первый вариант с regsvr32 не помогал
(15) , (77)
Спасибо, оба молодцы, хотя (77) выдал более подробную, пошаговую для "чайников" инструкцию.
Рекомендации работают .
Спасибо за то что написали об этом. Когда мне было нужно - нигде об этом не писалось. Было убито немерено времени.
Большое спасибо, сам сталкивался с такой проблемой, сломали голову, так и не смогли забороть. А сейчас попробовал и все получилось.
регистрация по новой этой dll не решило проблемы: платформа 1С:Предприятие 8.2 (8.2.13.219) - может есть еще решения проблемы.
З.Ы.
Платформу не целесообразно обновлять так как у меня распределенка - а новая платформа при изменении в конфигурации отправляет в файле обмена полностью файл конфигурации в подчиненные узлы. (по крайне мере была такая проблема)
Манипуляция с компонентой не помогла.
Regsvr32 "C:\Program Files\1cv82\8.2.14.540\bin\comcntr.dll" делал результат ноль.
Платформу переставлял, тоже не помогло.
Какие будут идеи может с компонентой есть еще какая то настройка?
Как вариант, чтобы запустить cmd в windows 7 от имени администратора, можно запустить его из папки "C:\Windows\System32" (в папке System32 есть файл cmd, который нужно запустить от имени администратора :)))
Автору респект, что поделился. Давно это проходил и, именно так решал проблему. Но не удосужился где-то зафиксировать.
если не помог не один из двух вариантов, еще есть решение?
Win Server 2003 x64
1С 8.2
пытаюсь из ЗУП подключиться к УТ
При попытке соедиения с COM-сервером произошла следующая ошибка:
: Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса: Недопустимая строка с указанием класса
У меня компонента успешно регистрируется, однако ошибка все равно вылетает. Уже сносил компа старую и новую версию платформы, комп перезагружал.
Что еще может быть?
Мне тоже помогло, но только после того, как я ЗАШЕЛ в систему как Администратор.
Просто запуск от имени Администратора не помогал.
У меня Windows 7 64-битная
Обратите на это внимание, я убил на это 6 часов.
Воспользовался советом. Винда 64 разрядная, запустил cmd от имени администратора,
командная строка Regsvr32 "C:\Program Files (x86)\1cv82\8.2.19.90\bin\comcntr.dll". путь изменил на нужный в блокноте. все сработало
Мне помогло в следующем случае:
на серваке стоит рабочая версия Бухгалтерии на платформе 8.2.17.143
Себе локально для разработки поставил наверх платформу 8.2.19.116, ибо в старой неприятный глюк с убеганием курсора в левый верхний угол. Но теперь при попытке COM-соединения с сервером от себя выскакивала ошибка несоответствия версий comcntr.dll на клиенте (у меня) и сервере (рабочая).
Зарегистрировал у себя regsvr32 "c:\Program Files (x86)\1cv82\8.2.17.143\bin\comcntr.dll" поверх 8.2.19.116 и соединение с сервером через COM теперь проходит.
Был настроен обмен между ИБ комплексной конфигурации (КА).
После обновления конфигураций в двух базах при обмене выдал эту ошибку.
Воспользовался предложенной командой - обмен восстановился.
Огромное спасибо автору.
Начат обмен данными под полными правами на сервере 1С:Предприятия по настройке "Обмен с "1С:Бухгалтерия государственного учреждения 8 (начиная с версии 1.0.2)"" 08.12.2015 20:26:28
Завершен обмен данными под полными правами на сервере 1С:Предприятия по настройке "Обмен с "1С:Бухгалтерия государственного учреждения 8 (начиная с версии 1.0.2)"" 08.12.2015 20:26:30
Отслеживаю отладкой:
в Функция ПодключитсяКИнформационнойБазе
При "Проверке подключения" ТекCOMПодключение получаем COMОбъект
При "Выполнении обмена" ТекCOMПодключение получаем Неопределено
ОбъектПодключения в обоих случаях равен "V83.COMConnector"
В чем может быть проблема. Подскажите.
(60) as7bs,
Сразу не отписался, но лучше поздно.
Проблема была решена установкой сервера 1С заново. Предполагаю, что проблема возникла из за того, что возможно, когда первоначально обновляли сервер 1С в компонентах не включили "COM-соеденение". После новой установки сервера 1С ошибка пропала.
Ошибка возникает при установке новой версии платформы/сервера 1с
Решение:
1)Деинсталлировать технологические платформы предыдущих версий(если они не требуются вам для старых версий баз)
2)Переставить нужную тех. платформу(должна быть одинаковой версии с версией сервера, если есть сервер)
3)Произвести манипуляцию типа "regsvr32 "c:\Program Files (x86)\1cv82\8.2.17.143\bin\comcntr.dll"" или ее 64 разр аналог.
как на машине, так и на сервере
p.s. при этом regsvr как не хотел нормально её регить, так и не согласился. Но работает.
Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(13799)>: Ошибка при вызове конструктора
После этого начинает работать COM на стороне сервера x64.
set version=8.3.5.1625
set x64=C:\Program Files\1cv8\%version%\bin\comcntr.dll
set x32=C:\Program Files (x86)\1cv8\%version%\bin\comcntr.dll
set reg64=%systemroot%\System32\regsvr32.exe
set reg32=%systemroot%\SysWoW64\regsvr32.exe
%reg64% /i /s "%x64%"
%reg64% /u /s "%x32%"
%reg64% /i /s "%x64%"
%reg32% /u /s "%x64%"
%reg64% /i /s "%x64%"
%reg32% /u /s "%x32%"
%reg64% /i "%x64%"
Первое что нужно сделать, это запустить командную строку от имени администратора.
В командной строке Windows набираете cmd , в писке выбора появится программа с таким названием, устанавливаете курсор на эту программу и выбираете из контекстного меню «Запуск под администратором» (см. картинку ниже).
Затем ввести команду (можно двумя способами):
1. regsvr32 "C:\Program Files (x86)\1cv8[ версия платформы ]\bin\comcntr.dll"
2. C:\Program Files (x86)\1cv8[ версия платформы ]\bin>regsvr32 comcntr.dll
Прежде чем ввести эти команды нужно переместиться по каталогам. Допустим, при запуске командной строки появляется совсем другой каталог, пример можно увидеть на картинке ниже.
Для смены каталога нужно написать cd , после которого установить пробел, а затем указать тот путь, который нам нужен, например C :\ Program Files ( x 86)\1 cv 8[версия платформы]\ bin , затем после указания пути к каталогу нажимаете Enter . Смотрите пример смены каталога на картинке ниже.
Вот теперь рядом с каталогом можно ввести regsvr 32 comcntr . dll , нажать Enter и зарегистрировать компоненту (смотрите пример на картинке ниже).
Если компоненту не удалось зарегистрировать, проверьте как вы запустили командную строку, возможно, что забыли запустить от имени администратора. Если все в порядке, то нужно отключить службу агента сервера 1С:Предприятия и все программы, использующие эту DLL.
Читайте также: