К статье
Практический материал

Разработка и Конфигурация · 10 мин

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

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

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

Разработчику важно понимать три вещи: какие параметры принимает функция, как правильно передать предмет исчисления (рубли, штуки, килограммы) и как локализовать вывод, если документ должен быть на другом языке. Ниже разобраны синтаксис, практические примеры, типичные ошибки и способы проверить корректность результата.

Синтаксис функции ЧислоПрописью

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

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

Первый параметр — само число, которое нужно преобразовать. Второй — форматная строка, задающая параметры вывода через конструкцию НСтр (например, "Л=ru_RU" — язык результата, "ДП=Истина" — вывод дробной части прописью). Третий параметр — строка с четырьмя формами предмета исчисления через запятую: для единственного числа, для чисел 2–4, для чисел 5 и более, и род (м — мужской, ж — женский, с — средний).

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

Простейший пример: число словами

Минимальный вызов выглядит так:

Результат = ЧислоПрописью(125);

// Результат: "сто двадцать пять"

Для вывода с предметом исчисления передайте третий параметр:

Результат = ЧислоПрописью(125, , "рубль, рубля, рублей, м");

// Результат: "сто двадцать пять рублей"

Обратите внимание на пустой второй параметр — две запятые подряд. Это корректный синтаксис встроенного языка: пропущенный параметр означает значение по умолчанию.

bsl
СуммаПрописью = ЧислоПрописью(ИтоговаяСумма, "Л=ru_RU", "рубль, рубля, рублей, м");

Вывод суммы с копейками

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

Функция СуммаПрописьюСКопейками(Сумма)

Рубли = Цел(Сумма);

Копейки = Окр((Сумма - Рубли) * 100, 0);

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

Возврат СтрокаРубли + " " + Формат(Копейки, "ЧЦ=2; ЧВН=") + " коп.";

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

Функция Окр здесь важна: без округления при вычитании целой части из числа с плавающей точкой можно получить 29,999999 вместо 30 копеек. Всегда округляйте копейки до целого перед форматированием.

Готовые средства типовых конфигураций

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

СуммаПрописью = РаботаСКурсамиВалют.СформироватьСуммуПрописью(СуммаДокумента, ВалютаДокумента);

Эта функция сама подставляет правильные формы валюты (рубль, доллар, евро) из справочника валют и учитывает настройки локализации. Валюта передаётся как ссылка на элемент справочника, а не строкой — это важно, потому что формы названий берутся из реквизитов справочника.

В «1С:Бухгалтерии» для печатных форм сумма прописью часто уже выводится в макете. Если нужно изменить формат, ищите место формирования параметра макета в модуле менеджера документа — обычно это процедура печати, где вызывается та же функция формирования суммы прописью.

Сравнение вариантов

ЧислоПрописью()

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

РаботаСКурсамиВалют.СформироватьСуммуПрописью()

Готовая функция БСП для денежных сумм. Автоматически берёт формы валюты из справочника, но доступна только в конфигурациях на базе БСП.

Собственная функция в общем модуле

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

Мультиязычный вывод и форматная строка

Если база используется пользователями с разными языками интерфейса, форматную строку следует задавать через НСтр, чтобы платформа подставила нужный вариант по коду языка сеанса:

ФорматнаяСтрока = НСтр("ru = 'Л=ru_RU'; en = 'Л=en_US'");

Результат = ЧислоПрописью(Сумма, ФорматнаяСтрока);

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

Оформление результата в печатных формах

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

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

Строка = ВРег(Лев(Строка, 1)) + Сред(Строка, 2);

Итог = "(" + Формат(Сумма, "ЧДЦ=2") + ") " + Строка;

При выводе в табличный документ проверьте, что ячейка макета имеет достаточную ширину и включён перенос строк — длинные суммы прописью (например, миллионы с копейками) занимают две-три строки. Если перенос отключён, текст будет обрезан при печати без предупреждения.

