Как исправить ошибку «Недопустимая строка с указанием класса» при вызове COMОбъекта в 1С?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

При работе с 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-соединения.

1. Проверка и правильная регистрация COM-компонента (comcntr.dll)

Первостепенной задачей при возникновении ошибки «Недопустимая строка с указанием класса» является убедиться, что необходимый COM-компонент корректно зарегистрирован в системе. В контексте 1С это часто относится к библиотеке comcntr.dll, которая используется для COM-соединения с базами данных 1С, а также к другим COM-объектам, например, связанным с Microsoft Excel.

  1. Уточним разрядность операционной системы и платформы 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"
  2. Отменим регистрацию старых версий. Прежде чем регистрировать новую версию comcntr.dll или при возникновении конфликтов, рекомендуется отменить регистрацию всех предыдущих или некорректных записей. Это поможет избежать путаницы в реестре и использования не той версии DLL. Для этого используем ключ /u:

    
    C:\Windows\SysWOW64\regsvr32 /u "C:\Program Files (x86)\1cv8\8.3.ХХ.ХХХХ\bin\comcntr.dll"
    

    Затем повторим регистрацию нужной версии без ключа /u.

  3. Выполним регистрацию от имени администратора. Все команды regsvr32 необходимо запускать из командной строки или PowerShell, открытых с правами администратора. Иначе регистрация может быть выполнена некорректно или вообще не произойдет.

  4. Проверим, установлена ли платформа 1С корректно. Иногда проблемы с COM-объектами могут быть вызваны поврежденной установкой платформы. Рекомендуется переустановить платформу 1С, если проблема не решается другими способами.

2. Правильная настройка COM+ приложения для 1С-коннектора

В некоторых случаях, особенно при работе через RDP или с серверным вариантом 1С, требуется создание и настройка COM+ приложения для обеспечения корректного взаимодействия с comcntr.dll. Автор темы упоминал, что пробовал такой подход, но с неверным именем приложения.

  1. Используем правильное имя приложения COM+. В сообщении 4 и 12 указывается на ошибку в названии. Для платформы 1С версии 8.3 нам следует использовать имя V83.COMConnector вместо V82.COMConnector.

  2. Создадим новое приложение COM+.

    1. Откроем «Службы компонентов» (dcomcnfg или comexp.msc) через «Администрирование».
    2. Перейдем в раздел «Службы компонентов» → «Компьютеры» → «Мой компьютер» → «Приложения COM+».
    3. Правой кнопкой мыши на «Приложения COM+», выберем «Создать» → «Приложение».
    4. В мастере создания приложения выберем «Создать новое приложение».
    5. Укажем имя приложения: V83.COMConnector.
    6. Выберем тип приложения: «Серверное приложение».
    7. На следующем шаге выберем «Указанный пользователь». Здесь очень важно указать учетную запись, под которой работает сервер 1С (если это серверный вариант) или учетную запись, от имени которой запускаются пользовательские сеансы 1С, и которая имеет достаточные права (желательно, права администратора или специально созданная служебная учетная запись). Не просто «Администратор», а именно учетная запись, под которой предполагается работа коннектора. Введем пароль для этой учетной записи.
    8. Завершим создание приложения.
  3. Добавим компонент comcntr.dll в созданное приложение.

    1. Развернем созданное приложение V83.COMConnector.
    2. Правой кнопкой мыши на папке «Компоненты», выберем «Создать» → «Компонент».
    3. В мастере добавления компонентов выберем «Установка новых компонентов».
    4. Укажем путь к файлу comcntr.dll, который мы ранее зарегистрировали. Это должен быть путь, соответствующий разрядности вашей платформы 1С, например: C:\Program Files (x86)\1cv8\8.3.ХХ.ХХХХ\bin\comcntr.dll.
    5. Завершим добавление компонента.
  4. Настроим свойства безопасности и удостоверения приложения COM+. Это один из самых частых источников проблем, как указывает сообщение 9.

    1. Правой кнопкой мыши на приложении V83.COMConnector, выберем «Свойства».
    2. Перейдем на вкладку «Безопасность».
    3. Снимем галку «Принудительная проверка доступа для приложений».
    4. Поставим галку «Применить политику программных ограничений» и установим «Уровень ограничений» в положение «Неограниченный».
    5. Перейдем на вкладку «Удостоверение».
    6. Убедимся, что выбрано «Указанный пользователь» и здесь прописана именно та учетная запись, которая будет использоваться для запуска COM-объекта (та же, что и при создании приложения).
    7. Применим изменения.
  5. Настроим права на запуск и активацию для пользователей.

    1. Развернем приложение V83.COMConnector и затем раздел «Роли».
    2. Правой кнопкой мыши на роли «CreatorOwner», выберем «Создать» → «Пользователи».
    3. Добавим учетные записи пользователей или группы, от имени которых будет происходить вызов COM-объекта. Это могут быть пользователи RDP, группа «Пользователи удаленного рабочего стола» или учетная запись, под которой работает Агент сервера 1С.
    4. Повторим это для роли «Users» при необходимости.
  6. Перезапустим службу Агента сервера 1С:Предприятия. После всех изменений настроек COM+ часто требуется перезапуск службы Агента сервера 1С:Предприятия, чтобы изменения вступили в силу.

3. Проблемы с Excel.Application при вызове COMОбъекта

