Разработка и Конфигурация · 9 мин
1С: как получить сумму прописью в документах и отчётах
Как в 1С вывести сумму прописью: типовые функции конфигурации, РаботаСКурсамиВалют.СформироватьСуммуПрописью, написание собственной функции и типичные ошибки.
Сумма прописью — обязательный элемент счетов, актов, накладных, доверенностей и платёжных документов. В типовых конфигурациях 1С (Бухгалтерия предприятия, Управление торговлей, УНФ, ERP) эта задача уже решена: в составе библиотеки стандартных подсистем есть готовые функции, которые преобразуют число в строку вида «Одна тысяча двести рублей 00 копеек».
Если вы работаете в типовой конфигурации, в большинстве случаев достаточно вызвать одну функцию из общего модуля. Если конфигурация самописная или сильно доработанная, функцию придётся написать самостоятельно либо подключить внешнюю обработку. Ниже разобраны все три сценария с примерами кода.
Где в 1С хранится функция суммы прописью
В конфигурациях, построенных на Библиотеке стандартных подсистем (БСП), преобразование числа в строку вынесено в общие модули. В зависимости от версии БСП и конфигурации функция может находиться в разных местах, но логика вызова одинакова: передаёте число и валюту, получаете готовую строку.
Найти нужный модуль проще всего через глобальный поиск по конфигуратору: откройте конфигурацию, нажмите Ctrl+Shift+F и выполните поиск по строке «СформироватьСуммуПрописью» или «ЧислоПрописью». Поиск покажет и саму функцию, и примеры её вызова в печатных формах — это удобный способ посмотреть, как разработчики конфигурации используют её сами.
Вызов типовой функции в конфигурациях на БСП
Стандартный вызов в современных версиях Бухгалтерии предприятия, ERP и Управления торговлей выглядит так:
СуммаПрописью = РаботаСКурсамиВалют.СформироватьСуммуПрописью(СуммаДокумента, ВалютаДокумента);
Первый параметр — числовое значение суммы, второй — ссылка на элемент справочника «Валюты». Функция сама подставит правильные формы слов «рубль/рубля/рублей» и «копейка», а для валютных документов — «доллар США», «евро» и их центы. Данные о наименованиях валют и дробных частях берутся из параметров валюты, которые заполняются при загрузке классификатора валют.
В более старых релизах встречается вариант через модуль ОбщегоНазначения:
СуммаПрописью = ОбщегоНазначения.СформироватьСуммуПрописью(СуммаДокумента, ВалютаДокумента);
Если при вводе имени модуля контекстная подсказка его не находит, значит, в вашей версии конфигурации функция расположена иначе — уточните через глобальный поиск, как описано выше.
Вывод суммы прописью в печатной форме
Чаще всего сумма прописью нужна в макете печатной формы. Порядок действий при доработке типовой печатной формы или создании внешней:
- 1Откройте модуль менеджера документа или модуль внешней печатной формы, где формируется табличный документ.
- 2Найдите область макета, куда выводится итоговая сумма, и добавьте в макет параметр, например СуммаПрописью.
- 3В коде вычислите строку: РаботаСКурсамиВалют.СформироватьСуммуПрописью(ИтоговаяСумма, ВалютаДокумента).
- 4Присвойте результат параметру области: ОбластьМакета.Параметры.СуммаПрописью = СуммаПрописью.
- 5Выведите область в табличный документ и проверьте печать на тестовом документе с копейками и без них.
Если требуется формат «Сумма прописью: Одна тысяча рублей 00 копеек» с заглавной буквы в начале, оберните результат: возьмите первый символ строки в верхнем регистре и склейте с остатком строки. Типовая функция обычно возвращает строку уже с заглавной буквы, но при собственной обработке это стоит проверить.
Вывод в запросе и СКД
В запросе напрямую вызвать функцию общего модуля нельзя. Поэтому в отчётах на СКД сумму прописью формируют либо в вычисляемом поле с вызовом функции из общего модуля в событии «ПриКомпоновкеРезультата», либо добавляют колонку в набор данных программно. Практичный вариант — вычислить строку при формировании печатной формы, а не внутри запроса.
Собственная функция суммы прописью
В самописной конфигурации без БСП функцию придётся написать самостоятельно. Алгоритм стандартный: число разбивается на триады (миллиарды, миллионы, тысячи, единицы), каждая триада преобразуется в слова с учётом рода числительного (тысяча — женский род: «одна тысяча», «две тысячи»), затем добавляется валюта и копейки.
Упрощённый каркас функции выглядит так:
Функция СуммаПрописью(Число) Экспорт
// Разбиваем на целую и дробную части
Рубли = Цел(Число);
Копейки = Окр((Число - Рубли) * 100, 0);
// Преобразуем триады через массивы числительных
// 1-19, десятки, сотни — отдельными массивами строк
// Склонение выбираем по последним цифрам триады
Результат = ТриадыВСтроку(Рубли) + " "
+ Склонение(Рубли, "рубль", "рубля", "рублей") + " "
+ Формат(Копейки, "ЧЦ=2; ЧВН=") + " "
+ Склонение(Копейки, "копейка", "копейки", "копеек");
Возврат Результат;
КонецФункции
Готовые проверенные реализации такой функции давно опубликованы в сообществе разработчиков 1С — надёжнее взять проверенный код и адаптировать его, чем писать склонения с нуля: в правилах русской грамматики много особых случаев (числа 11–19, род тысяч, нулевые триады).
Готовые внешние обработки и расширения
Если дорабатывать конфигурацию нельзя (режим поддержки без изменений, отсутствие программиста), сумму прописью можно получить через внешнюю печатную форму или расширение конфигурации. Расширение позволяет добавить свой общий модуль или переопределить печатную форму, не снимая конфигурацию с поддержки — это безопасный путь для типовых решений.
Внешние обработки с функцией суммы прописью подключаются через «Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки». Перед подключением обработки из внешнего источника откройте её модуль в конфигураторе и убедитесь, что в коде нет обращений к внешним ресурсам и отправки данных — обработка имеет полный доступ к базе.
Проверка результата и ограничения
После внедрения функции проверьте её на граничных значениях. Минимальный набор тестов: 0, 1, 2, 5, 11, 21, 101, 111, 1000, 2000, 1000000, сумма с копейками (например, 1234,56) и сумма с округлением на границе (99,999). Каждое из этих чисел проверяет отдельную ветку алгоритма склонения.
Как проверить результат
«Две тысячи рублей 00 копеек»
«Два тысячи» или «две тысяча» — ошибка рода или склонения
«Сто одиннадцать рублей 11 копеек»
«Сто одиннадцать рубля» — не обработан диапазон 11–14
Копейки округлены до двух знаков по правилам округления
Копейки обрезаны или вылезает ошибка преобразования
Учитывайте ограничение по величине числа: типовые функции обычно корректно обрабатывают суммы до триллионов, но при экстремально больших значениях возможно переполнение или потеря точности дробной части. Для обычных хозяйственных операций этого диапазона достаточно с большим запасом.
Что важно запомнить
В типовых конфигурациях используйте РаботаСКурсамиВалют.СформироватьСуммуПрописью(Сумма, Валюта). Для самописных решений берите проверенную готовую функцию и тестируйте её на числах 11–14, тысячах и округлении копеек. Доработки безопаснее выполнять через расширение конфигурации.
Частые вопросы
Как вывести сумму прописью без копеек?
Округлите сумму до целых перед вызовом функции и обрежьте хвост строки после слова «рублей» через СтрНайти и Лев, либо используйте собственную функцию, где формирование дробной части отключается параметром.
Функция выдаёт сумму на английском или не склоняет валюту — в чём причина?
Проверьте заполнение справочника «Валюты»: наименования валюты и её дробной части в разных падежах загружаются из классификатора валют. Если поля пустые, обновите валюту по классификатору через кнопку загрузки в карточке валюты.
Можно ли получить сумму прописью в 1С:Предприятии 7.7?
Да, в типовых конфигурациях 7.7 есть глобальная функция СформироватьПропись или СуммаПрописью (имя зависит от конфигурации). Найдите её через поиск по глобальному модулю.
Как сделать сумму прописью на украинском или другом языке?
Типовая функция БСП ориентирована на русский язык. Для других языков пишется отдельная функция с собственными массивами числительных и правилами склонения — правила грамматики существенно отличаются, простой заменой слов не обойтись.
После обновления конфигурации печатная форма перестала выводить сумму прописью. Что делать?
Скорее всего, при обновлении изменилось имя общего модуля или функции. Найдите новое расположение функции глобальным поиском по слову «Прописью» и поправьте вызов в своей доработке. Чтобы избежать этого в будущем, выносите доработки в расширение с собственной обёрткой над типовой функцией.