При работе со склонением ФИО или представлений объектов разработчики и пользователи 1С нередко сталкиваются с ошибкой вызова метода ПодключитьКомпонентуИзМакета. В этой статье проанализируем причины возникновения данной проблемы и рассмотрим способы ее устранения.
Текст ошибки обычно выглядит следующим образом:
{ОбщийМодуль.СклонениеПредставленийОбъектов.Модуль(147)}: Ошибка при вызове метода контекста (ПодключитьКомпонентуИзМакета)
Компонента = ОбщегоНазначения.ПодключитьКомпонентуИзМакета("CNameDecl", "ОбщийМакет.КомпонентаСклоненияФИО");
по причине:
Не найден файл внешней компоненты
Выясним главную причину такого поведения. Дело в том, что устаревшая версия внешней компоненты CNameDecl (библиотека NameDecl.dll в макете ОбщийМакет.КомпонентаСклоненияФИО) разработана под 32-разрядную архитектуру (x86). Если сеанс запускается в 64-разрядной платформе «1С:Предприятие» (или вызов выполняется на стороне 64-битного сервера в процессе rphost), платформа не может загрузить 32-битную динамическую библиотеку в свой адресный поток.
Также проблема может возникать, если антивирусное ПО или ограничения прав доступа блокируют распаковку и выполнение DLL-файлов из временного каталога %TEMP%.
Рассмотрим наиболее современный и надежный способ — переход на встроенную функцию платформы ПолучитьСклоненияФИО(). Она не требует внешних динамических библиотек, работает нативно и полностью независима от разрядности системы (x86/x64) и операционной системы (Windows/Linux).
Посмотрим на пример применения встроенной функции:
// Пример получения склонений ФИО средствами платформы
РезультатСклонения = ПолучитьСклоненияФИО("Иванов Иван Иванович", "ДП=Дательный");
Если РезультатСклонения.Количество() > 0 Тогда
ФИОвДательном = РезультатСклонения[0];
КонецЕсли;
Разберем вариант, когда необходимо сохранить работу через внешнюю компоненту. Для этого потребуется обновить макет ОбщийМакет.КомпонентаСклоненияФИО актуальной версией из библиотеки стандартных подсистем (БСП). В новые версии компоненты входят DLL-библиотеки как для x86, так и для x64 архитектур, а также специальный файл manifest.xml, который указывает платформе, какую библиотеку нужно подключать в зависимости от разрядности клиента или сервера.
Если склонение выполняется на стороне клиента и нет возможности оперативно доработать конфигурацию, можно использовать 32-разрядное клиентское приложение 1С (1cv8.exe x86). В 32-битной среде внешняя компонента CNameDecl подключается без ошибок.
Проанализируем альтернативный вариант — интеграцию с внешними веб-сервисами склонения по протоколам HTTP/HTTPS. Этот подход полностью исключает локальное подключение NameDecl.dll и снимает любые ограничения, связанные с архитектурой ОС или платформы 1С.
Если ошибка проявляется нестабильно (например, исчезает после очистки кэша и появляется снова через некоторое время), разберем порядок действий по настройке окружения:
AppData\Local\Temp).