Как правильно вывести сумму прописью в 1С:Предприятии

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Основы использования функции ЧислоПрописью

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

ЧислоПрописью(Число, ФорматнаяСтрока, ПараметрыПредметаИсчисления)

Разберем назначение каждого параметра, чтобы понимать, как они влияют на итоговый результат:

  1. Число — это собственно числовое значение, которое мы хотим преобразовать в текст.
  2. ФорматнаяСтрока — строка, определяющая правила форматирования (язык, вывод дробной части текстом или цифрами, отображение нулевых значений).
  3. ПараметрыПредметаИсчисления — строка, описывающая названия единиц (валют) и их грамматические свойства.

Рассмотрим конкретный пример кода, который часто применяется в базовых задачах:


ФормСтрока = "Л = ru_RU; ДП = Истина, НД = Ложь";
ПарПредмета = "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2";
Результат = ЧислоПрописью(СуммаДокумента, ФормСтрока, ПарПредмета);

Проанализируем, что мы указали в ФормСтрока. Параметр Л = ru_RU указывает системе использовать русский язык. ДП = Истина (Дробная часть Прописью) заставляет функцию выводить копейки текстом, а не цифрами. Параметр НД = Ложь (Нулевая Дробная часть) определяет, нужно ли выводить «00 копеек», если дробная часть равна нулю.

Тонкая настройка параметров предмета исчисления

Параметр ПараметрыПредметаИсчисления является ключевым для корректного склонения валют. Он состоит из полей, разделенных запятыми. Давайте разберем их по порядку на примере рублей и копеек:

  1. "рубль" — наименование единицы в именительном падеже единственного числа.
  2. "рубля" — в родительном падеже единственного числа.
  3. "рублей" — в родительном падеже множественного числа.
  4. "м" — мужской род (важно для правильного написания "один" или "два").
  5. "копейка" — наименование дробной части в именительном падеже единственного числа.
  6. "копейки" — в родительном падеже единственного числа.
  7. "копеек" — в родительном падеже множественного числа.
  8. "ж" — женский род (для копеек это критично, чтобы получить "две копейки", а не "два копейки").
  9. "2" — количество знаков в дробной части.

Если мы проанализируем ситуацию, когда необходимо вывести сумму в формате «50,10 (пятьдесят рублей 10 копеек)», нам потребуется скомбинировать строковые функции и ЧислоПрописью. Рассмотрим пример:


Сумма = 50.10;
ФорматнаяСтрока = "Л = ru_RU; ДП = Ложь";
ПараметрыВалюты = "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2";
СуммаПрописью = ЧислоПрописью(Сумма, ФорматнаяСтрока, ПараметрыВалюты);
РезультатСтрока = Строка(Сумма) + " (" + СуммаПрописью + ")";

Управление регистром первой буквы

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


Результат = ЧислоПрописью(2341.56, "Л = ru_RU", "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");
// Превращаем первую букву в строчную
РезультатСМаленькойБуквы = НРег(Лев(Результат, 1)) + Сред(Результат, 2);

В данном коде функция НРег переводит первый символ в нижний регистр, а функция Сред присоединяет к нему всю оставшуюся часть строки, начиная со второго символа. Это позволяет гибко встраивать сумму прописью в середину предложения или в скобки.

Использование возможностей БСП (Библиотеки стандартных подсистем)

В современных конфигурациях, таких как «Бухгалтерия предприятия 3.0», «Управление торговлей 11» или «1С:ERP», ручное прописывание параметров «рубль, рубля...» считается избыточным и потенциально ошибочным. В составе БСП есть модуль РаботаСВалютами, который значительно упрощает жизнь разработчику. Для удобного поиска и изучения функций библиотеки можно использовать справочник по методам БСП.

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


// Пример использования БСП
СуммаЧислом = 1500.75;
ВалютаСсылка = Справочники.Валюты.НайтиПоКоду("643"); // Рубли
ТекстПрописью = РаботаСВалютами.СформироватьСуммуПрописью(СуммаЧислом, ВалютаСсылка);

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


СуммаБезКопеек = ЧислоПрописью(Цел(Сумма), "Л = ru_RU", "рубль, рубля, рублей, м, , , , , 0");

Вывод суммы прописью через макет табличного документа

Посмотрим на ситуацию, когда нам не хочется писать много кода в модуле, а нужно настроить вывод прямо в макете. В 1С предусмотрен механизм форматного редактирования ячеек. Если в ячейке макета установлен тип «Шаблон», мы можем использовать конструкцию с параметром #ЧП.

Например, текст в ячейке может выглядеть так: [ИтоговаяСумма#ЧП]. В этом случае при заполнении параметра ИтоговаяСумма платформа автоматически преобразует число в текст, используя настройки локализации по умолчанию. Однако помните, что этот метод ограничен в настройках (сложно передать специфические параметры валюты), поэтому программный метод через ЧислоПрописью остается более профессиональным и гибким.

Распространенные ошибки и советы

Проанализируем несколько типичных ошибок, которые совершают программисты при реализации этого функционала:

Выясним, какой подход лучше выбрать. Если вы работаете в современной типовой конфигурации — всегда используйте функции БСП. Это обеспечит корректную работу с мультивалютностью и упростит поддержку кода. Если же вы разрабатываете решение «с нуля» на чистой платформе, мастерское владение функцией ЧислоПрописью станет вашим надежным инструментом.

Подводя итог, мы рассмотрели все основные способы формирования суммы прописью. Мы научились управлять форматом вывода, склонениями и регистром символов. Используя эти знания, вы сможете реализовать вывод суммы в строгом соответствии с требованиями любых печатных форм.

← На главную