Каталог решений - Склонение словочетаний

Склонение словочетаний

Склонение словочетаний

В наличии

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

Категория:

Описание

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

Прежде всего, можно разделить используемые алгоритмы на два вида: дополнительные внешние компоненты и программные инструменты, доступные на языке программирования 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)

has been added to your cart:
Оформление заказа