В процессе разработки в среде 1С:Предприятие часто возникает задача склонения ФИО, должностей или названий организаций для формирования печатных форм. Исторически эта задача решалась разными способами: от использования внешних библиотек (DLL) до внедрения специализированных подсистем в составе БСП. Рассмотрим подробно ситуацию, когда в коде встречается функция Просклонять с параметром Компонента, и разберем, как реализовать этот функционал современными средствами.
Разберем код, представленный в вопросе. Мы видим экспортную функцию, которая пытается вызвать метод Просклонять у некоего объекта Компонента. Проанализируем это решение:
Функция Просклонять(Компонента, Знач Фраза = "", Падеж = 1, Результат) Экспорт
Результат = Фраза;
#Если Клиент Тогда
Попытка
Результат = Компонента.Просклонять(Фраза, Падеж);
Возврат Истина;
Исключение
Возврат Ложь;
КонецПопытки;
#Иначе
Возврат Ложь;
#КонецЕсли
КонецФункции
Здесь параметр Компонента — это объект внешней компоненты (обычно NameDeclension.dll), который должен быть предварительно загружен в память приложения. Если вы копируете этот код в свою базу, важно понимать, что сама по себе переменная Компонента не возникнет из ниоткуда. Как выяснилось в ходе обсуждения на форуме, в типовых или старых самописных конфигурациях такая переменная часто объявляется как экспортная переменная модуля управляемого приложения или инициализируется в глобальном модуле.
Рассмотрим, как обычно происходит инициализация такой компоненты, чтобы параметр перестал быть "пустым":
// В модуле управляемого приложения
Перем КомпонентаСклонения Экспорт;
Процедура ПриНачалеРаботыСистемы()
Попытка
ПодключитьВнешнююКомпоненту("ОбщийМакет.NameDeclension", "Decl");
КомпонентаСклонения = Новый("AddIn.Decl.CNameDeclension");
Исключение
Сообщить("Не удалось загрузить компоненту склонения");
КонецПопытки;
КонецПроцедуры
В данном примере КомпонентаСклонения и будет тем самым параметром, который передается в функцию. Однако использование внешних DLL (Legacy-подход) имеет ряд серьезных недостатков:
Начиная с версии платформы 8.3.13, разработчикам больше не требуется искать внешние библиотеки или мучиться с регистрацией NameDeclension.dll. В платформу был добавлен мощный встроенный механизм. Разберем его использование подробнее.
Основным инструментом стала функция глобального контекста ПолучитьСклоненияСтроки(). Проанализируем ее преимущества: она работает на сервере, на клиенте (включая мобильные платформы и Linux) и не требует никаких внешних файлов.
Пример использования встроенного механизма:
// Простой пример склонения ФИО в дательный падеж
ФИО = "Иванов Иван Иванович";
Падеж = "ПД=Дательный"; // Используется специальный синтаксис описания падежа
Результат = ПолучитьСклоненияСтроки(ФИО, , Падеж);
Если Результат.Количество() > 0 Тогда
Сообщить(Результат[0]); // Выведет: Иванову Ивану Ивановичу
КонецЕсли;
Выясним подробности синтаксиса падежей. Платформа 1С использует строковые коды для определения нужной формы:
Если вы работаете в современной конфигурации (например, БП 3.0, УТ 11 или ERP 2), наиболее правильным способом будет использование функций Библиотеки стандартных подсистем (БСП). Разберем, почему это удобно.
Подсистема "Склонение представлений" в БСП автоматически выбирает наиболее подходящий метод: если платформа версии 8.3.13 и выше, она использует встроенную функцию; если ниже — пытается подключить компоненту. Программисту не нужно заботиться о проверке условий #Если Клиент.
Рассмотрим программный интерфейс БСП:
// Склонение ФИО через общий модуль БСП
Фраза = "Петров Петр Петрович";
Падеж = 3; // Дательный падеж
Результат = СклонениеПредставлений.ПросклонятьФИО(Фраза, Падеж);
// Результат: "Петрову Петру Петровичу"
Для склонения должностей или названий организаций в БСП предусмотрена другая функция. Проанализируем пример:
// Склонение должности
Должность = "Главный бухгалтер";
Результат = СклонениеПредставлений.ПросклонятьПредставление(Должность, 2);
// Результат: "Главного бухгалтера"
Подведем итог и выясним, какой метод склонения лучше выбрать для ваших задач:
1. Внешняя компонента (DLL):
Подходит только для поддержки старого кода в базах, которые давно не обновлялись. Требует наличия файла в макете или на диске. Часто вызывает ошибки Метод объекта не обнаружен, если объект Компонента не был инициализирован при старте системы.
2. Встроенная функция ПолучитьСклоненияСтроки():
Самый быстрый и надежный способ для современных конфигураций. Работает везде. Позволяет склонять не только ФИО, но и произвольные фразы, учитывая пол и число.
3. Функции БСП (СклонениеПредставлений):
Стандарт де-факто для типовых решений. Обеспечивает максимальную стабильность и чистоту кода. Мы рекомендуем использовать именно этот метод, если ваша конфигурация включает БСП.
Если вы столкнулись с ошибкой, описанной автором темы (непонятно, откуда брать параметр Компонента), выполните следующие шаги:
"AddIn.NameDeclension" или "CNameDeclension". Это поможет найти место инициализации компоненты.ПолучитьСклоненияСтроки, как было показано выше. Это сделает ваш код более устойчивым к обновлениям и смене серверного оборудования.Помните, что правильная работа со склонениями значительно повышает качество формируемых документов и лояльность пользователей системы 1С.