Сообщение 2 в ветке форума явно указывает на код, который пытается создать COMОбъект("Excel.Application"). Если проблема возникает именно на этой строке, то, помимо вышеуказанных настроек comcntr.dll и COM+ (если используется коннектор), нам нужно убедиться в правильной работе самого Excel как COM-объекта.


Попытка
    Excel = Новый COMОбъект("Excel.Application");
    Excel.WorkBooks.Open(парамФайл);
    Состояние("Обработка файла Microsoft Excel...");
Исключение
    Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
    Сообщить(ОписаниеОшибки);
    Возврат;
КонецПопытки
  1. Убедимся, что Microsoft Excel установлен на сервере. Это может показаться очевидным, но отсутствие установленного MS Office (и, соответственно, Excel) на сервере является частой причиной такой ошибки — решить проблему поможет обработка экспорта из 1С в Excel без MS Office. На сервере должна быть установлена соответствующая версия Microsoft Excel.

  2. Настроим DCOM-права для Microsoft Excel Application. Если Excel установлен, но ошибка сохраняется, вероятно, проблема в правах доступа к его COM-компонентам через DCOM.

    1. Откроем «Службы компонентов» (dcomcnfg или comexp.msc).
    2. Перейдем в раздел «Службы компонентов» → «Компьютеры» → «Мой компьютер» → «Настройка DCOM».
    3. Найдем в списке «Microsoft Excel Application».
    4. Правой кнопкой мыши на «Microsoft Excel Application», выберем «Свойства».
    5. Перейдем на вкладку «Безопасность».
    6. В секции «Разрешения на запуск и активацию» нажмем «Изменить...» и добавим пользователя, под которым работает сервер 1С (или пользователь RDP), предоставив ему права «Локальный запуск» и «Локальная активация».
    7. В секции «Разрешения на доступ» нажмем «Изменить...» и также добавим этого пользователя, предоставив ему права «Локальный доступ».
    8. Перейдем на вкладку «Удостоверение». Здесь также можно настроить, от имени какой учетной записи будет запускаться Excel. Часто выбирают «Пользователь, запускающий приложение», но иногда может потребоваться «Указанный пользователь» с явным указанием учетных данных.
    9. Применим изменения.
  3. Проверим особенности 32-битного Excel на 64-битной ОС. Если на 64-разрядной операционной системе установлен 32-битный Excel, и 1С тоже 32-битная, проблем быть не должно. Однако, если 1С 64-битная, а Excel 32-битный, может потребоваться использование 32-битной версии консоли «Службы компонентов» для настройки DCOM (запускается командой mmc comexp.msc /32).

  4. Изменение параметра UseHWLicenses в 1CEStart.cfg. Хотя автор темы упоминал изменение параметра UseHWLicenses=0 на UseHWLicenses=1 в файле 1CEStart.cfg (который обычно находится в профиле пользователя, например, C:\Users\ИМЯ_ПОЛЬЗОВАТЕЛЯ\AppData\Roaming\1C\1CEStart\1CEStart.cfg), этот параметр, как правило, относится к использованию аппаратных ключей защиты и крайне редко влияет на ошибки COMОбъект. Тем не менее, как часть комплексного подхода, можно попробовать установить его в 0, если он был изменен на 1, или наоборот, но маловероятно, что это решит данную конкретную проблему.

4. Общие рекомендации и диагностика

После выполнения всех вышеуказанных шагов, если проблема не устранена, мы рекомендуем выполнить следующие действия:

  1. Перезагрузим сервер. Многие изменения в настройках COM+, DCOM и реестра требуют полной перезагрузки операционной системы для вступления в силу. Простого перезапуска служб может быть недостаточно.

  2. Проанализируем журналы событий Windows. В «Просмотре событий» Windows (раздел «Журналы Windows» -> «Система» и «Приложения») часто можно найти более подробную информацию об ошибках COM-объектов, включая идентификаторы ошибок и контекст их возникновения. Это может дать ценные подсказки о корне проблемы.

  3. Проверим разрядность платформы 1С и вызываемых COM-объектов. Убедимся, что разрядность установленной платформы 1С (32-бит или 64-бит) соответствует разрядности вызываемого COM-объекта. В идеале, если есть возможность, используйте платформу 1С той же разрядности, что и COM-объект (например, 32-битную платформу для 32-битного Excel).

  4. Проверим актуальность платформы 1С. Убедимся, что используемая версия платформы 1С актуальна. Иногда в старых версиях могут быть известные ошибки, которые уже исправлены в более свежих релизах.

  5. Пользователи RDP и сессии администратора. Как отметил участник форума в сообщении 9, иногда COM-подключение может работать только при активном сеансе администратора. Убедимся, что в свойствах компонента COM+ нет галочек или настроек, которые привязывают его работу к интерактивному сеансу или сеансу конкретного пользователя, что может мешать работе через RDP для других пользователей.

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

Решение проблемы «Недопустимая строка с указанием класса» часто требует системного подхода и тщательной проверки всех вышеуказанных пунктов. Мы рекомендуем последовательно выполнять шаги, начиная с самых базовых (регистрация DLL, проверка установки Excel) и заканчивая более сложными настройками COM+ и DCOM. В большинстве случаев, причина кроется в некорректной регистрации компонента, несоответствии разрядности или недостаточных правах доступа. Чтобы полностью избежать подобных сложностей при формировании таблиц, можно использовать инструмент для выгрузки данных из 1С в Excel без COM-объектов.

← На главную