Порядок действий
  1. 1
    Определите, где нужна сумма прописью: печатная форма, отчёт или сообщение пользователю
  2. 2
    В типовой конфигурации найдите готовую функцию (РаботаСКурсамиВалют.СформироватьСуммуПрописью), в самописной — используйте ЧислоПрописью
  3. 3
    Задайте предмет исчисления с корректными формами и родом
  4. 4
    Округлите копейки и сформируйте дробную часть цифрами
  5. 5
    Приведите первую букву к верхнему регистру и проверьте перенос строк в макете
  6. 6
    Протестируйте на пограничных значениях: 1, 2, 5, 11, 21, 101, 1000

Типичные ошибки и их последствия

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

Третья группа ошибок связана с числами 11–19: они склоняются по правилам множественного числа («одиннадцать рублей», а не «одиннадцать рубля»). Функция платформы обрабатывает их корректно, но если вы пишете собственный алгоритм склонения — обязательно проверьте этот диапазон отдельно.

Типичные ошибки
01
Неверные формы предмета исчисления — получается «5 рубля» вместо «5 рублей», документ выглядит неграмотным
02
Неправильный род — «одна рубль» или «два тысяча», ошибка сразу бросается в глаза
03
Отсутствие округления копеек — в строке появляется «99 коп.» при реальных 100 из-за погрешности двоичных чисел
04
Явное указание языка ru_RU в мультиязычной базе — для англоязычных пользователей сумма всё равно выводится по-русски
05
Отключённый перенос строк в ячейке макета — длинная сумма обрезается при печати

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

После внедрения функции проверьте работу на контрольном наборе значений. Он должен покрывать все ветви склонения: числа, оканчивающиеся на 1 (кроме 11), на 2–4 (кроме 12–14), на 5–9 и 0, а также диапазон 11–19 и круглые сотни и тысячи.

Контрольные точки

Как проверить результат

Числа 1, 21, 101, 1001 с предметом «рубль»
Норма

«один рубль», «двадцать один рубль», «сто один рубль»

Тревожный признак

«одна рубль» или «один рублей» — ошибка в роде или формах

Числа 2, 3, 4, 22, 104
Норма

«два рубля», «сто четыре рубля»

Тревожный признак

«два рублей» — неверна вторая форма в строке предмета

Числа 5, 11, 25, 111
Норма

«пять рублей», «одиннадцать рублей»

Тревожный признак

«одиннадцать рубля» — не учтён диапазон 11–19

Сумма 0,01 и 99,99
Норма

«ноль рублей 01 коп.», «девяносто девять рублей 99 коп.»

Тревожный признак

Потеря копеек или лишний разряд — ошибка округления

FAQ

Можно ли вывести прописью дробную часть словами, например «две целых пять десятых»?

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

Почему ЧислоПрописью возвращает пустую строку?

Чаще всего причина в том, что передано значение Неопределено или значение нечислового типа. Проверяйте тип перед вызовом через ТипЗнч() и приводите к числу функцией Число(), если данные приходят из строки.

Как вывести сумму прописью в запросе?

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

Работает ли функция на тонком и веб-клиенте?

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

Как добавить склонение для своей единицы измерения, например «услуга»?

Передайте её формы третьим параметром: "услуга, услуги, услуг, ж". Род указывайте корректно — для слов женского рода ж, среднего с. Проверьте результат на числах 1, 2 и 5, чтобы убедиться, что все три формы заданы верно.

Чем отличается СформироватьСуммуПрописью от ЧислоПрописью?

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

Итог

Что важно запомнить

Число прописью в 1С выводится функцией ЧислоПрописью с тремя параметрами: число, форматная строка, предмет исчисления. Для денежных сумм в типовых конфигурациях используйте РаботаСКурсамиВалют.СформироватьСуммуПрописью. Всегда проверяйте склонение на числах 1, 2, 5 и 11, округляйте копейки и не редактируйте типовые модули напрямую.