Доброе утро всем. Мне нужно вывести любое число в отчете FR в след. формате: к примеру число 2033,33, вывести 2 033 руб. 33 коп. (с разделителями тысяч). И чтобы находилось это в одном Memo. Вопрос следующий: нужно функцию писать по разделению целой части числа на тысячи, миллионы, или есть другие варианты? просто удобно использовать форматирование числа в самом Memo на вкладке Format, но в моем варианте так не сделаешь, потому что в выражении Memo присутствует строка 'руб','коп.' и компилятор ругается. Подскажите, пож-ста, как лучше реализовать.
Нравится
Здравствуйте, Антон!
А Вы не пробовали с помощью вычисляемых полей? то есть, создать поле, например AmountStr, в котором (на событии датасета OnDatasetCalcFields(Dataset)) с помощью функции AmountToStr "перевести" сумму числом в сумму прописью. кстати, про сумму прописью на комюнити есть много похожих тем. (например, здесь или здесь).
код примерно такой:
//amount to string var Sum = Dataset.ValAsFloat('Amount'); var StringSum = Sum.toString() var Result = AmountToStr(StringSum, 'ua', 'UAH'); //в рублях -- AmountToStr(StringSum, 'ru', 'RUR'); Dataset.Values('AmountStr') = Result;
дополнительные параметры функции можно посмотреть в самой функции (кажется, она в скрипте scr_WindowUtils. кстати, этот скрипт нужно подключить при написании кода).
"Ольга Прилипко" написал: с помощью функции AmountToStr "перевести" сумму числом в сумму прописью
Ему не нужно прописью, нужно цифрами с пробелами.
Добрый день!
Воспользуйтесь стандартной функцией FR - формат отображения:
Разделитель тысяч ставим следющим образом:
[MySum #n%2,2n]
т.е к полю которое уже ([MySum]) есть дописываем #n%2,2n, тоже самое делает FastReport когда устанавливает DisplayFormat
Подробнее тут
P.S. В DisplayFormat FastReport'a такого отображения нет.
Спасибо. Мне еще нужно чтобы 0 коп. отображало как 00 коп. Вот с этим проблемно уже справиться...
Написал функцию разбиения числа на тысячи, в Memo в событии OnBeforePrint присваиваю эту строку, но пишет ошибку:
В Memo выставил свойство Format = Text(no formating). Почему оно пытается строку (данные в Memo)в Double перевести?
Антон, попробуйте вариант решения, который я описал.
"Зверев Александр" написал:Ему не нужно прописью, нужно цифрами с пробелами.
да, я вчера затупила, прошу прощения. я просто больше обратила внимания на то, что нужны рубли и копейки...
"Каневский Антон Владимирович" написал:нужно функцию писать по разделению целой части числа на тысячи, миллионы, или есть другие варианты
Судя по всему, Вы были правы с самого начала -- нужно писать функцию. потому что по совету Гакало Игоря Вы можете только подправить разделение на тысячи, по моих ссылках -- перевести все в буквенный вариант.
Если бы я делала -- я бы бы взяла эту функцию AmountToStr и сделала бы по аналогии, только цифры не трогала бы. Правда, можно еще проще обойтись -- если валюта "постоянная" (например, только рубли) -- то прописать все для рублей и не рассматривать варианты для других валют.
В этом случае Вы также сможете предусмотреть вариант с двумя нолями.
Если нужна помощь в написании функции -- обращайтесь, буду рада помочь.