Как исправить ошибку «Недопустимая строка с указанием класса» при создании COMОбъект("Padeg.Declension") и просклонять ФИО в 1С?

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

При вызове внешних библиотек для склонения ФИО или должностей разработчики 1С часто сталкиваются со следующей ошибкой:

Ошибка при вызове конструктора (COMОбъект): Склонение = Новый COMОбъект("Padeg.Declension"); по причине: Недопустимая строка с указанием класса

Разберем причины возникновения этой неполадки, посмотрим, как ее исправить на уровне операционной системы, а также проанализируем альтернативные способы склонения строк без применения устаревших COM-компонент.

Выясним причины возникновения ошибки COM-объекта

Данная ошибка означает, что операционная система Windows не может найти в реестре зарегистрированный ProgID Padeg.Declension. Рассмотрим основные причины:

  1. Библиотека не зарегистрирована в ОС. Файл библиотеки (например, padeg.dll или padegUC.dll) физически находится на диске, но команда регистрации в реестре не выполнялась.
  2. Конфликт разрядности (32-bit и 64-bit). Если используемый клиент 1С или сервер «1С:Предприятия» является 64-разрядным процессом, он не сможет напрямую загрузить 32-битную DLL через COM.
  3. Контекст выполнения на сервере. Код склонения выполняется на стороне сервера 1С, но DLL была зарегистрирована только на локальной рабочей станции пользователя.
  4. Недостаток прав службы. Учетная запись, от имени которой запущена служба сервера 1С, не имеет прав доступа к файлу DLL или соответствующей ветке реестра.

Вариант 1. Исправление регистрации COM-компоненты в Windows

Если вам необходимо сохранить работу именно через COMОбъект("Padeg.Declension"), проверим и выполним регистрацию библиотеки по шагам:

  1. Откроем командную строку от имени Администратора.
  2. Для 32-разрядных систем зарегистрируем файл с помощью утилиты regsvr32:

    regsvr32.exe "C:\PathTo\padeg.dll"

  3. Для 64-разрядных систем, если библиотека 32-битная, выполним регистрацию через утилиту из папки SysWOW64:

    C:\Windows\SysWOW64\regsvr32.exe "C:\PathTo\padeg.dll"

  4. Если сервер 1С работает в 64-разрядном режиме, настроим приложение COM+ через Службы компонентов (dcomcnfg), создав пустое приложение-сервер и добавив в него библиотеку. Это позволит 64-битному процессу обращаться к 32-битной DLL.

Вариант 2. Использование Native-компоненты NameDecl без регистрации DLL

Отличным способом избавиться от зависимости от COM-объектов и прав администратора является использование поставляемой 1С внешней компоненты NameDecl (тип Native). Она помещается в макет конфигурации в виде архива и не требует регистрации через regsvr32.

Рассмотрим пример функции склонения ФИО с использованием Native-компоненты и внешнего веб-сервиса Морфер для должностей:


Функция Склонение(ЭтоФио, Знач Текст, Падеж, Пол = 0) Экспорт
    
    Результат = ПолучитьРезультатИзРегистра(Текст, Падеж, Пол);
    Если НЕ ПустаяСтрока(Результат) Тогда
        Возврат Результат;
    КонецЕсли; 
    
    // Склонение ФИО
    Если ЭтоФио Тогда
        
        Попытка
            Если ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаСклонения", "NameDecl", ТипВнешнейКомпоненты.Native) Тогда
                Объект = Новый("AddIn.NameDecl.CNameDecl");                
                Результат = Объект.Просклонять(Текст, Падеж, Пол);
            КонецЕсли; 
        Исключение
            Сообщить("Не удалось загрузить внешнюю компоненту по причине: " + ОписаниеОшибки());
        КонецПопытки;     
        
    // Склонение должностей    
    Иначе         
        СоответствиеПадежей = Новый Соответствие;
        СоответствиеПадежей.Вставить(1, "И");
        СоответствиеПадежей.Вставить(2, "Р");
        СоответствиеПадежей.Вставить(3, "Д");
        СоответствиеПадежей.Вставить(4, "В");
        СоответствиеПадежей.Вставить(5, "Т");
        СоответствиеПадежей.Вставить(6, "П_о");
        
        ОпределениеМорфер = Новый WSОпределения("http://api.morpher.ru/WebService.asmx?WSDL");
        Морфер = Новый WSПрокси(ОпределениеМорфер, "http://morpher.ru/", "WebService", "WebServiceSoap");
        
        РезультатМорфер = Морфер.GetXml(Текст);
        ПадежМорфер = СоответствиеПадежей.Получить(Падеж);
        Если ПадежМорфер <> Неопределено Тогда
            Результат = РезультатМорфер[ПадежМорфер];    
        КонецЕсли;        
    
    КонецЕсли;
    
    Если ПустаяСтрока(Результат) Тогда
        Сообщить("При склонении <" + Текст + "> произошла ошибка.");
    Иначе
        ЗаписатьРезультатВРегистр(Текст, Падеж, Пол, Результат);
        Возврат Результат;
    КонецЕсли;    
КонецФункции

Вариант 3. Использование встроенных механизмов платформы и БСП

Проанализируем наиболее современный подход. В актуальных версиях платформы 1С и Библиотеки Стандартных Подсистем (БСП) присутствуют встроенные функции склонения, которые работают без вызова внешних компонентов и сторонних веб-сервисов.

  1. Встроенная функция платформы Падеж(): Позволяет быстро получить склонение строки в нужный падеж, включая формирование сокращенных инициалов (например, «Иванову И.И.»).
  2. Механизмы БСП: Для работы с ФИО и организациями рекомендуется использовать программный модуль СклонениеПредставлений.Просклонять() или аналогичные функции общего назначения. Этот способ гарантирует высокую скорость работы и отсутствие ошибок при выполнении кода на сервере 1С под управлением Linux или Windows.
← На главную