Каталог решений - Формы предмета исчисления

Формы предмета исчисления

Формы предмета исчисления

В наличии

Иногда возникает задача склонения предмета исчисления, но ее не пытаются решить правильно. Есть простое решение.

Категория:

Описание

Задача.

Например, необходимо в интерфейсе отображать количество проданных за день яблок естественной фразой «Продано 1 яблоко» («Продано 2 яблока», «Продано 5 яблок»). Обращаю внимание, что количество проданных яблок указывается числом, а не прописью.

Неправильные решения.

Обычно необходимость склонения предмета исчисления обходят следующими способами:

— Игнорирование.
В итоге получаем «Продано 1 яблоков» или «Продано 2 яблоко».

— Использование сокращений.
В итоге получаем «Продано 3 ябл.»

— Использование всех форм сразу.
В итоге получаем «Продано 3 яблоко(ка,ок)» или «Продано 7 яблоко/яблока/яблок»

— Использование только одной формы.
В итоге получаем «Продано яблок: 3»

Последний вариант выглядит неплохо, но не всегда есть возможность использовать его.

Правильное решение.

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

Функция ПолучитьФормуПредметаИсчисления(Количество, Форма1, Форма2, Форма5) Экспорт
    
    Перем Формы, К;    
    
    Формы = Новый Массив();
    Формы.Добавить(Форма1);
    Формы.Добавить(Форма2);
    Формы.Добавить(Форма5);
    
    К = ?(Количество >= 0, Количество, -Количество);
    
    ИндексФормы = ?(К%10 = 1 И К%100 <> 11, 0, ?(К%10 >= 2 И К%10 = 20), 1, 2));
    
    Возврат Формы[ИндексФормы];
    
КонецФункции

В описанном примере решение может быть следующим.

"Продано " + Продано + " " + ПолучитьФормуПредметаИсчисления(Продано, "яблоко", "яблока", "яблок")

Для того, чтобы правильно определить каждую из трех форм, вы должны проговорить их для 1, 2 и 5 — этого будет достаточно.

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

Заключение.

Старался быть кратким. Спасибо за внимание.

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