При попытке подключить внешнюю библиотеку для склонения ФИО в 1С:Предприятие разработчики часто сталкиваются с ошибкой на этапе выполнения функции ЗагрузитьВнешнююКомпоненту. Даже если библиотека предварительно была успешно зарегистрирована в системе через утилиту regsvr32, платформа 1С может продолжать вызывать исключение.
Рассмотрим типовой фрагмент кода, в котором происходит сбой:
Попытка
// Загружаем внешнюю компоненту
ЗагрузитьВнешнююКомпоненту("NameDecl.dll");
Компонента = Новый("AddIn.NameDeclension");
Исключение
// Не удалось выполнить операции с внешней компонентой
ОбщегоНазначения.СообщитьОбОшибке("Ошибка загрузки внешней компоненты для склонения ФИО! Функции склонения будут недоступны!");
КонецПопытки;
Проанализируем основные причины этой проблемы и разберем наиболее эффективные способы её решения.
Когда в метод ЗагрузитьВнешнююКомпоненту передается только имя файла (например, "NameDecl.dll"), платформа 1С пытается найти его исключительно в текущем рабочем каталоге bin установленной платформы. Если файл NameDecl.dll находится в корне диска C:\ или любой другой произвольной папке, система его не обнаружит, несмотря на то, что COM-объект зарегистрирован в реестре Windows.
Для исправления можно указывать полный путь к файлу:
ЗагрузитьВнешнююКомпоненту("C:\NameDecl.dll");
Классическая библиотека NameDecl.dll является 32-разрядным COM-компонентом. При запуске 64-битного клиента 1С или при выполнении кода на 64-битном сервере 1С:Предприятие 32-битная библиотека не сможет загрузиться напрямую в 64-битный процесс. Кроме того, служба сервера 1С (например, USR1CV8) может не иметь необходимых прав на чтение файла DLL или доступ к веткам реестра Windows.
Оптимальным решением для современных конфигураций является отказ от использования устаревших COM-компонент в пользу технологии Native API. Использование Native API имеет главное преимущество: оно не требует предварительной регистрации библиотеки в операционной системе через regsvr32.
Для работы по технологии Native API библиотеку упаковывают в ZIP-архив и помещают в общий макет конфигурации с типом Двоичные данные. После этого подключение выполняется через метод ПодключитьВнешнююКомпоненту:
КодПодключения = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаСклонения", "NameDecl", ТипВнешнейКомпоненты.Native);
Если КодПодключения Тогда
Компонента = Новый("AddIn.NameDecl.Склонение");
КонецЕсли;
Такой подход избавляет от необходимости административной настройки каждого рабочего места и сервера.
В современных версиях платформы 1С:Предприятие (начиная с 8.3.13) реализован встроенный механизм склонения строк, который не требует подключения никаких внешних файлов или сторонних веб-сервисов.
Разберем пример использования платформенной функции ПолучитьСклоненияСтроки:
// Получаем варианты склонения ФИО в дательном падеже (Падеж 3)
РезультатСклонения = ПолучитьСклоненияСтроки("Иванов Иван Иванович", "Падеж=3");
Если РезультатСклонения.Количество() > 0 Тогда
ФИОВДательном = РезультатСклонения[0];
КонецЕсли;
Также в типовых конфигурациях на базе БСП (Библиотеки Стандартных Подсистем) доступны встроенные процедуры, такие как СклонениеПредставленийОбъектов.СклонятьФИО(), которые автоматически выбирают наиболее подходящий доступный сервис склонения.
При возникновении ошибок с NameDecl.dll рекомендуется:
ЗагрузитьВнешнююКомпоненту.regsvr32.ПолучитьСклоненияСтроки или подсистемы БСП.