Как в 1С вывести дробную часть числа прописью в функции ЧислоПрописью?

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

При разработке печатных форм или формировании текстовых сообщений в системе 1С:Предприятие часто возникает задача преобразования числовых данных в текстовое представление. Обычный вызов функции ЧислоПрописью по умолчанию выводит дробную часть цифрами. Например, число 365.12 может выглядеть как "Триста шестьдесят пять целых 12 сотых". Однако во многих юридических или финансовых документах требуется, чтобы дробная часть также была написана словами: "Триста шестьдесят пять целых двенадцать сотых".

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

Базовое решение задачи: параметр ДП

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

Ключевым параметром здесь является ДП (Дробная Прописью). Если в форматной строке указать значение ДП = Истина, система автоматически преобразует цифры после запятой в текст. Рассмотрим простейший пример реализации:


// Пример вывода числа с дробной частью прописью
ЧислоДляПеревода = 365.000;
ФорматнаяСтрока = "ДП = Истина";
Результат = ЧислоПрописью(ЧислоДляПеревода, ФорматнаяСтрока);
// Результат: "Триста шестьдесят пять целых ноль тысячных"

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

Связь с точностью числа и параметром ЧДЦ

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

Для этого в форматной строке используется параметр ЧДЦ (Число Десятичных Знаков). Давайте проанализируем ситуацию на примере:


// Если мы хотим всегда видеть сотые доли прописью
Число = 10;
ФорматнаяСтрока = "ЧДЦ = 2; ДП = Истина";
Результат = ЧислоПрописью(Число, ФорматнаяСтрока);
// Результат: "Десять целых ноль сотых"

// Если мы изменим точность на 3 знака
ФорматнаяСтрока = "ЧДЦ = 3; ДП = Истина";
Результат = ЧислоПрописью(Число, ФорматнаяСтрока);
// Результат: "Десять целых ноль тысячных"

Таким образом, комбинируя ЧДЦ и ДП, мы получаем полный контроль над тем, как будет именоваться разряд дробной части.

Согласование рода и предмет исчисления

При использовании ДП = Истина система автоматически склоняет дробную часть в женском роде, так как подразумеваются «части» (десятая, сотая, тысячная). Однако в 1С есть возможность задать собственные наименования для целых и дробных частей через третий параметр функции — ПараметрыПредметаИсчисления.

Рассмотрим ситуацию, когда нам нужно вывести не просто "целые", а, например, "килограммы" и "граммы", причем граммы тоже должны быть прописью. Выясним, как это сделать правильно:


// Параметры предмета исчисления задаются строкой с определенной структурой:
// "ЦелаяЧасть1, ЦелаяЧасть2, ЦелаяЧасть5, РодЦелой, ДробнаяЧасть1, ДробнаяЧасть2, ДробнаяЧасть5, РодДробной, КоличествоРазрядов"

ПараметрыОбъекта = "килограмм, килограмма, килограммов, м, грамм, грамма, граммов, м, 3";
ЧислоВеса = 10.005;
Результат = ЧислоПрописью(ЧислоВеса, "ДП = Истина", ПараметрыОбъекта);
// Результат: "Десять килограммов пять граммов"

Обратите внимание, что в данном случае слово "целых" или "сотых" исчезает, так как мы явно указали названия единиц измерения. Это крайне полезно для складского учета или спецификаций товаров.

Особенности обработки нулевой дробной части

Иногда бизнес-логика требует разного поведения в зависимости от наличия дробной части. Например: если есть копейки или доли — пишем их словами, если число целое — вообще не пишем дробную часть.

Проанализируем программный способ решения такой задачи. Стандартная форматная строка не умеет "скрывать" нулевую дробную часть, если установлен флаг ДП = Истина. В этом случае нам поможет небольшое условие в коде:


Функция ПолучитьЧислоПрописьюСУсловием(ЗначениеЧисла)
    
    // Проверяем, есть ли остаток от деления на 1
    ЕстьДробнаяЧасть = (ЗначениеЧисла % 1 <> 0);
    
    Если ЕстьДробнаяЧасть Тогда
        // Выводим с дробной частью прописью
        Возврат ЧислоПрописью(ЗначениеЧисла, "ЧДЦ=2; ДП=Истина");
    Иначе
        // Выводим только целую часть
        Возврат ЧислоПрописью(ЗначениеЧисла, "ЧДЦ=0");
    КонецЕсли;
    
КонецФункции

Валютные суммы: Рубли и копейки

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

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


Сумма = 125.05;

// Получаем рубли (целую часть)
РублиПрописью = ЧислоПрописью(Цел(Сумма), , "рубль, рубля, рублей, м, , , , , 0");

// Получаем копейки (дробную часть)
КопейкиЧислом = (Сумма - Цел(Сумма)) * 100;
КопейкиПрописью = ЧислоПрописью(КопейкиЧислом, , "копейка, копейки, копеек, ж, , , , , 0");

ИтоговыйТекст = РублиПрописью + " " + КопейкиПрописью;
// Результат: "Сто двадцать пять рублей пять копеек"

Этот метод дает максимальную гибкость, хотя и требует чуть больше кода, чем использование одного параметра ДП.

Резюме по параметрам форматной строки

Подведем итог по ключевым параметрам, которые мы рассмотрели:

  1. ДП (Дробная Прописью) — основной флаг. Принимает значения Истина или Ложь (также можно использовать Yes/No).
  2. ЧДЦ (Число Десятичных Знаков) — определяет разрядность (десятые, сотые и т.д.). Важно для корректного именования дробной доли.
  3. Л (Локализация) — позволяет выводить текст на разных языках (например, Л = "en_US" для английского). При этом ДП = Истина продолжит работать, переводя дробную часть на соответствующий язык.
  4. НЗ (Не Заполнять) — позволяет управлять выводом при нулевом значении.

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

← На главную