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

22.06.20

Разработка - Универсальные функции

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Склонение словочетаний:
.epf 1,59Mb ver:1.0
2 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

Вступайте в нашу телеграмм-группу Инфостарт

Склонение словосочетаний appextcomp NameDecl ПолучитьСклоненияСтроки ПолучитьСклоненияСтрокиПоЧислу

См. также

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    5351    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    46153    dimanich70    83    

163

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    6821    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    57125    atdonya    31    

68

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    8581    ke.92@mail.ru    17    

67

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    22706    YA_418728146    8    

174
Для отправки сообщения требуется регистрация/авторизация