Разработка и Конфигурация · 10 мин
Как в 1С вывести число прописью: функция ЧислоПрописью и практические примеры
Как в 1С вывести число прописью: функция ЧислоПрописью, параметры, примеры кода, работа с валютой, типичные ошибки и проверка результата.
Вывод суммы прописью — стандартная задача в 1С: она встречается в счетах, договорах, кассовых ордерах, накладных и актах. Во встроенном языке платформы для этого предусмотрена функция ЧислоПрописью(), которая преобразует число в текстовое представление с учётом русской грамматики: падежей, родов и единиц измерения. В типовых конфигурациях дополнительно существуют общие модули вроде РаботаСКурсамиВалют и ОбщегоНазначения, где есть готовые функции формирования суммы прописью с валютой.
Разработчику важно понимать три вещи: какие параметры принимает функция, как правильно передать предмет исчисления (рубли, штуки, килограммы) и как локализовать вывод, если документ должен быть на другом языке. Ниже разобраны синтаксис, практические примеры, типичные ошибки и способы проверить корректность результата.
Синтаксис функции ЧислоПрописью
Функция встроенного языка имеет три параметра, и только первый обязателен:
ЧислоПрописью(Число, ФорматнаяСтрока, ПредметИсчисления)
Первый параметр — само число, которое нужно преобразовать. Второй — форматная строка, задающая параметры вывода через конструкцию НСтр (например, "Л=ru_RU" — язык результата, "ДП=Истина" — вывод дробной части прописью). Третий параметр — строка с четырьмя формами предмета исчисления через запятую: для единственного числа, для чисел 2–4, для чисел 5 и более, и род (м — мужской, ж — женский, с — средний).
Если предмет исчисления не указан, функция вернёт только само число словами, без единиц измерения. Форматная строка при этом тоже может быть опущена — тогда используется язык по умолчанию текущего сеанса.
Простейший пример: число словами
Минимальный вызов выглядит так:
Результат = ЧислоПрописью(125);
// Результат: "сто двадцать пять"
Для вывода с предметом исчисления передайте третий параметр:
Результат = ЧислоПрописью(125, , "рубль, рубля, рублей, м");
// Результат: "сто двадцать пять рублей"
Обратите внимание на пустой второй параметр — две запятые подряд. Это корректный синтаксис встроенного языка: пропущенный параметр означает значение по умолчанию.
СуммаПрописью = ЧислоПрописью(ИтоговаяСумма, "Л=ru_RU", "рубль, рубля, рублей, м");Вывод суммы с копейками
Денежные суммы почти всегда требуют дробной части. Параметр ДП=Истина в форматной строке включает вывод дробной части прописью, но на практике для денег чаще формируют строку вручную: целую часть — прописью, копейки — цифрами. Это соответствует принятому оформлению платёжных и бухгалтерских документов.
Функция СуммаПрописьюСКопейками(Сумма)
Рубли = Цел(Сумма);
Копейки = Окр((Сумма - Рубли) * 100, 0);
СтрокаРубли = ЧислоПрописью(Рубли, "Л=ru_RU", "рубль, рубля, рублей, м");
Возврат СтрокаРубли + " " + Формат(Копейки, "ЧЦ=2; ЧВН=") + " коп.";
КонецФункции
Функция Окр здесь важна: без округления при вычитании целой части из числа с плавающей точкой можно получить 29,999999 вместо 30 копеек. Всегда округляйте копейки до целого перед форматированием.
Готовые средства типовых конфигураций
В конфигурациях на Библиотеке стандартных подсистем (БСП) — «Управление торговлей», «Бухгалтерия предприятия», «ERP» — писать собственную функцию обычно не нужно. Используйте готовый программный интерфейс:
СуммаПрописью = РаботаСКурсамиВалют.СформироватьСуммуПрописью(СуммаДокумента, ВалютаДокумента);
Эта функция сама подставляет правильные формы валюты (рубль, доллар, евро) из справочника валют и учитывает настройки локализации. Валюта передаётся как ссылка на элемент справочника, а не строкой — это важно, потому что формы названий берутся из реквизитов справочника.
В «1С:Бухгалтерии» для печатных форм сумма прописью часто уже выводится в макете. Если нужно изменить формат, ищите место формирования параметра макета в модуле менеджера документа — обычно это процедура печати, где вызывается та же функция формирования суммы прописью.
Сравнение вариантов
Встроенная функция платформы. Подходит для произвольных чисел и предметов исчисления, работает в любой конфигурации, включая самописные. Требует вручную задавать формы слов.
Готовая функция БСП для денежных сумм. Автоматически берёт формы валюты из справочника, но доступна только в конфигурациях на базе БСП.
Оправдана, когда нужен нестандартный формат: например, сумма прописью заглавными буквами, в скобках после цифр или с особыми требованиями заказчика к оформлению.
Мультиязычный вывод и форматная строка
Если база используется пользователями с разными языками интерфейса, форматную строку следует задавать через НСтр, чтобы платформа подставила нужный вариант по коду языка сеанса:
ФорматнаяСтрока = НСтр("ru = 'Л=ru_RU'; en = 'Л=en_US'");
Результат = ЧислоПрописью(Сумма, ФорматнаяСтрока);
Список поддерживаемых языков зависит от версии платформы и установленных языковых пакетов. Перед использованием экзотического языка проверьте его доступность тестовым вызовом — при отсутствии языка функция может вернуть результат на языке по умолчанию без какого-либо сообщения об ошибке.
Оформление результата в печатных формах
В печатных документах сумма прописью традиционно начинается с заглавной буквы, а числовое значение указывается рядом в скобках. Для этого используют функции работы со строками:
Строка = ЧислоПрописью(Сумма, "Л=ru_RU", "рубль, рубля, рублей, м");
Строка = ВРег(Лев(Строка, 1)) + Сред(Строка, 2);
Итог = "(" + Формат(Сумма, "ЧДЦ=2") + ") " + Строка;
При выводе в табличный документ проверьте, что ячейка макета имеет достаточную ширину и включён перенос строк — длинные суммы прописью (например, миллионы с копейками) занимают две-три строки. Если перенос отключён, текст будет обрезан при печати без предупреждения.
- 1Определите, где нужна сумма прописью: печатная форма, отчёт или сообщение пользователю
- 2В типовой конфигурации найдите готовую функцию (РаботаСКурсамиВалют.СформироватьСуммуПрописью), в самописной — используйте ЧислоПрописью
- 3Задайте предмет исчисления с корректными формами и родом
- 4Округлите копейки и сформируйте дробную часть цифрами
- 5Приведите первую букву к верхнему регистру и проверьте перенос строк в макете
- 6Протестируйте на пограничных значениях: 1, 2, 5, 11, 21, 101, 1000
Типичные ошибки и их последствия
Самая частая ошибка — неверные формы в предмете исчисления. Строка "рубль, рубля, рубля, м" даст «пять рубля» вместо «пять рублей», и такой документ бухгалтерия контрагента может не принять. Вторая распространённая проблема — неправильный род: «одна рубль» вместо «один рубль» возникает, если указать ж вместо м.
Третья группа ошибок связана с числами 11–19: они склоняются по правилам множественного числа («одиннадцать рублей», а не «одиннадцать рубля»). Функция платформы обрабатывает их корректно, но если вы пишете собственный алгоритм склонения — обязательно проверьте этот диапазон отдельно.
Проверка результата
После внедрения функции проверьте работу на контрольном наборе значений. Он должен покрывать все ветви склонения: числа, оканчивающиеся на 1 (кроме 11), на 2–4 (кроме 12–14), на 5–9 и 0, а также диапазон 11–19 и круглые сотни и тысячи.
Как проверить результат
«один рубль», «двадцать один рубль», «сто один рубль»
«одна рубль» или «один рублей» — ошибка в роде или формах
«два рубля», «сто четыре рубля»
«два рублей» — неверна вторая форма в строке предмета
«пять рублей», «одиннадцать рублей»
«одиннадцать рубля» — не учтён диапазон 11–19
«ноль рублей 01 коп.», «девяносто девять рублей 99 коп.»
Потеря копеек или лишний разряд — ошибка округления
FAQ
Можно ли вывести прописью дробную часть словами, например «две целых пять десятых»?
Да. Укажите в форматной строке параметр ДП=Истина, и функция выведет дробную часть прописью с указанием разряда. Для денег это обычно не используют — копейки принято писать цифрами, — но для количеств в технических документах такой формат уместен.
Почему ЧислоПрописью возвращает пустую строку?
Чаще всего причина в том, что передано значение Неопределено или значение нечислового типа. Проверяйте тип перед вызовом через ТипЗнч() и приводите к числу функцией Число(), если данные приходят из строки.
Как вывести сумму прописью в запросе?
Напрямую в языке запросов функции преобразования числа в строку прописью нет. Сумма прописью формируется уже после выполнения запроса — при обходе выборки, перед помещением значения в параметр макета печатной формы.
Работает ли функция на тонком и веб-клиенте?
Да, ЧислоПрописью() доступна на всех клиентах и на сервере. Однако формирование печатных форм принято выполнять в серверном контексте, чтобы не передавать на клиент лишние данные и не зависеть от локальных настроек рабочего места.
Как добавить склонение для своей единицы измерения, например «услуга»?
Передайте её формы третьим параметром: "услуга, услуги, услуг, ж". Род указывайте корректно — для слов женского рода ж, среднего с. Проверьте результат на числах 1, 2 и 5, чтобы убедиться, что все три формы заданы верно.
Чем отличается СформироватьСуммуПрописью от ЧислоПрописью?
Первая — функция из Библиотеки стандартных подсистем, которая работает со ссылкой на справочник валют и сама подставляет названия валюты и дробной части. Вторая — универсальная функция платформы, требующая ручного указания всех форм слов. В типовых конфигурациях предпочтительнее первая.
Что важно запомнить
Число прописью в 1С выводится функцией ЧислоПрописью с тремя параметрами: число, форматная строка, предмет исчисления. Для денежных сумм в типовых конфигурациях используйте РаботаСКурсамиВалют.СформироватьСуммуПрописью. Всегда проверяйте склонение на числах 1, 2, 5 и 11, округляйте копейки и не редактируйте типовые модули напрямую.