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

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

Как в 1С вывести сумму прописью: функции, код и настройка

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

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

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

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

Какая функция решает задачу: обзор вариантов

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

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

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

ЧислоПрописью() — функция платформы

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

СформироватьСуммуПрописью из общего модуля

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

Собственный алгоритм склонения

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

Функция ЧислоПрописью: синтаксис и параметры

Синтаксис вызова: ЧислоПрописью(Число, ФорматнаяСтрока, ПараметрыПредметаИсчисления). Первый параметр — число, которое нужно преобразовать. Второй — строка параметров, где ключевые значения: Л=ru_RU (русский язык), ДП=Истина (выводить дробную часть прописью) или ДП=Ложь (дробную часть числом). Третий параметр — перечисление предмета исчисления через запятую: наименование в единственном числе, во множественном числе и род («рубль, рубля, рублей, копейка, копейки, копеек, м»).

Пример для валюты:

СуммаПрописью = ЧислоПрописью(1234.56, "Л=ru_RU; ДП=Ложь",

"рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");

// Результат: "Одна тысяча двести тридцать четыре рубля 56 копеек"

Обратите внимание на последний числовой параметр в строке предмета исчисления — это разрядность дробной части. Для копеек указывается 2. Если дробная часть не нужна вовсе (например, количество), параметр предмета исчисления можно упростить или опустить.

Как вывести сумму прописью в типовой конфигурации

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

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

ДокументОбъект.СуммаДокумента, ДокументОбъект.Валюта);

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

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

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

Передача суммы прописью в печатную форму

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

ТекстСуммы = СтрШаблон("%1 (%2)",

Формат(СуммаДокумента, "ЧЦ=15; ЧДЦ=2; ЧРД= "),

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

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

bsl
СуммаПрописью = РаботаСКурсамиВалют.СформироватьСуммуПрописью(Сумма, Валюта);
СуммаПрописью = НРег(Лев(СуммаПрописью, 1)) + Сред(СуммаПрописью, 2);

Частые ошибки и их последствия

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

Вторая типичная проблема — округление. Если сумма документа хранится с большей разрядностью, чем две цифры после запятой (например, результат расчёта с НДС), пропись может не совпасть с цифровым представлением в печатной форме. Округляйте оба значения одинаково до вывода.

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

Типичные ошибки
01
Передача пустой валюты — функция возвращает пустую строку или ошибку, в печатной форме пустое место
02
Разное округление цифровой суммы и суммы прописью — расхождение в одном документе, претензии контрагентов
03
Собственный алгоритм склонения — ошибки на числах 11–19 и крупных разрядах
04
Игнорирование параметра ДП — копейки выводятся прописью там, где по форме должны быть цифрами
05
Изменение типового общего модуля вместо расширения — потеря изменений при обновлении конфигурации

Проверка результата и ограничения

Проверяйте сумму прописью минимум на четырёх контрольных примерах: сумма с копейками (например, 1234,56), круглая сумма без копеек, сумма с числом 11–14 в разряде (например, 111 000), и крупная сумма с миллионами. Эти случаи покрывают основные ветки склонения.

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

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

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

Сумма с копейками, например 1 234,56
Норма

«Одна тысяча двести тридцать четыре рубля 56 копеек»

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

Копейки прописью при ДП=Ложь или неверное склонение «рубля»

Числа 11–14 в разряде, например 112 000
Норма

«Сто двенадцать тысяч рублей»

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

«Сто двенацать тысяч» или «двенадцать тысяча» — признак самописного алгоритма

Круглая сумма без копеек
Норма

«Пять тысяч рублей 00 копеек» или без копеек — по требованиям формы

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

Пропущены копейки там, где форма их требует

Цифровая сумма и пропись в одном документе
Норма

Значения совпадают с точностью до копеек

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

Расхождение из-за разного округления

Безопасное внедрение: расширение вместо изменения конфигурации

Если нужно изменить вывод суммы прописью в типовой печатной форме, не правьте типовой общий модуль напрямую — при обновлении конфигурации изменения будут потеряны или заблокируют автообновление. Используйте расширение конфигурации: добавьте в него собственный модуль формирования печатной формы или переопределите вызов через аннотацию &Вместо / &После.

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

Итог

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

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

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

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

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

Можно ли вывести сумму прописью на другом языке?

Да, параметр Л= функции ЧислоПрописью задаёт локализацию, например Л=uk_UA для украинского или Л=en_US для английского. Набор доступных языков зависит от поставки платформы, параметры предмета исчисления для каждого языка нужно задавать отдельно.

Почему функция возвращает пустую строку?

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

Как сделать первую букву суммы прописью строчной?

Обработайте результат кодом: НРег(Лев(СуммаПрописью, 1)) + Сред(СуммаПрописью, 2). Это нужно, когда пропись вставляется внутрь предложения или в скобки после цифровой суммы.

Работает ли ЧислоПрописью во внешних обработках и расширениях?

Да, это функция платформы, она доступна в любом контексте сервера и толстого клиента. А вот типовые функции общих модулей (СформироватьСуммуПрописью) доступны только внутри конфигурации, где эти модули существуют.

Что делать, если сумма прописью не совпадает с цифровой суммой в печатной форме?

Проверьте округление: оба значения должны округляться одинаково до двух знаков до передачи в макет. Также убедитесь, что в макет передаётся одна и та же сумма документа, а не разные реквизиты (например, сумма с НДС и без НДС).