Как программно просклонять ФИО в 1С и где найти параметр Компонента

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

В процессе разработки в среде 1С:Предприятие часто возникает задача склонения ФИО, должностей или названий организаций для формирования печатных форм. Исторически эта задача решалась разными способами: от использования внешних библиотек (DLL) до внедрения специализированных подсистем в составе БСП. Рассмотрим подробно ситуацию, когда в коде встречается функция Просклонять с параметром Компонента, и разберем, как реализовать этот функционал современными средствами.

Анализ исходной ситуации: работа с внешней компонентой

Разберем код, представленный в вопросе. Мы видим экспортную функцию, которая пытается вызвать метод Просклонять у некоего объекта Компонента. Проанализируем это решение:


Функция Просклонять(Компонента, Знач Фраза = "", Падеж = 1, Результат) Экспорт
    
    Результат = Фраза;
    
    #Если Клиент Тогда
        
    Попытка
        Результат = Компонента.Просклонять(Фраза, Падеж);
        Возврат Истина;
        
    Исключение
        Возврат Ложь;
        
    КонецПопытки;
    
    #Иначе
    
    Возврат Ложь;
    
    #КонецЕсли
    
КонецФункции

Здесь параметр Компонента — это объект внешней компоненты (обычно NameDeclension.dll), который должен быть предварительно загружен в память приложения. Если вы копируете этот код в свою базу, важно понимать, что сама по себе переменная Компонента не возникнет из ниоткуда. Как выяснилось в ходе обсуждения на форуме, в типовых или старых самописных конфигурациях такая переменная часто объявляется как экспортная переменная модуля управляемого приложения или инициализируется в глобальном модуле.

Рассмотрим, как обычно происходит инициализация такой компоненты, чтобы параметр перестал быть "пустым":


// В модуле управляемого приложения
Перем КомпонентаСклонения Экспорт;

Процедура ПриНачалеРаботыСистемы()
    Попытка
        ПодключитьВнешнююКомпоненту("ОбщийМакет.NameDeclension", "Decl");
        КомпонентаСклонения = Новый("AddIn.Decl.CNameDeclension");
    Исключение
        Сообщить("Не удалось загрузить компоненту склонения");
    КонецПопытки;
КонецПроцедуры

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

  1. Разрядность: Старые компоненты часто бывают 32-битными и отказываются работать на 64-битных клиентах или серверах.
  2. Операционная система: Трудности при работе под Linux или в веб-клиенте.
  3. Безопасность: Требуются права на регистрацию библиотек в системе.

Современный подход: Встроенный механизм платформы 1С

Начиная с версии платформы 8.3.13, разработчикам больше не требуется искать внешние библиотеки или мучиться с регистрацией NameDeclension.dll. В платформу был добавлен мощный встроенный механизм. Разберем его использование подробнее.

Основным инструментом стала функция глобального контекста ПолучитьСклоненияСтроки(). Проанализируем ее преимущества: она работает на сервере, на клиенте (включая мобильные платформы и Linux) и не требует никаких внешних файлов.

Пример использования встроенного механизма:


// Простой пример склонения ФИО в дательный падеж
ФИО = "Иванов Иван Иванович";
Падеж = "ПД=Дательный"; // Используется специальный синтаксис описания падежа
Результат = ПолучитьСклоненияСтроки(ФИО, , Падеж);

Если Результат.Количество() > 0 Тогда
    Сообщить(Результат[0]); // Выведет: Иванову Ивану Ивановичу
КонецЕсли;

Выясним подробности синтаксиса падежей. Платформа 1С использует строковые коды для определения нужной формы:

Использование склонения через БСП

Если вы работаете в современной конфигурации (например, БП 3.0, УТ 11 или ERP 2), наиболее правильным способом будет использование функций Библиотеки стандартных подсистем (БСП). Разберем, почему это удобно.

Подсистема "Склонение представлений" в БСП автоматически выбирает наиболее подходящий метод: если платформа версии 8.3.13 и выше, она использует встроенную функцию; если ниже — пытается подключить компоненту. Программисту не нужно заботиться о проверке условий #Если Клиент.

Рассмотрим программный интерфейс БСП:


// Склонение ФИО через общий модуль БСП
Фраза = "Петров Петр Петрович";
Падеж = 3; // Дательный падеж
Результат = СклонениеПредставлений.ПросклонятьФИО(Фраза, Падеж);
// Результат: "Петрову Петру Петровичу"

Для склонения должностей или названий организаций в БСП предусмотрена другая функция. Проанализируем пример:


// Склонение должности
Должность = "Главный бухгалтер";
Результат = СклонениеПредставлений.ПросклонятьПредставление(Должность, 2); 
// Результат: "Главного бухгалтера"

Сравнительный анализ методов

Подведем итог и выясним, какой метод склонения лучше выбрать для ваших задач:

1. Внешняя компонента (DLL):

Подходит только для поддержки старого кода в базах, которые давно не обновлялись. Требует наличия файла в макете или на диске. Часто вызывает ошибки Метод объекта не обнаружен, если объект Компонента не был инициализирован при старте системы.

2. Встроенная функция ПолучитьСклоненияСтроки():

Самый быстрый и надежный способ для современных конфигураций. Работает везде. Позволяет склонять не только ФИО, но и произвольные фразы, учитывая пол и число.

3. Функции БСП (СклонениеПредставлений):

Стандарт де-факто для типовых решений. Обеспечивает максимальную стабильность и чистоту кода. Мы рекомендуем использовать именно этот метод, если ваша конфигурация включает БСП.

Рекомендации по исправлению ошибки из темы

Если вы столкнулись с ошибкой, описанной автором темы (непонятно, откуда брать параметр Компонента), выполните следующие шаги:

  1. Проверьте Модуль управляемого приложения. Поищите там экспортные переменные, в которые может записываться объект склонения.
  2. Воспользуйтесь глобальным поиском по конфигурации (Ctrl+Shift+F) по строке "AddIn.NameDeclension" или "CNameDeclension". Это поможет найти место инициализации компоненты.
  3. Если ваша задача — внедрить склонение "с нуля", откажитесь от использования параметра Компонента. Перепишите функцию на использование встроенного механизма платформы ПолучитьСклоненияСтроки, как было показано выше. Это сделает ваш код более устойчивым к обновлениям и смене серверного оборудования.

Помните, что правильная работа со склонениями значительно повышает качество формируемых документов и лояльность пользователей системы 1С.

← На главную