При вызове внешних библиотек для склонения ФИО или должностей разработчики 1С часто сталкиваются со следующей ошибкой:
Ошибка при вызове конструктора (COMОбъект): Склонение = Новый COMОбъект("Padeg.Declension"); по причине: Недопустимая строка с указанием класса
Разберем причины возникновения этой неполадки, посмотрим, как ее исправить на уровне операционной системы, а также проанализируем альтернативные способы склонения строк без применения устаревших COM-компонент.
Данная ошибка означает, что операционная система Windows не может найти в реестре зарегистрированный ProgID Padeg.Declension. Рассмотрим основные причины:
padeg.dll или padegUC.dll) физически находится на диске, но команда регистрации в реестре не выполнялась.Если вам необходимо сохранить работу именно через COMОбъект("Padeg.Declension"), проверим и выполним регистрацию библиотеки по шагам:
regsvr32:
regsvr32.exe "C:\PathTo\padeg.dll"
SysWOW64:
C:\Windows\SysWOW64\regsvr32.exe "C:\PathTo\padeg.dll"
dcomcnfg), создав пустое приложение-сервер и добавив в него библиотеку. Это позволит 64-битному процессу обращаться к 32-битной 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(Текст);
ПадежМорфер = СоответствиеПадежей.Получить(Падеж);
Если ПадежМорфер <> Неопределено Тогда
Результат = РезультатМорфер[ПадежМорфер];
КонецЕсли;
КонецЕсли;
Если ПустаяСтрока(Результат) Тогда
Сообщить("При склонении <" + Текст + "> произошла ошибка.");
Иначе
ЗаписатьРезультатВРегистр(Текст, Падеж, Пол, Результат);
Возврат Результат;
КонецЕсли;
КонецФункции
Проанализируем наиболее современный подход. В актуальных версиях платформы 1С и Библиотеки Стандартных Подсистем (БСП) присутствуют встроенные функции склонения, которые работают без вызова внешних компонентов и сторонних веб-сервисов.
Падеж(): Позволяет быстро получить склонение строки в нужный падеж, включая формирование сокращенных инициалов (например, «Иванову И.И.»).СклонениеПредставлений.Просклонять() или аналогичные функции общего назначения. Этот способ гарантирует высокую скорость работы и отсутствие ошибок при выполнении кода на сервере 1С под управлением Linux или Windows.