При формировании печатных форм договоров, актов, доверенностей и финансовой документации часто требуется выводить числительные не в именительном падеже (например, «пять», «двадцать один»), а в косвенных падежах — чаще всего в родительном («в течение пяти рабочих дней», «в количестве двадцати одного экземпляра»).
Выясним причину, почему стандартная функция ЧислоПрописью() и форматная строка с параметром ЧП не подходят для решения этой задачи. Штатный механизм платформы ЧислоПрописью() умеет склонять только предмет исчисления (существительное), передаваемый в параметрах формата (например: «рубль, рубля, рублей»), тогда как само числительное всегда остается строго в именительном падеже. Разберем по шагам доступные способы получения числа прописью в родительном падеже в 1С:Предприятие.
Начиная с версии платформы 8.3.14, разработчикам доступен встроенный метод глобального контекста ПолучитьСклоненияСтрокиПоЧислу(). Это наиболее удобное и производительное решение, не требующее подключения внешних библиотек.
Рассмотрим синтаксис метода:
ПолучитьСклоненияСтрокиПоЧислу(<СклоняемаяСтрока>, <Число>, <СклоняемыеЕдиницыИзмерения>, <ОписаниеСтроки>, <ФорматнаяСтрока>, <ФорматнаяСтрокаЧисла>)
Функция возвращает массив вариантов строк в требуемом падеже и представлении. Проанализируем ключевые параметры форматирования:
Количественное (например, «пяти», «десяти») или Порядковое (например, «пятого», «десятого»).Именительный, Родительный, Дательный, Винительный, Творительный, Предложный.ЧислоПрописью (полностью словами), Число (цифрами), ЧислоСОкончанием (в виде «5-ти», «10-го»).Посмотрим на практические примеры использования функции на встроенном языке 1С:
// Пример 1: Получение только числительного прописью в родительном падеже
ПараметрыФормата = "ЧС=Количественное; ПД=Родительный; ПЧ=ЧислоПрописью";
МассивРезультатов = ПолучитьСклоненияСтрокиПоЧислу("", 5, "", "ЧС=Количественное", ПараметрыФормата);
Если МассивРезультатов.Количество() > 0 Тогда
ЧислоПрописьюРП = МассивРезультатов[0]; // Возвращает: "пяти"
КонецЕсли;
// Пример 2: Получение числа прописью вместе со связанным существительным
МассивРезультатов = ПолучитьСклоненияСтрокиПоЧислу("день", 10, "", "ЧС=Количественное", "ПД=Родительный; ПЧ=ЧислоПрописью");
Если МассивРезультатов.Количество() > 0 Тогда
ФразаПрописьюРП = МассивРезультатов[0]; // Возвращает: "десяти дней"
КонецЕсли;
Важные особенности метода:
&НаСервере или &НаСервереБезКонтекста.Если конфигурация разработана на базе Библиотеки стандартных подсистем (БСП), в ней уже присутствуют специализированные общие модули для работы со строками и склонением. Рекомендуется проверить наличие модулей:
СтроковыеФункцииКлиентСерверСклонениеПредставленийОбъектовСклонениеПредставленийОбъектовКлиентСерверВ типовых конфигурациях часто реализованы обертки, позволяющие склонять ФИО, должности и числительные с помощью внутренних словарей БСП или вызовов серверных компонентов.
Если база работает на старой версии платформы (до 8.3.14) или включен строгий режим совместимости, задачу решают программным разбором числа. Рассмотрим правила склонения количественных числительных в русском языке, которые необходимо учитывать при написании кода:
Разберем пример создания собственной структуры соответствий для базовых числительных на случай, когда требуется быстро склонять числа в ограниченном диапазоне:
Функция ПолучитьЧислоПрописьюРП(Знач ИсходноеЧисло) Экспорт
Склонения = Новый Соответствие;
Склонения.Вставить(1, "одного");
Склонения.Вставить(2, "двух");
Склонения.Вставить(3, "трех");
Склонения.Вставить(4, "четырех");
Склонения.Вставить(5, "пяти");
Склонения.Вставить(6, "шести");
Склонения.Вставить(7, "семи");
Склонения.Вставить(8, "восьми");
Склонения.Вставить(9, "девяти");
Склонения.Вставить(10, "десяти");
Склонения.Вставить(20, "двадцати");
Склонения.Вставить(30, "тридцати");
Результат = Склонения[ИсходноеЧисло];
Если Результат = Неопределено Тогда
Результат = Строка(ИсходноеЧисло);
КонецЕсли;
Возврат Результат;
КонецФункции
Для сложных случаев (когда требуется склонять произвольные составные числа с редкими единицами измерения, а платформа не обновлена до актуальной версии) применяют интеграцию со сторонними веб-сервисами склонения морфологии или подключают внешние компоненты. Сервис принимает число, существительное и требуемый падеж по HTTP-запросу и возвращает корректно согласованную строку.
Таким образом, для современных конфигураций оптимальным выбором является штатный метод ПолучитьСклоненияСтрокиПоЧислу(), а для устаревших версий — модули БСП или собственные алгоритмические функции.