При разработке печатных форм в 1С часто возникает задача вывода суммы в специфическом формате: с числовым значением перед текстовым представлением в скобках. Стандартная функция ЧислоПрописью не умеет автоматически добавлять цифры в скобках, поэтому нам необходимо разработать собственный алгоритм «сборки» строки. Давайте разберем, как сделать это правильно, эффективно и с учетом правил русского языка.
Самый понятный и гибкий способ — это формирование строки по частям. Мы отдельно обрабатываем целую часть (рубли) и дробную часть (копейки), а затем объединяем их в одну строку. Важно правильно настроить параметры функции, чтобы избежать лишних слов и некорректных склонений.
Для реализации этого метода воспользуемся следующим алгоритмом:
ФорматнаяСтрока = "Л = ru_RU; ДП = ЛОЖЬ; НП=ИСТИНА";
Параметр = "рубль,рубля,рублей,м,копейка,копейки,копеек,ж";
мЧисло = Файл.ВладелецФайла.Сумма;
Стр = Формат(Цел(мЧисло), "ЧГ=0") + "(" + ЧислоПрописью(Цел(мЧисло), ФорматнаяСтрока, Параметр) + ") рублей "
+ Формат((мЧисло - Цел(мЧисло)) * 100, "ЧГ=0") + "(" + ЧислоПрописью((мЧисло - Цел(мЧисло)) * 100, ФорматнаяСтрока, Параметр) + ") копеек";
РезультатОбработки = Стр;
Важное примечание: При работе с дробными числами в 1С всегда помните про точность вычислений. Выражение (мЧисло - Цел(мЧисло)) * 100 может выдать результат типа 4.999999999, что при округлении даст неверное число. Всегда используйте функцию Окр() перед выводом, чтобы гарантировать корректность копеек.
В современных версиях платформы 1С для профессиональной работы со склонениями предпочтительнее использовать более продвинутый метод СтрокаСЧислом. Этот метод позволяет задать шаблоны склонения для различных вариантов числительных (1 рубль, 2 рубля, 5 рублей), что избавляет нас от ручной настройки параметров функции ЧислоПрописью.
Рассмотрим, как это реализовать на практике:
Рубли = Цел(Сумма);
Копейки = Окр((Сумма - Рубли) * 100, 0);
СтрРубли = СтрокаСЧислом(";%1 рубль;;%1 рубля;%1 рублей;%1 рубля", Рубли, ВидЧисловогоЗначения.Количественное, "L=ru");
СтрКопейки = ?(Копейки = 0, "00 копеек", СтрокаСЧислом(";%1 копейка;;%1 копейки;%1 копеек;%1 копейки", Копейки, ВидЧисловогоЗначения.Количественное, "L=ru"));
Результат = СтрРубли + " " + СтрКопейки;
Этот метод считается более устойчивым к ошибкам, так как шаблоны склонений хранятся в платформе и адаптированы под правила русского языка для количественных числительных.
Окр(Число, 0) при расчете копеек. Без нее вы рискуете получить ошибку из-за особенностей хранения дробных чисел в памяти компьютера.ЧислоПрописью или адаптируйте шаблон в СтрокаСЧислом.+) — самый простой способ добиться нужного визуального формата с любыми скобками или разделителями без необходимости модификации стандартных функций платформы.Применяя эти методы, вы сможете настроить вывод любой суммы в печатных формах, сохранив при этом читаемость кода и корректность отображения данных для пользователя.