получить итоги в заголовках групп
Здравствуйте!
у меня версия FastReport 4.6.8
Подскажите пожалуйста можно ли как-то вывести итоги по группе не в подвале, а в заголовке группы для моей версии?
у меня версия FastReport 4.6.8
Подскажите пожалуйста можно ли как-то вывести итоги по группе не в подвале, а в заголовке группы для моей версии?
Комментарии
подскажите пожалуйста где это?
я знаю что там путь какой-то, возможно
"идем в демы, ишем там папку main, запускаем FRDemo, выбираем группу..."
"посмотрите демки, ...Demos\Main\FRDemo.exe..."
это в интернете написано, но где этот путь, на моём комп-е или на каком-то ftp, сайте?
как дотуда добраться?
у себя в отчёте такую ситуацию воспроизвести не смог, пока.
Можно сказать дать пример кода?
потому что в деме версия уже старая и я там не нашёл, кода там нет, как считается переменная, какой обработчик, там сильно отличается вид дизайнера.
или тогда дайте пожалуйста 4-ую версию FRDemo, чтобы её можно было скачать
На первом проходе сохраните в какую-нибудь переменную значение Итога, а на втором выведите его в Заголовке.
Для этого в обработчике OnBeforePrint для заголовка группы напишите:
if engine.FinalPass then Memo1.Text := IntToStr(nSUM);
где Memo1 - Ваш мемо, куда нужно вывести итоговую сумму.
а nSUM - это сумма в вашем подвале, который вы сохранили на первом проходе.
теперь вроде бы знаю всё что нужно.
Подозреваю что проблема именно в TStringList, потому что значения сохраняются как текст, но как обойти это? Есть ли какие-то похожие TList, но чтобы значения были действительными числами?
Если кто-то сталкивался с данной проблемой, подскажите пожалуйста, как из нее выйти.
(FR 4.1)
Используйте эти конструкции на выбор:
1) MyValues: Array of Integer; (или of double)
...
добавление элемента:
SetLength(MyValues, High(MyValues) + 2);
MyValues[High(MyValues)] := <число>;
2) S:TStringList;
s.add(FormatFloat('0.#########', <значение>))
спасибо за ответ.
попыталась сделать 2-й вариант, так как полей больше чем 13 т.е. 13 Listов, на FormatFloat - ноль реакции. все остальное по аналогии из примером в документации. Форматирование мемо числовое.
а на счет первого варианта не сильно поняла - во первых объявляем массив, и далее добавляем элемент методом, который вы описали SetLength (MyValues, High (MyValues) + 2);
MyValues ​​[High (MyValues)] = <число>; мой FR не знает что такое переменная High .
и второй вопрос, каким образом виитягуваты данные из массива при втором проходе репорт? по аналогии с TStringList?
а как тогда его очищать и т.д. ?
я недавно просто занимаюсь ФР, поэтому могут у меня быть не совсем умные вопросы.
еще такая особенность, данные в базе у меня целочисленные, а не дробные, хотя выводить необходимо в формате дробных.
т.е. сумма в футтере, когда вывожу через showmessage без знаков после комы.
Для Fr3 единственный нормальный вариант - двойной проход с занесением в переменную.
Создайте переменную MySum со значением 0
Допустим, итоговая сумма у вас заносится в Memo123, тогда создаёте для него обработчик onAfterData
А более детально смогу подсказать, если пришлёте макет отчёта.
Но честно говоря, я у себя в проекте отказался от двойного прохода. Это очень вредно, если страниц штук 120. Гораздо проще считать итоги в SQL-запросе отдельно и выводить их в отдельных Memo или DataSet (в зависимости от модели). И тогда итоговую сумму легче занести.
Почему то методы Set / Get корректно работают только когда одна групповая сумма, а когда их больше 2, то выводит какие-то не те данные.
И даже при такой конструкции данные в формате "9", а не "9,00"
Возможно, проблема в том, что модуль FR4 в программе немного обрезан.
Помогла вот такая конструкция для каждого итогового мемо
[IIF( Engine.FinalPass = true, List[i-1], 0 )], где List названия списка. (для первого варианта из мануала)
И спасибо за подсказку об отказе от двойных проходов, есть над чем работать в дальнейшем.