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

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При организации обмена данными между платформами 1С 8 и 1С 7.7 разработчики часто сталкиваются с ошибкой инициализации OLE-соединения. Попытка создать объект через конструктор COMОбъект завершается исключением: «Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса». Разберем по шагам, почему возникает эта неполадка, как правильно зарегистрировать библиотеки «семерки» в операционной системе и как грамотно написать код инициализации базы.

Выясняем причину возникновения ошибки

Платформа 1С:Предприятие 7.7 выступает в роли локального OLE Automation сервера. Чтобы внешнее приложение (в данном случае процесс 1С 8) смогло обнаружить и запустить сервер 7.7 по его программному идентификатору (ProgID), в системном реестре Windows должны присутствовать соответствующие записи с указанием уникального идентификатора класса (CLSID) и пути к исполняемому файлу программы.

Ошибка «Недопустимая строка с указанием класса» сообщает о том, что переданный идентификатор не найден в системном реестре. Основные причины такого поведения:

  1. Платформа 7.7 была перенесена простым копированием каталога с файлами, а не установлена через официальный инсталлятор. При обычном копировании ключи в реестре не создаются.
  2. Несоответствие ProgID используемой версии платформы. В зависимости от установленного исполняемого файла имя класса отличается.
  3. Конфликт разрядностей в 64-битной Windows. 1С 7.7 является исключительно 32-разрядным приложением, и его регистрационные записи попадают в специфические ветки реестра.

Разбираем ProgID для различных редакций 1С 7.7

Проанализируем строку инициализации. Часто разработчики пытаются поочередно перебирать все возможные классы. Важно точно знать, какая именно редакция платформы 7.7 установлена на рабочей станции:

  1. V77S.Application — доступен только при наличии установленной версии 1С 7.7 для SQL (исполняемый файл 1cv7s.exe).
  2. V77L.Application — предназначен для локальной однопользовательской версии платформы.
  3. V77.Application — используется для обычной сетевой версии (файл 1cv7.exe).

Если на компьютере установлена сетевая версия, вызов V77S.Application гарантированно вызовет ошибку отсутствия класса.

Регистрация OLE-сервера 1С 7.7 в операционной системе

Рассмотрим способы внесения сведений о COM-сервере в реестр Windows.

Способ 1. Однократный интерактивный запуск от имени администратора.

При штатном старте исполняемый файл 1С 7.7 проверяет наличие своих записей в реестре и пытается зарегистрировать их автоматически. Однако в современных версиях Windows (начиная с Windows 7) механизм UAC блокирует запись в защищенные системные ветки, если программа запущена обычным пользователем.

  1. Закрываем все запущенные процессы 1cv7.exe и 1cv7s.exe в диспетчере задач.
  2. Находим исполняемый файл 1С 7.7 в каталоге установки (например, C:\Program Files (x86)\1Cv77\BIN\1cv7.exe).
  3. Нажимаем правой кнопкой мыши на файл и выбираем пункт «Запуск от имени администратора». Если рабочая станция находится в корпоративной сети, могут потребоваться учетные данные доменного администратора.
  4. После успешного открытия окна выбора базы данных закрываем программу. Классы будут зарегистрированы.

Способ 2. Регистрация через командную строку.

Если запускать интерфейс не требуется, выполним прямую саморегистрацию через ключ /regserver:

  1. Запускаем командную строку (cmd) от имени администратора.
  2. Переходим в каталог с исполняемыми файлами платформы и выполняем команду регистрации:

cd /d "C:\Program Files (x86)\1Cv77\BIN"
1cv7.exe /regserver

Для SQL-версии аналогично выполняем 1cv7s.exe /regserver. Команда отработает в фоновом режиме без вывода сообщений.

В 64-разрядных операционных системах сведения о COM-сервере запишутся в подраздел HKEY_LOCAL_MACHINE\Software\Classes\WOW6432Node\CLSID.

Пример правильного подключения к базе через COM-объект

Посмотрим на пример процедуры подключения к информационной базе 7.7 из кода 1С 8. Проанализируем алгоритм последовательного перебора версий платформы и процедуру инициализации сеанса через метод Initialize:


Функция ПодключитьБазу77(ПутьКБазе, ИмяПользователя = "", Пароль = "") Экспорт
    
    База77 = Неопределено;
    
    // Последовательно проверяем доступные классы OLE-сервера
    Попытка
        База77 = Новый COMОбъект("V77.Application");
    Исключение
        Попытка
            База77 = Новый COMОбъект("V77S.Application");
        Исключение
            Попытка
                База77 = Новый COMОбъект("V77L.Application");
            Исключение
                ВызватьИсключение "Не удалось инициализировать COM-объект 1С 7.7. Убедитесь, что сервер зарегистрирован в системе.";
            КонецПопытки;
        КонецПопытки;
    КонецПопытки;
    
    // Формируем параметры запуска
    // Ключ NO_SPLASH_SHOW отключает показ заставки при старте
    ПараметрыЗапуска = "/D""" + СокрЛП(ПутьКБазе) + """ /N""" + СокрЛП(ИмяПользователя) + """ /P""" + СокрЛП(Пароль) + """";
    Результат = База77.Initialize(База77.RMTrade, ПараметрыЗапуска, "NO_SPLASH_SHOW");
    
    Если Не Результат Тогда
        База77 = Неопределено;
        ВызватьИсключение "Ошибка авторизации или блокировки информационной базы 1С 7.7.";
    КонецЕсли;
    
    Возврат База77;
    
КонецФункции

Особенности работы в 64-разрядной среде и на стороне сервера

Разберем важные нюансы, с которыми можно столкнуться после успешной регистрации класса:

  1. Несовместимость разрядностей процессов. Платформа 1С 7.7 является 32-битной. Если код 1С 8 выполняется внутри 64-битного процесса (64-разрядный клиент или сервер 1С:Предприятия), прямой вызов Новый COMОбъект завершится ошибкой. В таком случае код подключения необходимо переносить на 32-разрядный клиент (в контекст НаКлиенте) либо настраивать COM+ приложение-суррогат через оснастку dcomcnfg (Службы компонентов), чтобы запуск происходил в отдельном процессе dllhost.exe.
  2. Очистка памяти. OLE-сервер 7.7 чувствителен к удержанию ссылок в памяти. После завершения всех операций обмена необходимо явно обнулять переменные, присваивая им значение Неопределено, чтобы процесс 1cv7.exe корректно завершил свою работу.
  3. Порядок сортировки. При запуске 7.7 на современных версиях Windows может возникать ошибка несовпадения кодовой страницы. Для ее устранения поместим в каталог базы данных пустой файл с именем OrdNoChk.prm.
← На главную