Как в 1С 7.7 вывести число и проценты с дробной частью прописью?

Программист 1С v7.7 Финансы и профессиональные услуги
← На главную

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

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

Способ 1. Разделение целой и дробной части с форматированием через «ЧП»

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

Разберем реализацию этого алгоритма:


// Исходное число процентов
ПечСредневзвешанный = 146.450;

// Выделяем целую часть и дробную часть, приведенную к тысячным
ЦелаяЧасть = Цел(ПечСредневзвешанный);
ДробнаяЧасть = Окр((ПечСредневзвешанный - ЦелаяЧасть) * 1000, 0);

// Формируем строковое представление
ТекстПрописью = Формат(ЦелаяЧасть, "ЧП") + " целых " + Формат(ДробнаяЧасть, "ЧП") + " тысячных процента";
ТекстПрописью = ВРег(ТекстПрописью);

Обратим внимание на важный технический нюанс: при вычислении разности ПечСредневзвешанный - Цел(ПечСредневзвешанный) из-за особенностей арифметики чисел с плавающей точкой результат может превратиться в значение вроде 0.4499999999. Поэтому умножение на 1000 обязательно необходимо оборачивать в функцию Окр(..., 0), чтобы избежать потери единицы в младшем разряде.

Способ 2. Использование пользовательских файлов прописи (.spl)

Платформа 1С 7.7 позволяет переопределять правила вывода чисел и валют через специальные файлы шаблонов прописи с расширением .spl (Spelling). В таких файлах можно задать собственные наименования целой и дробной части.

Проанализируем порядок работы с файлами прописи:

  1. Создаем пользовательский файл (например, percent.spl), в котором указываем наименования единиц исчисления в различных падежах.
  2. В модуле перед формированием печатной формы вызываем процедуру Пропись("percent.spl").
  3. Формируем строку с помощью стандартной функции Формат().
  4. Обязательно восстанавливаем стандартные правила вызовом Пропись(""), так как команда Пропись() действует глобально на весь программный модуль и может повлиять на вывод обычных денежных сумм в других документах.

Посмотрим на пример кода с подключением шаблона:


// Включаем пользовательский шаблон прописи
Пропись("percent.spl");

// Получаем отформатированную строку
СтрокаПроцентов = Формат(ЧислоПроцентов, "ЧПДС");

// Сбрасываем шаблон на системный по умолчанию
Пропись("");

Ограничение данного способа заключается в том, что стандартная структура секции Money в файле .spl рассчитана на деление 1/100 (сотые доли). Если требуется вывод именно тысячных долей (3 знака после запятой), предпочтительнее использовать программную обработку.

Особенности согласования грамматического рода и падежей

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

  1. Род числительного: слова «целая» и «тысячная» относятся к женскому роду. Стандартный вызов Формат(1, "ЧП") вернет «Один», тогда как грамматически верно писать «Одна целая» или «Одна тысячная». Аналогично для двойки: «Две целых / тысячных», а не «Два».
  2. Падежные окончания: окончание зависит от последней цифры числа:
    • Оканчивается на 1 (кроме 11) — «целая», «тысячная»;
    • Оканчивается на 2, 3, 4 (кроме 12, 13, 14) — «целых», «тысячных»;
    • Оканчивается на 5–9, 0, а также 11–14 — «целых», «тысячных».

Если в задаче значения процентов кратны десяткам или сотням (например, 146.450, 10.500), окончание «тысячных» остается неизменным. Если же на входе могут появляться произвольные значения (например, 146.001), для полной корректности рекомендуется написать универсальную процедуру склонения с заменой окончаний числительных «один/два» на «одна/две» перед словами «целая/тысячная».

← На главную