При работе с 1С:Предприятием, особенно в серверных и терминальных средах (RDP, Hyper-V), пользователи часто сталкиваются с ошибкой «Ошибка при вызове конструктора (COMОбъект): -2147221005 (0x800401F3): Недопустимая строка с указанием класса». Эта ошибка указывает на то, что система не может найти или правильно зарегистрировать COM-объект, к которому пытается обратиться 1С. Чаще всего это происходит при попытке создать объект типа COMОбъект("Excel.Application") или при работе с коннектором 1С comcntr.dll. В этой статье мы подробно разберем основные причины возникновения данной ошибки и предложим комплексные шаги по ее устранению.
Ситуация, описанная на форуме, связана с использованием обработки обмена с банком «ОТКРЫТИЕ» (МодульОбменаСБанкомV3) в 1С:Бухгалтерии ред. 3.0, которая, по всей видимости, использует COM-объекты для взаимодействия, возможно, с Excel. При этом на локальном компьютере обработка работает без проблем, тогда как на виртуальной машине под Windows Server 2012 или Windows 10 через RDP возникает указанная ошибка. Мы рассмотрим различные аспекты, которые могут привести к такому поведению, и предоставим пошаговые инструкции по их диагностике и исправлению. В качестве альтернативного решения для импорта файлов подойдёт шаблон загрузки данных из Excel без использования COM-соединения.
comcntr.dll)Первостепенной задачей при возникновении ошибки «Недопустимая строка с указанием класса» является убедиться, что необходимый COM-компонент корректно зарегистрирован в системе. В контексте 1С это часто относится к библиотеке comcntr.dll, которая используется для COM-соединения с базами данных 1С, а также к другим COM-объектам, например, связанным с Microsoft Excel.
Уточним разрядность операционной системы и платформы 1С. Это критически важный шаг. Если ваша операционная система 64-разрядная, а платформа 1С, которая вызывает COM-объект, 32-разрядная, то пути к утилите regsvr32 и самой библиотеке comcntr.dll будут различаться. Автор темы подтвердил, что ОС 64-разрядная, а платформы 32-разрядные.
Для 32-разрядной платформы 1С на 64-разрядной Windows:
Утилита regsvr32 для 32-битных DLL находится по пути C:\Windows\SysWOW64\regsvr32.exe.
Библиотека comcntr.dll для 32-битной платформы 1С обычно располагается в C:\Program Files (x86)\1cv8\8.3.ХХ.ХХХХ\bin\comcntr.dll.
Таким образом, команда для регистрации будет выглядеть так:
C:\Windows\SysWOW64\regsvr32 "C:\Program Files (x86)\1cv8\8.3.ХХ.ХХХХ\bin\comcntr.dll"
В сообщении 5 и 10 предлагаются эти варианты.
Для 64-разрядной платформы 1С на 64-разрядной Windows:
Утилита regsvr32 для 64-битных DLL находится по пути C:\Windows\System32\regsvr32.exe.
Библиотека comcntr.dll для 64-битной платформы 1С обычно располагается в C:\Program Files\1cv8\8.3.ХХ.ХХХХ\bin\comcntr.dll.
Таким образом, команда для регистрации будет выглядеть так:
C:\Windows\System32\regsvr32 "C:\Program Files\1cv8\8.3.ХХ.ХХХХ\bin\comcntr.dll"
Отменим регистрацию старых версий. Прежде чем регистрировать новую версию comcntr.dll или при возникновении конфликтов, рекомендуется отменить регистрацию всех предыдущих или некорректных записей. Это поможет избежать путаницы в реестре и использования не той версии DLL. Для этого используем ключ /u:
C:\Windows\SysWOW64\regsvr32 /u "C:\Program Files (x86)\1cv8\8.3.ХХ.ХХХХ\bin\comcntr.dll"
Затем повторим регистрацию нужной версии без ключа /u.
Выполним регистрацию от имени администратора. Все команды regsvr32 необходимо запускать из командной строки или PowerShell, открытых с правами администратора. Иначе регистрация может быть выполнена некорректно или вообще не произойдет.
Проверим, установлена ли платформа 1С корректно. Иногда проблемы с COM-объектами могут быть вызваны поврежденной установкой платформы. Рекомендуется переустановить платформу 1С, если проблема не решается другими способами.
В некоторых случаях, особенно при работе через RDP или с серверным вариантом 1С, требуется создание и настройка COM+ приложения для обеспечения корректного взаимодействия с comcntr.dll. Автор темы упоминал, что пробовал такой подход, но с неверным именем приложения.
Используем правильное имя приложения COM+. В сообщении 4 и 12 указывается на ошибку в названии. Для платформы 1С версии 8.3 нам следует использовать имя V83.COMConnector вместо V82.COMConnector.
Создадим новое приложение COM+.
dcomcnfg или comexp.msc) через «Администрирование».V83.COMConnector.Добавим компонент comcntr.dll в созданное приложение.
V83.COMConnector.comcntr.dll, который мы ранее зарегистрировали. Это должен быть путь, соответствующий разрядности вашей платформы 1С, например: C:\Program Files (x86)\1cv8\8.3.ХХ.ХХХХ\bin\comcntr.dll.Настроим свойства безопасности и удостоверения приложения COM+. Это один из самых частых источников проблем, как указывает сообщение 9.
V83.COMConnector, выберем «Свойства».Настроим права на запуск и активацию для пользователей.
V83.COMConnector и затем раздел «Роли».Перезапустим службу Агента сервера 1С:Предприятия. После всех изменений настроек COM+ часто требуется перезапуск службы Агента сервера 1С:Предприятия, чтобы изменения вступили в силу.
Excel.Application при вызове COMОбъектаСообщение 2 в ветке форума явно указывает на код, который пытается создать COMОбъект("Excel.Application"). Если проблема возникает именно на этой строке, то, помимо вышеуказанных настроек comcntr.dll и COM+ (если используется коннектор), нам нужно убедиться в правильной работе самого Excel как COM-объекта.
Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(парамФайл);
Состояние("Обработка файла Microsoft Excel...");
Исключение
Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
Сообщить(ОписаниеОшибки);
Возврат;
КонецПопытки
Убедимся, что Microsoft Excel установлен на сервере. Это может показаться очевидным, но отсутствие установленного MS Office (и, соответственно, Excel) на сервере является частой причиной такой ошибки — решить проблему поможет обработка экспорта из 1С в Excel без MS Office. На сервере должна быть установлена соответствующая версия Microsoft Excel.
Настроим DCOM-права для Microsoft Excel Application. Если Excel установлен, но ошибка сохраняется, вероятно, проблема в правах доступа к его COM-компонентам через DCOM.
dcomcnfg или comexp.msc).Проверим особенности 32-битного Excel на 64-битной ОС. Если на 64-разрядной операционной системе установлен 32-битный Excel, и 1С тоже 32-битная, проблем быть не должно. Однако, если 1С 64-битная, а Excel 32-битный, может потребоваться использование 32-битной версии консоли «Службы компонентов» для настройки DCOM (запускается командой mmc comexp.msc /32).
Изменение параметра UseHWLicenses в 1CEStart.cfg. Хотя автор темы упоминал изменение параметра UseHWLicenses=0 на UseHWLicenses=1 в файле 1CEStart.cfg (который обычно находится в профиле пользователя, например, C:\Users\ИМЯ_ПОЛЬЗОВАТЕЛЯ\AppData\Roaming\1C\1CEStart\1CEStart.cfg), этот параметр, как правило, относится к использованию аппаратных ключей защиты и крайне редко влияет на ошибки COMОбъект. Тем не менее, как часть комплексного подхода, можно попробовать установить его в 0, если он был изменен на 1, или наоборот, но маловероятно, что это решит данную конкретную проблему.
После выполнения всех вышеуказанных шагов, если проблема не устранена, мы рекомендуем выполнить следующие действия:
Перезагрузим сервер. Многие изменения в настройках COM+, DCOM и реестра требуют полной перезагрузки операционной системы для вступления в силу. Простого перезапуска служб может быть недостаточно.
Проанализируем журналы событий Windows. В «Просмотре событий» Windows (раздел «Журналы Windows» -> «Система» и «Приложения») часто можно найти более подробную информацию об ошибках COM-объектов, включая идентификаторы ошибок и контекст их возникновения. Это может дать ценные подсказки о корне проблемы.
Проверим разрядность платформы 1С и вызываемых COM-объектов. Убедимся, что разрядность установленной платформы 1С (32-бит или 64-бит) соответствует разрядности вызываемого COM-объекта. В идеале, если есть возможность, используйте платформу 1С той же разрядности, что и COM-объект (например, 32-битную платформу для 32-битного Excel).
Проверим актуальность платформы 1С. Убедимся, что используемая версия платформы 1С актуальна. Иногда в старых версиях могут быть известные ошибки, которые уже исправлены в более свежих релизах.
Пользователи RDP и сессии администратора. Как отметил участник форума в сообщении 9, иногда COM-подключение может работать только при активном сеансе администратора. Убедимся, что в свойствах компонента COM+ нет галочек или настроек, которые привязывают его работу к интерактивному сеансу или сеансу конкретного пользователя, что может мешать работе через RDP для других пользователей.
Проверим настройки безопасности локальной и сетевой. В некоторых случаях, когда 1С обращается к внешним ресурсам через COM, могут влиять настройки брандмауэра Windows или антивирусного ПО. Временно отключим их для проверки.
Решение проблемы «Недопустимая строка с указанием класса» часто требует системного подхода и тщательной проверки всех вышеуказанных пунктов. Мы рекомендуем последовательно выполнять шаги, начиная с самых базовых (регистрация DLL, проверка установки Excel) и заканчивая более сложными настройками COM+ и DCOM. В большинстве случаев, причина кроется в некорректной регистрации компонента, несоответствии разрядности или недостаточных правах доступа. Чтобы полностью избежать подобных сложностей при формировании таблиц, можно использовать инструмент для выгрузки данных из 1С в Excel без COM-объектов.