Разработка и Конфигурация · 11 мин
Как в 1С вывести сумму прописью: функции, код и настройка
Как вывести сумму прописью в 1С: функции ЧислоПрописью и СформироватьСуммуПрописью, параметры, примеры кода для печатных форм и типичные ошибки.
Сумма прописью — обязательный реквизит счетов, актов, доверенностей и договоров. В 1С задача решается штатными средствами: в типовых конфигурациях есть готовые функции, а на уровне платформы существует встроенная функция ЧислоПрописью(), которая преобразует число в текст с учётом падежей и родов. Ручная «самодельная» склейка строк из десятков условий не нужна — и почти всегда является ошибкой.
Выбор пути зависит от контекста. Если вы работаете в типовой конфигурации (Бухгалтерия, Управление торговлей, ERP), сумма прописью уже выводится в печатных формах, и вам нужно лишь понять, где это настраивается или как переиспользовать готовую функцию. Если вы разрабатываете собственную печатную форму или расширение — потребуется вызвать функцию в модуле и передать результат в макет.
Ниже разобраны оба подхода: платформенная функция ЧислоПрописью() и функции общих модулей типовых конфигураций (РаботаСКурсамиВалют.СформироватьСуммуПрописью() и аналоги), а также передача результата в табличный документ, типичные ошибки и способы проверки результата.
Какая функция решает задачу: обзор вариантов
В платформе 1С:Предприятие есть встроенная функция ЧислоПрописью(). Она принимает число, строку параметров локализации и, опционально, строку с параметрами предмета исчисления (валюта, единицы измерения). Функция корректно склоняет числительные и подставляет «рубль/рубля/рублей», «копейка/копеек» и другие формы.
В типовых конфигурациях поверх платформенной функции построены обёртки. В конфигурациях на БСП (Библиотека стандартных подсистем) используется РаботаСКурсамиВалют.СформироватьСуммуПрописью(Сумма, Валюта) — она сама подставляет параметры валюты из справочника. В старых конфигурациях встречается ОбщегоНазначения.СформироватьСуммуПрописью() или функции модуля РаботаСДокументами.
Сравнение вариантов
Подходит для самописных конфигураций, расширений и внешних обработок. Требует вручную задать параметры валюты и локализации.
Подходит для типовых конфигураций на БСП. Валюта берётся из справочника, параметры подставляются автоматически. Не работает вне конфигурации с этим модулем.
Не рекомендуется: высокий риск ошибок в падежах и родах, трудоёмкая поддержка. Оправдано только для экзотических форматов, не покрываемых платформой.
Функция ЧислоПрописью: синтаксис и параметры
Синтаксис вызова: ЧислоПрописью(Число, ФорматнаяСтрока, ПараметрыПредметаИсчисления). Первый параметр — число, которое нужно преобразовать. Второй — строка параметров, где ключевые значения: Л=ru_RU (русский язык), ДП=Истина (выводить дробную часть прописью) или ДП=Ложь (дробную часть числом). Третий параметр — перечисление предмета исчисления через запятую: наименование в единственном числе, во множественном числе и род («рубль, рубля, рублей, копейка, копейки, копеек, м»).
Пример для валюты:
СуммаПрописью = ЧислоПрописью(1234.56, "Л=ru_RU; ДП=Ложь",
"рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");
// Результат: "Одна тысяча двести тридцать четыре рубля 56 копеек"
Обратите внимание на последний числовой параметр в строке предмета исчисления — это разрядность дробной части. Для копеек указывается 2. Если дробная часть не нужна вовсе (например, количество), параметр предмета исчисления можно упростить или опустить.
Как вывести сумму прописью в типовой конфигурации
В конфигурациях на базе БСП (Бухгалтерия предприятия, Управление торговлей, ERP, Зарплата и управление персоналом) сумма прописью формируется через общий модуль. Типовой вызов в модуле менеджера документа или в модуле формирования печатной формы выглядит так:
СуммаПрописью = РаботаСКурсамиВалют.СформироватьСуммуПрописью(
ДокументОбъект.СуммаДокумента, ДокументОбъект.Валюта);
Функция принимает сумму и ссылку на элемент справочника «Валюты». Параметры прописи (наименование, род, разрядность) хранятся в самом справочнике валют, поэтому для корректной работы валюта должна быть заполнена в документе, а в её карточке — корректно заданы параметры прописи. Для рубля они заполнены при первоначальном заполнении базы.
Если в вашей версии конфигурации модуль называется иначе, найдите нужную функцию поиском по конфигуратору: откройте глобальный поиск (Ctrl+Shift+F) и ищите строку «СформироватьСуммуПрописью» или «СуммаПрописью» по всем модулям — так вы увидите и саму функцию, и примеры её вызова в типовых печатных формах.
- 1Откройте конфигуратор и найдите глобальным поиском функцию СформироватьСуммуПрописью
- 2Определите общий модуль, в котором она расположена (обычно РаботаСКурсамиВалют)
- 3В своей печатной форме вызовите функцию, передав сумму документа и валюту
- 4Передайте результат в параметр макета: Область.Параметры.СуммаПрописью = СуммаПрописью
- 5Проверьте печать на документе с копейками и с крупной суммой
Передача суммы прописью в печатную форму
Стандартный сценарий: в макете табличного документа создаётся параметр, например СуммаПрописью, а в модуле формирования печатной формы ему присваивается вычисленное значение. Для договоров и доверенностей часто требуется формат «сумма цифрами (прописью)», который собирается конкатенацией:
ТекстСуммы = СтрШаблон("%1 (%2)",
Формат(СуммаДокумента, "ЧЦ=15; ЧДЦ=2; ЧРД= "),
РаботаСКурсамиВалют.СформироватьСуммуПрописью(СуммаДокумента, Валюта));
Обратите внимание: Формат() с разделителем разрядов даёт читаемое представление цифровой части, а сумма прописью идёт в скобках. Первая буква прописи по умолчанию заглавная; если по шаблону документа внутри скобок нужна строчная, приведите первый символ к нижнему регистру кодом.
СуммаПрописью = РаботаСКурсамиВалют.СформироватьСуммуПрописью(Сумма, Валюта);
СуммаПрописью = НРег(Лев(СуммаПрописью, 1)) + Сред(СуммаПрописью, 2);Частые ошибки и их последствия
Самая распространённая ошибка — передача в функцию суммы с неверным типом или незаполненной валюты. Если валюта не указана, типовая функция либо вернёт пустую строку, либо вызовет исключение — в зависимости от реализации. Перед вызовом проверяйте заполненность реквизита валюты документа.
Вторая типичная проблема — округление. Если сумма документа хранится с большей разрядностью, чем две цифры после запятой (например, результат расчёта с НДС), пропись может не совпасть с цифровым представлением в печатной форме. Округляйте оба значения одинаково до вывода.
Третья группа ошибок — самописные алгоритмы. Они ломаются на числах 11–19, на тысячах и миллионах женского/мужского рода, на нулевых суммах. Даже если «всё работало на тестовых примерах», в эксплуатации обязательно встретится сумма, которую алгоритм склонит неправильно, а документ с ошибкой уйдёт контрагенту.
Проверка результата и ограничения
Проверяйте сумму прописью минимум на четырёх контрольных примерах: сумма с копейками (например, 1234,56), круглая сумма без копеек, сумма с числом 11–14 в разряде (например, 111 000), и крупная сумма с миллионами. Эти случаи покрывают основные ветки склонения.
Ограничение платформенной функции — она работает с числами в диапазоне, достаточном для любых хозяйственных документов, но для экзотических требований (пропись на нескольких языках одновременно, нестандартные единицы исчисления) потребуется отдельная обработка результата. Локализация задаётся параметром Л=, доступные языки зависят от поставки платформы.
Как проверить результат
«Одна тысяча двести тридцать четыре рубля 56 копеек»
Копейки прописью при ДП=Ложь или неверное склонение «рубля»
«Сто двенадцать тысяч рублей»
«Сто двенацать тысяч» или «двенадцать тысяча» — признак самописного алгоритма
«Пять тысяч рублей 00 копеек» или без копеек — по требованиям формы
Пропущены копейки там, где форма их требует
Значения совпадают с точностью до копеек
Расхождение из-за разного округления
Безопасное внедрение: расширение вместо изменения конфигурации
Если нужно изменить вывод суммы прописью в типовой печатной форме, не правьте типовой общий модуль напрямую — при обновлении конфигурации изменения будут потеряны или заблокируют автообновление. Используйте расширение конфигурации: добавьте в него собственный модуль формирования печатной формы или переопределите вызов через аннотацию &Вместо / &После.
Перед изменениями сделайте копию информационной базы и проверьте печатную форму на копии. Печатные формы — юридически значимые документы: ошибка в сумме прописью в счёте или акте может привести к спорам с контрагентами и вопросам при проверках.
Что важно запомнить
Для суммы прописью в 1С используйте платформенную ЧислоПрописью() или типовую СформироватьСуммуПрописью общего модуля. Проверяйте валюту, округление и четыре контрольных примера. Доработки делайте через расширение, самописный алгоритм склонения не пишите.
Частые вопросы
Как вывести сумму прописью без копеек?
Вызовите ЧислоПрописью с параметром ДП=Ложь и округлите сумму до целых перед вызовом, либо в типовой функции используйте валюту с нулевой разрядностью дробной части. Альтернатива — отсечь подстроку с копейками из результата, но это менее надёжно.
Можно ли вывести сумму прописью на другом языке?
Да, параметр Л= функции ЧислоПрописью задаёт локализацию, например Л=uk_UA для украинского или Л=en_US для английского. Набор доступных языков зависит от поставки платформы, параметры предмета исчисления для каждого языка нужно задавать отдельно.
Почему функция возвращает пустую строку?
Чаще всего причина в незаполненной валюте, переданной в типовую функцию, или в том, что у валюты в справочнике не заполнены параметры прописи. Проверьте реквизиты документа и карточку валюты. Также убедитесь, что сумма имеет числовой тип, а не строку.
Как сделать первую букву суммы прописью строчной?
Обработайте результат кодом: НРег(Лев(СуммаПрописью, 1)) + Сред(СуммаПрописью, 2). Это нужно, когда пропись вставляется внутрь предложения или в скобки после цифровой суммы.
Работает ли ЧислоПрописью во внешних обработках и расширениях?
Да, это функция платформы, она доступна в любом контексте сервера и толстого клиента. А вот типовые функции общих модулей (СформироватьСуммуПрописью) доступны только внутри конфигурации, где эти модули существуют.
Что делать, если сумма прописью не совпадает с цифровой суммой в печатной форме?
Проверьте округление: оба значения должны округляться одинаково до двух знаков до передачи в макет. Также убедитесь, что в макет передаётся одна и та же сумма документа, а не разные реквизиты (например, сумма с НДС и без НДС).