Как получить число прописью в родительном падеже в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При формировании печатных форм договоров, актов, доверенностей и финансовой документации часто требуется выводить числительные не в именительном падеже (например, «пять», «двадцать один»), а в косвенных падежах — чаще всего в родительном («в течение пяти рабочих дней», «в количестве двадцати одного экземпляра»).

Выясним причину, почему стандартная функция ЧислоПрописью() и форматная строка с параметром ЧП не подходят для решения этой задачи. Штатный механизм платформы ЧислоПрописью() умеет склонять только предмет исчисления (существительное), передаваемый в параметрах формата (например: «рубль, рубля, рублей»), тогда как само числительное всегда остается строго в именительном падеже. Разберем по шагам доступные способы получения числа прописью в родительном падеже в 1С:Предприятие.

Способ 1. Использование штатного метода платформы ПолучитьСклоненияСтрокиПоЧислу

Начиная с версии платформы 8.3.14, разработчикам доступен встроенный метод глобального контекста ПолучитьСклоненияСтрокиПоЧислу(). Это наиболее удобное и производительное решение, не требующее подключения внешних библиотек.

Рассмотрим синтаксис метода:


ПолучитьСклоненияСтрокиПоЧислу(<СклоняемаяСтрока>, <Число>, <СклоняемыеЕдиницыИзмерения>, <ОписаниеСтроки>, <ФорматнаяСтрока>, <ФорматнаяСтрокаЧисла>)

Функция возвращает массив вариантов строк в требуемом падеже и представлении. Проанализируем ключевые параметры форматирования:

  1. ЧС (состав числительного): Количественное (например, «пяти», «десяти») или Порядковое (например, «пятого», «десятого»).
  2. ПД (падеж): Именительный, Родительный, Дательный, Винительный, Творительный, Предложный.
  3. ПЧ (представление числа): ЧислоПрописью (полностью словами), Число (цифрами), ЧислоСОкончанием (в виде «5-ти», «10-го»).

Посмотрим на практические примеры использования функции на встроенном языке 1С:


// Пример 1: Получение только числительного прописью в родительном падеже
ПараметрыФормата = "ЧС=Количественное; ПД=Родительный; ПЧ=ЧислоПрописью";
МассивРезультатов = ПолучитьСклоненияСтрокиПоЧислу("", 5, "", "ЧС=Количественное", ПараметрыФормата);

Если МассивРезультатов.Количество() > 0 Тогда
    ЧислоПрописьюРП = МассивРезультатов[0]; // Возвращает: "пяти"
КонецЕсли;

// Пример 2: Получение числа прописью вместе со связанным существительным
МассивРезультатов = ПолучитьСклоненияСтрокиПоЧислу("день", 10, "", "ЧС=Количественное", "ПД=Родительный; ПЧ=ЧислоПрописью");

Если МассивРезультатов.Количество() > 0 Тогда
    ФразаПрописьюРП = МассивРезультатов[0]; // Возвращает: "десяти дней"
КонецЕсли;

Важные особенности метода:

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

Способ 2. Поиск готовых функций в типовых конфигурациях и БСП

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

  1. СтроковыеФункцииКлиентСервер
  2. СклонениеПредставленийОбъектов
  3. СклонениеПредставленийОбъектовКлиентСервер

В типовых конфигурациях часто реализованы обертки, позволяющие склонять ФИО, должности и числительные с помощью внутренних словарей БСП или вызовов серверных компонентов.

Способ 3. Алгоритмическое склонение числительных

Если база работает на старой версии платформы (до 8.3.14) или включен строгий режим совместимости, задачу решают программным разбором числа. Рассмотрим правила склонения количественных числительных в русском языке, которые необходимо учитывать при написании кода:

  1. Склонение всех частей: в составных количественных числительных склоняются все составляющие слова (сотни, десятки, единицы, разряды тысяч и миллионов). Например: в именительном — триста пятьдесят пять, в родительном — трехсот пятидесяти пяти.
  2. Родовые различия: для чисел, оканчивающихся на единицу и двойку, форма родительного падежа зависит от рода существительного (одного/одной, двух).

Разберем пример создания собственной структуры соответствий для базовых числительных на случай, когда требуется быстро склонять числа в ограниченном диапазоне:


Функция ПолучитьЧислоПрописьюРП(Знач ИсходноеЧисло) Экспорт
    
    Склонения = Новый Соответствие;
    Склонения.Вставить(1, "одного");
    Склонения.Вставить(2, "двух");
    Склонения.Вставить(3, "трех");
    Склонения.Вставить(4, "четырех");
    Склонения.Вставить(5, "пяти");
    Склонения.Вставить(6, "шести");
    Склонения.Вставить(7, "семи");
    Склонения.Вставить(8, "восьми");
    Склонения.Вставить(9, "девяти");
    Склонения.Вставить(10, "десяти");
    Склонения.Вставить(20, "двадцати");
    Склонения.Вставить(30, "тридцати");
    
    Результат = Склонения[ИсходноеЧисло];
    Если Результат = Неопределено Тогда
        Результат = Строка(ИсходноеЧисло);
    КонецЕсли;
    
    Возврат Результат;
    
КонецФункции

Способ 4. Внешние веб-сервисы и компоненты

Для сложных случаев (когда требуется склонять произвольные составные числа с редкими единицами измерения, а платформа не обновлена до актуальной версии) применяют интеграцию со сторонними веб-сервисами склонения морфологии или подключают внешние компоненты. Сервис принимает число, существительное и требуемый падеж по HTTP-запросу и возвращает корректно согласованную строку.

Таким образом, для современных конфигураций оптимальным выбором является штатный метод ПолучитьСклоненияСтрокиПоЧислу(), а для устаревших версий — модули БСП или собственные алгоритмические функции.

← На главную