Разработка и Конфигурация · 10 мин
Как в 1С вывести сумму прописью
Как вывести сумму прописью в 1С: функция ЧислоПрописью, параметры, примеры кода, вывод в печатных формах и типичные ошибки с практическими решениями.
Сумма прописью — обязательный элемент многих первичных документов: счетов, актов, накладных, доверенностей, платёжных поручений. В 1С эта задача решается встроенными средствами платформы, и в большинстве случаев писать собственный алгоритм склонения числительных не требуется.
В управляемых конфигурациях (Бухгалтерия предприятия, Управление торговлей, ERP) сумма прописью формируется типовыми механизмами и уже выводится в стандартных печатных формах. Доработка нужна, когда вы создаёте собственную печатную форму, внешнюю обработку или нестандартный документ.
Ниже разобраны основные способы: функция ЧислоПрописью() из встроенного языка, типовые функции общих модулей, вывод в макетах печатных форм и обработка валют с копейками.
Как работает функция ЧислоПрописью
Основной инструмент платформы — глобальная функция ЧислоПрописью(). Она преобразует число в строковое представление прописью с учётом языка, падежей и параметров предмета исчисления (рубли, штуки, килограммы и т. д.).
Синтаксис функции: ЧислоПрописью(Число, ФорматнаяСтрока, ПараметрыПредметаИсчисления). Первый параметр — само число. Второй — форматная строка, где обычно указывают локализацию Л=ru_RU. Третий — строка с формами предмета исчисления: единственное число, форма для 2–4, форма для 5 и более, род, а затем аналогичный блок для дробной части и число знаков после запятой.
// Простой пример
СуммаПрописью = ЧислоПрописью(1250.35, "Л=ru_RU",
"рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");
// Результат: "Одна тысяча двести пятьдесят рублей 35 копеек"
Если параметры предмета исчисления не задать, функция вернёт просто число прописью без единиц измерения — например, «одна тысяча двести пятьдесят». Это полезно для количества или когда единицы измерения подставляются отдельно.
СуммаПрописью = ЧислоПрописью(СуммаДокумента, "Л=ru_RU", "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");Параметры предмета исчисления: как задать правильно
Третий параметр функции вызывает больше всего вопросов. Его структура: «форма для 1, форма для 2–4, форма для 5–9 и 0, род (м/ж/с)», затем через запятую тот же блок для дробной части, и в конце — число знаков дробной части.
Для рублей строка выглядит так: "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2". Для долларов: "доллар, доллара, долларов, м, цент, цента, центов, м, 2". Для штук без дробной части достаточно: "штука, штуки, штук, ж".
Род единицы измерения важен: от него зависит форма числительных «один/одна/одно» и «два/две». Ошибка в роде даёт фразы вида «один копейка» или «две рубля», которые в финансовых документах недопустимы.
Сумма прописью в типовых конфигурациях
В типовых решениях на БСП (Библиотека стандартных подсистем) есть готовые функции, которые не стоит дублировать собственным кодом. В конфигурациях на базе БСП используется функция РаботаСКурсамиВалют.СформироватьСуммуПрописью(Сумма, Валюта) — она сама подбирает параметры прописи по валюте из справочника.
Преимущество типовой функции в том, что параметры прописи (формы слов, род, количество знаков) хранятся в справочнике валют и корректно работают для рублей, долларов, евро и других валют без ручного прописывания строк параметров.
// Типовой подход в конфигурациях на БСП
СуммаПрописью = РаботаСКурсамиВалют.СформироватьСуммуПрописью(
СуммаДокумента, ВалютаДокумента);
В старых конфигурациях на обычных формах (УПП, УТ 10.3, Бухгалтерия 2.0) аналогичная функция находится в общем модуле ОбщегоНазначения или РаботаСДиалогами — конкретное имя зависит от версии конфигурации. Найти её можно глобальным поиском по строке «СформироватьСуммуПрописью» или «СуммаПрописью».
Сравнение вариантов
Подходит для внешних обработок и простых доработок. Ограничение: параметры валют задаются вручную, при смене валюты код придётся менять.
Подходит для доработки типовых конфигураций. Параметры берутся из справочника валют, поддерживаются все валюты без изменения кода.
Оправдан только для языков или форматов, не поддерживаемых платформой. Трудоёмко и требует тщательного тестирования падежей.
Вывод суммы прописью в печатной форме
Типовой сценарий: в модуле менеджера документа или в модуле объекта формируется строка суммы прописью, которая передаётся в макет как параметр. В табличном документе (макете) создаётся область с параметром, например [СуммаПрописью], и при выводе области параметр заполняется.
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ...)
// ...
ОбластьМакета.Параметры.СуммаПрописью =
РаботаСКурсамиВалют.СформироватьСуммуПрописью(
ДанныеДокумента.СуммаДокумента, ДанныеДокумента.Валюта);
ТабличныйДокумент.Вывести(ОбластьМакета);
КонецПроцедуры
Часто требуется формат «Сумма прописью (цифрами)», например: «Одна тысяча рублей 00 копеек (1 000,00)». Для этого сформируйте составную строку, используя Формат(Сумма, "ЧДЦ=2; ЧРГ= ") для числовой части.
Проверьте ширину области в макете: длинные суммы (миллионы и миллиарды прописью) могут не помещаться в отведённую строку. Включите у ячейки свойство «АвтоВысота» или уменьшите шрифт, иначе текст обрежется при печати.
- 1Откройте модуль, где формируется печатная форма (модуль менеджера документа или внешняя обработка)
- 2Сформируйте строку: ЧислоПрописью(Сумма, "Л=ru_RU", "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2") или вызовите типовую функцию
- 3В макете табличного документа добавьте параметр, например [СуммаПрописью], в нужную область
- 4Присвойте параметру сформированную строку перед выводом области
- 5Распечатайте тестовый документ с суммами 1, 21, 111 и 1 234 567,89 — проверьте склонения и перенос строки
Особые случаи: валюты, НДС и количество
Сумма НДС прописью
В счетах-фактурах и некоторых актах требуется выводить прописью сумму НДС отдельно. Алгоритм тот же, но берите именно сумму налога, а не сумму с НДС. Если НДС не облагается, вместо суммы выводится текст «Без налога (НДС)» — это нужно предусмотреть условием в коде.
Количество прописью в доверенностях
В доверенностях (форма М-2 и аналоги) количество товара указывается прописью. Здесь параметры предмета исчисления зависят от единицы измерения: «штука, штуки, штук, ж» или «килограмм, килограмма, килограммов, м». Дробную часть для штучных товаров обычно не выводят.
Нерублёвые валюты
Для валютных документов используйте типовую функцию с параметром валюты — она возьмёт правильные формы из справочника. При ручном задании параметров убедитесь, что формы слов указаны для нужной валюты: «евро, евро, евро, м, цент, цента, центов, м, 2» — у евро все три формы совпадают.
Проверка результата и ограничения
Тестируйте на контрольных наборах чисел: 1, 2, 5, 11, 21, 101, 1000, 1 000 000, 1 234 567,89. Числа 11–14 и сотни с ними («одиннадцать», «сто одиннадцать») — классические места ошибок в самописных алгоритмах; у ЧислоПрописью() они обрабатываются корректно.
У функции есть ограничение по диапазону: очень большие числа (порядка квинтиллионов и выше) могут не преобразовываться. Для бухгалтерских документов это практически никогда не актуально, но при обработке технических величин стоит помнить.
Если нужна сумма прописью на другом языке (например, украинском или английском для двуязычных документов), измените локализацию в форматной строке: Л=uk_UA или Л=en_US — и задайте параметры предмета исчисления на соответствующем языке. Доступность конкретного языка зависит от установленных языковых пакетов платформы.
FAQ
ЧислоПрописью выводит число без рублей и копеек. Что не так?
Не задан третий параметр — параметры предмета исчисления. Добавьте строку вида "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2", и единицы измерения появятся в результате.
Как вывести сумму прописью с заглавной буквы?
Функция возвращает строку с маленькой буквы. Примените к результату обработку: СуммаПрописью = ВРег(Лев(Строка, 1)) + Сред(Строка, 2) — либо используйте функцию ТРег() из типовых общих модулей, если она есть в конфигурации.
Можно ли получить сумму прописью без программирования?
В типовых печатных формах сумма прописью уже выводится автоматически. Если её нет в нестандартной форме — без доработки кода или макета не обойтись: механизма настройки «в один клик» в пользовательском режиме нет.
Почему в печатной форме сумма прописью обрезается?
Текст не помещается в ячейку макета. Откройте макет табличного документа, выделите ячейку с параметром и включите свойство «АвтоВысота» у строки либо уменьшите размер шрифта. Проверьте печать на сумме в несколько миллионов.
Как вывести прописью сумму в валюте, которой нет в справочнике?
Добавьте валюту в справочник валют и заполните у неё параметры прописи (формы слов для целой и дробной части). Если используете ЧислоПрописью напрямую — задайте параметры вручную в коде для этой валюты.
Работает ли ЧислоПрописью на тонком клиенте и в веб-клиенте?
Да, функция доступна на всех клиентах и на сервере. Ограничений по месту выполнения нет, поэтому формировать строку можно как в серверной процедуре при печати, так и на клиенте для отображения в форме.
Что важно запомнить
Для вывода суммы прописью используйте встроенную ЧислоПрописью() с корректными параметрами предмета исчисления, а в типовых конфигурациях — функции общих модулей, берущие параметры из справочника валют. Проверяйте результат на числах 1, 2, 5, 11, 21 и крупных суммах, следите за родом единиц измерения и шириной ячейки в макете. Доработки выполняйте через расширения или внешние печатные формы, а не правкой типовых модулей.