При работе в клиент-серверном варианте системы «1С:Предприятие 8.3» разработчики и администраторы часто сталкиваются с ситуацией, когда стандартный механизм склонения ФИО перестает работать. Ошибка обычно проявляется в общем модуле ФизическиеЛицаЗарплатаКадры при вызове метода Просклонять. Система сообщает: «Не найден файл внешней компоненты». Примечательно, что в файловой базе та же конфигурация может работать без нареканий. Разберем детально причины этого поведения и пошагово пройдем по методам исправления ситуации.
Для начала проанализируем, как 1С работает с компонентой NameDecl.dll. В типовых конфигурациях (например, «Бухгалтерия предприятия 3.0» или «ЗУП 3.1») эта библиотека хранится внутри конфигурации в объекте ОбщийМакет.КомпонентаСклоненияФИО. Когда код обращается к методу склонения, платформа пытается выполнить следующие действия:
ПодключитьВнешнююКомпоненту.Если на любом из этих этапов происходит сбой (недостаточно прав, несовпадение разрядности, поврежденный файл или блокировка антивирусом), мы получаем ошибку о том, что файл не найден, даже если визуально в конфигураторе макет присутствует.
Как показывает практика, наиболее часто проблема заключается в устаревшей версии библиотеки, зашитой в макет. Рассмотрим, почему это критично. В современных реалиях сервер 1С чаще всего является 64-разрядным. Если в макете лежит только 32-битная версия NameDecl.dll, 64-битный рабочий процесс rphost не сможет ее загрузить.
Выполним следующие шаги для обновления:
NameDecl.dll, NameDecl64.dll и файл manifest.xml).КомпонентаСклоненияФИО.Важно понимать, что современные компоненты 1С часто используют технологию Native API. В отличие от старых COM-компонент, их нельзя и не нужно регистрировать в операционной системе через regsvr32. Платформа сама управляет их загрузкой из макета.
Проанализируем ситуацию с правами. В клиент-серверном режиме все операции по записи временных файлов выполняет не текущий пользователь Windows, а учетная запись, от имени которой запущена служба 1C:Enterprise 8.3 Server Agent. По умолчанию это USR1CV8.
Проверим следующие настройки:
USR1CV8 есть полные права (Full Control) на папку временных файлов. Обычно это C:\Windows\Temp или папка профиля службы (например, C:\Users\USR1CV8\AppData\Local\Temp).Если компонента не может «распаковаться» из макета на диск из-за запрета записи, метод ПодключитьВнешнююКомпоненту вернет Ложь, что и приведет к ошибке.
Иногда возникает ситуация, когда файл компоненты был корректно распакован ранее, но затем удален (например, системным администратором при очистке диска) или поврежден, а платформа продолжает считать, что он «установлен». В этом случае простая перезагрузка сервера или перезапуск службы 1С может не помочь.
Рассмотрим алгоритм глубокой очистки:
rphost, rmngr и ragent завершены.C:\Program Files\1cv8\srvinfo).Как упоминалось в обсуждении на форуме, иногда достаточно «прибить» зависшие процессы rphost, чтобы платформа инициировала повторную распаковку компонент из макетов при первом обращении пользователя к функциям склонения.
Если ваша конфигурация работает на платформе версии 8.3.13 и выше, проанализируем возможность отказа от внешней компоненты. В современной платформе появился встроенный механизм склонения строк, который работает стабильнее и быстрее внешних библиотек.
Пример использования встроенного метода:
// Вместо подключения внешней компоненты используем метод платформы
РезультатСклонения = ПолучитьСклоненияСтроки("Иванов Иван Иванович", , "Пд=Дательный");
Для Каждого Склонение Из РезультатСклонения Цикл
Сообщить(Склонение);
КонецЦикла;
Если ваша задача позволяет отойти от использования NameDecl.dll, мы рекомендуем переписать код на использование ПолучитьСклоненияСтроки(). Это навсегда избавит вас от проблем с разрядностью библиотек и правами доступа к папке Temp.
Выясним еще одну неочевидную причину. Внешние компоненты часто пишутся на языке C++ и требуют наличия в системе определенных библиотек времени выполнения — Microsoft Visual C++ Redistributable. Если на сервере установлена «голая» ОС без обновлений, DLL может просто не загрузиться.
Посмотрим, какие пакеты стоит установить на сервере:
Платформа 1С часто выдает ошибку «Файл не найден» в тех случаях, когда сам файл DLL физически существует, но операционная система не может его инициализировать из-за отсутствия необходимых системных .dll (зависимостей).
Мы рассмотрели комплекс мер по устранению ошибки склонения. В большинстве случаев помогает именно обновление макета актуальной компонентой, поддерживающей 64-битную архитектуру, и последующий перезапуск рабочих процессов сервера. Помните, что в клиент-серверном варианте ключевую роль играет контекст выполнения кода: все манипуляции с файлами должны быть разрешены для пользователя, под которым работает служба 1С.