При разработке печатных форм в системе 1С одной из наиболее часто встречающихся задач является вывод числового значения суммы в текстовом виде. Это необходимо для корректного оформления договоров, актов, счетов-фактур и других первичных документов. В этой статье мы подробно разберем, как использовать встроенные механизмы платформы для формирования суммы прописью, проанализируем настройки параметров и рассмотрим современные подходы с использованием Библиотеки стандартных подсистем (БСП). Для практической реализации печатной формы можно задействовать пример внешней печатной формы на БСП.
Для решения задачи вывода текстового представления числа в 1С существует встроенная функция ЧислоПрописью. Она обладает высокой гибкостью и позволяет настроить вывод практически под любые требования законодательства или корпоративных стандартов. Давайте рассмотрим синтаксис этой функции:
ЧислоПрописью(Число, ФорматнаяСтрока, ПараметрыПредметаИсчисления)
Разберем назначение каждого параметра, чтобы понимать, как они влияют на итоговый результат:
Рассмотрим конкретный пример кода, который часто применяется в базовых задачах:
ФормСтрока = "Л = ru_RU; ДП = Истина, НД = Ложь";
ПарПредмета = "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2";
Результат = ЧислоПрописью(СуммаДокумента, ФормСтрока, ПарПредмета);
Проанализируем, что мы указали в ФормСтрока. Параметр Л = ru_RU указывает системе использовать русский язык. ДП = Истина (Дробная часть Прописью) заставляет функцию выводить копейки текстом, а не цифрами. Параметр НД = Ложь (Нулевая Дробная часть) определяет, нужно ли выводить «00 копеек», если дробная часть равна нулю.
Параметр ПараметрыПредметаИсчисления является ключевым для корректного склонения валют. Он состоит из полей, разделенных запятыми. Давайте разберем их по порядку на примере рублей и копеек:
Если мы проанализируем ситуацию, когда необходимо вывести сумму в формате «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С предусмотрен механизм форматного редактирования ячеек. Если в ячейке макета установлен тип «Шаблон», мы можем использовать конструкцию с параметром #ЧП.
Например, текст в ячейке может выглядеть так: [ИтоговаяСумма#ЧП]. В этом случае при заполнении параметра ИтоговаяСумма платформа автоматически преобразует число в текст, используя настройки локализации по умолчанию. Однако помните, что этот метод ограничен в настройках (сложно передать специфические параметры валюты), поэтому программный метод через ЧислоПрописью остается более профессиональным и гибким.
Проанализируем несколько типичных ошибок, которые совершают программисты при реализации этого функционала:
Строка(Сумма) разделителем может выступать точка или неразрывный пробел (в зависимости от региональных настроек сервера). Для вывода числа цифрами перед прописью лучше использовать функцию Формат() с параметром ЧГ=0 (убирает группировку разрядов) и ЧРД=, (устанавливает запятую как разделитель).Выясним, какой подход лучше выбрать. Если вы работаете в современной типовой конфигурации — всегда используйте функции БСП. Это обеспечит корректную работу с мультивалютностью и упростит поддержку кода. Если же вы разрабатываете решение «с нуля» на чистой платформе, мастерское владение функцией ЧислоПрописью станет вашим надежным инструментом.
Подводя итог, мы рассмотрели все основные способы формирования суммы прописью. Мы научились управлять форматом вывода, склонениями и регистром символов. Используя эти знания, вы сможете реализовать вывод суммы в строгом соответствии с требованиями любых печатных форм.