При составлении печатных форм часто требуется склонять как фамилии, так и произвольные словосочетания, включая всевозможные сопутствующие числительные. Рассмотрим, какие возможности сейчас доступны программистам.
Прежде всего, можно разделить используемые алгоритмы на два вида: дополнительные внешние компоненты и программные инструменты, доступные на языке программирования 1С без подключения каких-либо компонент. В первых инструментах возникает необходимость, если версия вашей платформы, согласно "Заметкам из Зазеркалья", ниже 8.3.14.1565. В то же время контекстная справка 1С гласит, что обращаться к внешним компонентам потребуется для версий ниже 8.3.13.
Итак, для склонения фамилии, имени и отчества можно использовать внешнюю компоненту, которая распространяется в рамках ИТС, и называется "Слонение ФИО". Ссылка на статью 1С и возможность скачать саму компоненты смотрите в списке используемых материалов внизу статьи (1). Воспользоватья этой компонентой можно очень просто. Скачиваете архив appextcomp.zip, распаковываете и содержимое полученного архива NameDecl.zip (да, да архив в архиве), размещаете в общем макете или макете обработки как двоичные данные. Далее используете следующий ниже код. Более подробно (1) или (3). Проверено автором статьи на платформе 8.3.16 и Windows Server 2019 х64 - работает.
//Компонента в макете обработки
Адрес = "Обработка.Обработка1.Макет.Компонента";
//ИЛИ
//Компонента в общем макете
Адрес = "ОбщийМакет.Компонента";
//ИЛИ
//Для внешней обработки, макет обязательно должен быть помещен во временное хранилище
Макет = ПолучитьМакет("Компонента");
Адрес = ПоместитьВоВременноеХранилище(Макет, Новый УникальныйИдентификатор);
Попытка
ПодключитьВнешнююКомпоненту(Адрес, "NameDecl", ТипВнешнейКомпоненты.Native);
Объект = Новый("AddIn.NameDecl.CNameDecl");
Исключение
Сообщить("Не удалось подключить внешнюю компоненту: " + ОписаниеОшибки());
КонецПопытки;
Результат = Объект.Просклонять(ФИО, Падеж, Пол);
Другая возможность осуществить склонения сводится к использованию встроенных функций. Следует заметить, что функции выполняются только на сервере.
// Склоняет переданную строку.
Функция ПолучитьСклоненияСтроки(<СклоняемаяСтрока>, <ОписаниеСтроки>, <ФорматнаяСтрока>)
// Склоняет переданное сочетание числа и строки в указанном падеже.
Функция ПолучитьСклоненияСтрокиПоЧислу(<СклоняемаяСтрока>, <Число>, <СклоняемыеЕдиницыИзмерения>, <ОписаниеСтроки>, <ФорматнаяСтрока>, <ФорматнаяСтрокаЧисла>)
Эти функции позволяют закрыть множество случаев, если не все, когда необходимо склонение словочетаний. Достаточно подробно описано в контекстной справке и (2). В версии платформы 8.3.16.1359 поддерживается только русский язык. Функции возвращают массив строк, содержащий возможные варианты склонения строки. Согласно справке, если нет необходимости в нескольких вариантах - используйте первый.
Без «подсказок» метод ПолучитьСклоненияСтроки() правильно обрабатывает многие грамматические правила: не склоняет мужские имена, оканчивающиеся на гласную, не склоняет женские имена, оканчивающиеся на некоторые гласные, фамилии, оканчивающиеся на согласный, не склоняет у женщин и др.
Приведу несколько примеров:
Результат = ПолучитьСклоненияСтроки("слесарь пятого разряда",
,
"ПД=Дательный");
// Результат - массив со строкой "слесарю пятого разряда".
Результат = ПолучитьСклоненияСтроки("А. Грин",
"ПЛ=Мужской",
"ПД=Дательный");
// Результат - массив со строкой "А. Грину".
Результат = ПолучитьСклоненияСтрокиПоЧислу("стул", 12, "",
"ЧС=Порядковое", "ПД=Родительный; ПЧ=ЧислоСОкончанием");
// Результат будет содержать массив со строкой "12-го стула".
Результат = ПолучитьСклоненияСтрокиПоЧислу("автомобиль", 5, "",
"ЧС=Количественное", "ПД=Дательный; ПЧ=ЧислоПрописью");
// Результат будет содержать массив со строкой "пяти автомобилям".
Результат = ПолучитьСклоненияСтрокиПоЧислу("медный купорос", 3.5,
"килограмм, грамм, 2", "ЧС=Количественное", "ПД=Винительный;
ПЧ=Число");
// Результат будет содержать массив со строкой "3 килограмма пятьдесят граммов медного купороса".".
Результат = ПолучитьСклоненияСтрокиПоЧислу("автомобиль", 5,
, "ЧС=Порядковое", "ПД=Дательный;
ПЧ=Число");
// Результат будет содержать массив со строкой "5 автомобилю".
К статье прилагается обработка на управляемых формах для тестирования разных алгоритмов склонения словосочетаний. Обработка протестирована на платформах 8.3.16 и 8.3.17 в режиме совместимости "Версия 8.3.14".
Используемые материалы
1. Внешний компонент "Склонение ФИО" (https://its.1c.ru/db/metod8dev/content/2967/hdoc)
2. Склонение словосочетаний с числительными (https://wonderland.v8.1c.ru/blog/sklonenie-slovosochetaniy-s-chislitelnymi/)
3. Компонент склонения ФИО (Native API) (http://1clenta.ru/pattern/50)