Хочу поделиться простым лайфхаком (кому-то может показаться слишком простым) о том, как вывести в печатной форме сумму в виде
"(сумма прописью") <склоняемая валюта>" (например, "(двенадцать тысяч триста два) рубля") или количества дней в виде "<ЧислоДней> (ЧислоДнейПрописью) <склоняемая единица измерения> <произвольный текст>" (например, "21 (двадцать один) рабочий день с даты подписания Договора").
Использовал функции:
ПолучитьСклоненияСтрокиПоЧислу();
ЧислоПрописью();
СтрЗаменить()
Порядок выполнения (на примере количества дней):
-
ТекстДней = СокрП(ЧислоПрописью(Выборка.Работы.СрокиВыполнения, ОбщегоНазначения.КодОсновногоЯзыка(), ", , , , , , , , 0"));
Здесь: ЧислоПрописью(Число, ФорматнаяСтрока, ПараметрыПредметаИсчисления) - Формирует представление числа прописью в соответствии с заданными форматной строкой и параметрами предмета исчисления. Описание можно посмотреть в синтаксис-помощнике.
Выборка.Работы.СрокиВыполнения - результат запроса, в котором указывается число дней, например, "21", тип - "Число";
ОбщегоНазначения.КодОсновногоЯзыка() - ФорматнаяСтрока; ", , , , , , , , 0" - ПараметрыПредметаИсчисления, вообще здесь указываются единицы измерения валюты (рубли, копейки), но у меня другие единицы измерения, поэтому валюта мне не нужна.
Результат: "Двадцать один"
-
ТекстДнейПечать = ПолучитьСклоненияСтрокиПоЧислу("рабочий день", ВыборкаРаботы.СрокиВыполнения,, "ЧС=Количественное", "ПД=Именительный; ПЧ=ЧислоПрописью")[0];
Здесь: ПолучитьСклоненияСтрокиПоЧислу(СклоняемаяСтрока, Число, СклоняемыеЕдиницыИзмерения, ОписаниеСтроки, ФорматнаяСтрока, ФорматнаяСтрокаЧисла)
В примере: СклоняемаяСтрока = "рабочий день",
Число - ВыборкаРаботы.СрокиВыполнения - число дней, указанные в документе в табличной части,
СклоняемыеЕдиницыИзмерения - у меня ничего не указано, это необязательный параметр,
ОписаниеСтроки - здесь указывается код локализации (по умолчанию используется установленный в системе) и тип числительного (количественное или порядковое). Количественное используется для целых и дробных значений, порядковое - только для целых.
ФорматнаяСтрока - содержит параметры форматирования: падеж, представление числа. В примере это именительный падеж и число прописью.
Результат = "Двадцать один рабочий день"
-
ОбластьСтрокаТаблицы.Параметры.СрокиВыполнения = Строка(ВыборкаРаботы.СрокиВыполнения) + " (" + ТекстДней + ")" + СтрЗаменить(ТекстДнейПечать, ТекстДней,"") + " с даты подписания Задания";
Сразу записываю в параметр макета печатной формы.
Перевожу в строку значение числа дней, "прибавляю" скобки и значение переменной "ТекстДней", затем "прибавляю" закрывающие скобки, добавляю результат замены строки и, если нужно, произвольный текст.
Использование функции СтрЗаменить:
СтрЗаменить(ТекстДнейПечать, ТекстДней,"")
ищу значение переменной "ТекстДней" в переменной "ТекстДнейПечать", меняю найденное значение на "". Значение в любом случае будет найдено, т.к. в первых двух шагах получается практически одинаковое значение, за исключением самих единиц измерения. Но нам нужно вынести их (единицы) за скобки. Поэтому, то, что нашлось, меняем на "", остается "рабочий день", только уже с необходимым склонением.
Таким образом, получили "21 (Двадцать один) рабочий день"
Точно также с суммами. В счетах на оплату, чаще всего, указывается сама сумма прописью в скобках, но единицы измерения остаются за ними.
СуммаПрописью = СокрП(ЧислоПрописью(ИтогСумма, ФорматнаяСтрока, ПараметрыПредметаИсчисления));
ТекстСумма = ПолучитьСклоненияСтрокиПоЧислу("рубль", ИтогСумма,,
"ЧС=Количественное", "ПД=Именительный; ПЧ=ЧислоПрописью")[0];
ОбластьИтогоПрописью.Параметры.ИтогСуммаПрописью = "(" + СуммаПрописью + ")" + СтрЗаменить(ТекстСумма,СуммаПрописью,"");
ТабДок.Вывести(ОбластьИтогоПрописью);
Результаты вывода на картинке
Тестировал на УНФ 1.6.27.270 на платформе 8.3.20.1789 (скриншот с данными из демо-базы УНФ)
В принципе, использовались функции БСП.