PropNum.ruPropNum
Инструменты и интеграции

Сумма прописью в 1С: функция ЧислоПрописью и формат «25 000 (Двадцать пять тысяч) рублей»

5 мин чтения

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

Разберём встроенную функцию и способы собрать из неё привычную формулировку.

Базовый синтаксис

Платформа 1С:Предприятие 8 предоставляет глобальную функцию ЧислоПрописью:

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

Минимальный рабочий вызов для рублей:

Сумма = 25000;
Результат = ЧислоПрописью(
    Сумма,
    "Л=ru_RU",
    "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2"
);
// Двадцать пять тысяч рублей 00 копеек

Функция возвращает готовую строку с учётом согласования: «одна тысяча», «две тысячи», «пять тысяч» — окончания подставляются автоматически.

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

Третий аргумент — строка из девяти элементов через запятую. Порядок жёсткий:

Что задаётПример
1Целая часть, единственное числорубль
2Целая часть, для 2–4рубля
3Целая часть, для 5–20рублей
4Род целой части: м, ж, см
5Дробная часть, единственное числокопейка
6Дробная часть, для 2–4копейки
7Дробная часть, для 5–20копеек
8Род дробной частиж
9Разрядность дробной части2

Род важен: он определяет форму числительного. Для рубля мужского рода — «одна тысяча один рубль», для копейки женского — «одна копейка». Перепутанный род даёт «один копейка».

Для другой валюты меняется только эта строка:

// Доллары США
"доллар, доллара, долларов, м, цент, цента, центов, м, 2"

// Евро
"евро, евро, евро, м, цент, цента, центов, м, 2"

// Тенге
"тенге, тенге, тенге, м, тиын, тиына, тиынов, м, 2"

Слово «евро» не склоняется, поэтому во всех трёх позициях стоит одинаковая форма.

Форматная строка

Второй аргумент управляет режимом вывода.

Л=ru_RU — язык. Обязателен, иначе используется язык сеанса, и на нерусской локали результат окажется английским.

ДП=Истина — дробную часть тоже писать прописью:

ЧислоПрописью(25000.50, "Л=ru_RU;ДП=Истина",
    "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");
// Двадцать пять тысяч рублей пятьдесят копеек

По умолчанию ДП=Ложь, и копейки выводятся цифрами — именно тот вариант, который принят в первичных документах.

НП=Истина — не выводить пропись целой части, оставив только дробную. Применяется редко.

Формат «25 000 (Двадцать пять тысяч) рублей 00 копеек»

Это самая востребованная формулировка для договоров и счетов, и одним вызовом её не получить — платформа возвращает либо чистую пропись, либо ничего. Собирается вручную:

Функция СуммаВФорматеДокумента(Сумма) Экспорт

    ЦелаяЧасть = Цел(Сумма);
    Копейки = Окр((Сумма - ЦелаяЧасть) * 100, 0);

    Пропись = ЧислоПрописью(
        ЦелаяЧасть,
        "Л=ru_RU",
        "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 0"
    );

    // ЧислоПрописью вернёт "Двадцать пять тысяч рублей" —
    // отсекаем слово "рублей", оно понадобится вне скобок
    Позиция = СтрНайти(Пропись, " рубл");
    Если Позиция > 0 Тогда
        Пропись = Лев(Пропись, Позиция - 1);
    КонецЕсли;

    Возврат СтрШаблон(
        "%1 (%2) рублей %3 копеек",
        Формат(Сумма, "ЧЦ=15; ЧДЦ=2; ЧРГ=' '"),
        Пропись,
        Формат(Копейки, "ЧЦ=2; ЧВН=")
    );

КонецФункции

Результат: 25 000,00 (Двадцать пять тысяч) рублей 00 копеек

Разберём форматирование числа. ЧЦ=15 — общее количество знаков, ЧДЦ=2 — два знака после запятой, ЧРГ=' ' — разделитель групп разрядов пробелом. Для копеек ЧВН= включает вывод ведущих нулей, чтобы получить «05», а не «5».

Заглавная буква

ЧислоПрописью возвращает результат с заглавной буквы, если сумма начинается с первого разряда. Но при сборке строки вручную регистр может потеряться. Надёжный способ:

Пропись = ВРег(Лев(Пропись, 1)) + Сред(Пропись, 2);

Заглавная буква в документах не украшение: она не даёт дописать разряд перед суммой.

Где это уже реализовано

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

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

Когда встроенной функции недостаточно

ЧислоПрописью покрывает деньги и стандартные единицы измерения. Но она не умеет:

  • склонять произвольные словосочетания по падежам
  • работать с суммой в родительном или дательном падеже («двадцати пяти тысяч рублей»)
  • выдавать сумму прописью для валют с нестандартной разрядностью

Для таких задач подключают внешний сервис. У PropNum есть HTTP API, вызываемый из 1С через HTTPСоединение, — он возвращает пропись с указанием падежа и режима НДС.

→ Документация API на propnum.ru

Частые ошибки

Пропущен параметр языка. Без Л=ru_RU на сервере с другой локалью результат вернётся на английском.

Перепутан род. «Копейка» женского рода, «рубль» мужского. Ошибка даёт «один копейка».

Округление копеек через Цел. Цел((Сумма - ЦелаяЧасть) * 100) из-за представления дробных чисел иногда даёт 49 вместо 50. Используйте Окр с явным указанием разрядности.

Копейки без ведущего нуля. «5 копеек» вместо «05 копеек» — визуально допускает дописку.

Разрядность 0 при живых копейках. Девятый параметр отвечает за дробную часть; поставив 0, вы потеряете копейки в выводе.

Проверьте результат

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

→ Конвертер суммы прописью на propnum.ru

Частые вопросы

Работает ли ЧислоПрописью в 1С:Предприятие 8.3 в режиме тонкого клиента?
Да, это глобальная функция платформы, доступная и на клиенте, и на сервере.
Как получить пропись в родительном падеже?
Встроенная функция падежи не поддерживает — она всегда возвращает именительный. Для других падежей нужен внешний сервис или собственная реализация.
Можно ли использовать функцию для количества товара, а не денег?
Да. Замените параметры предмета исчисления: «штука, штуки, штук, ж, , , , , 0» — дробная часть при нулевой разрядности не выводится.

Попробуйте инструменты PropNum

Похожие статьи