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