Отчет в FastReport и условия

  • Автор темы on-lite
  • 3920
  • Обновлено
  • 12, Oct 2015
  • #1
Доброе время суток, уважаемые! Есть старый проект по зарплате, писан еще в 2005 году на Delphi 6. Отчеты генерируются в html (зеленый еще тогда был). Все хорошо, все работает, все открывает как надо.

Дали задание переделать некоторые формулы, усложнить кое что и т.д. - работа сделана. Решил изучить FastReport.

Добавил в свой проект по зарплате еще выбор отчета FastReport.

Все отлично все как надо.

Построил отчеты и т.д. НО... вот один отчет, который с условиями вывода формул - не знаю как бы его проще и доступнее сделать. Суть задачи: Есть премия начисления за сверхважность и не сверхважность, все это храниться в одной таблице (вывод отчета)






В вывод отчета попадает условие Sverh = True или Sverh = False

TbKatMgr.First;
while not TbKatMgr.Eof do
begin
if TbKatMgr['sverh']=true then
begin



writeln(f, '<tr bgcolor=#FFCCCC align=center><td align=center>+'+IntToStr(i)+'<td align=left>&nbsp;&nbsp;&nbsp;'+TbKatMgr['name']+'<td align=right>'+FloatToStr(TbKatMgr['plan'])+'&nbsp;&nbsp;&nbsp;<td align=right>'+FloatToStr(TbKatMgr['prod'])+'&nbsp;&nbsp;&nbsp;<td align=center>'+FloatToStr(TbKatMgr['ProcVKM'])+'%</td>');
writeln(f, '<td>'+IntToStr(TbKatMgr['NDirS'])+'ð.</td><td>'+IntToStr(TbKatMgr['NTovS'])+'ð.</td><td>'+IntToStr(TbKatMgr['PDirS'])+'ð.</td><td>'+IntToStr(TbKatMgr['PTovS'])+'ð.</td>');
ndirit:=ndirit+TbKatMgr['NDirS'];
pdirit:=pdirit+TbKatMgr['PDirS'];
ntovit:=ntovit+TbKatMgr['NTovS'];
ptovit:=ptovit+TbKatMgr['PTovS'];
end else if TbKatMgr['sverh']=false then
begin



writeln(f, '<tr align=center><td bgcolor=#eeeeee align=center>'+IntToStr(i)+'<td align=left>&nbsp;&nbsp;&nbsp;'+TbKatMgr['name']+'<td align=right>'+FloatToStr(TbKatMgr['plan'])+'&nbsp;&nbsp;&nbsp;<td align=right>'+FloatToStr(TbKatMgr['prod'])+'&nbsp;&nbsp;&nbsp;<td align=center>'+FloatToStr(TbKatMgr['ProcVKM'])+'%</td>');
writeln(f, '<td>'+IntToStr(TbKatMgr['NDir'])+'ð.</td><td>'+IntToStr(TbKatMgr['NTov'])+'ð.</td><td>'+IntToStr(TbKatMgr['PDir'])+'ð.</td><td>'+IntToStr(TbKatMgr['PTov'])+'ð.</td>');
ndirit:=ndirit+TbKatMgr['NDir'];
pdirit:=pdirit+TbKatMgr['PDir'];
ntovit:=ntovit+TbKatMgr['NTov'];
ptovit:=ptovit+TbKatMgr['PTov'];
end;
i:=i+1;
TbKatMgr.Next;
end;
есть ли возможность подобные отчеты выводить в FastReport используя FastScript например? Я с этим никогда не сталкивался, кто либо делал подобное?







и что то такое должно получится при выводе в FastReport

on-lite


Рег
07 Oct, 2015

Тем
2

Постов
9

Баллов
29
  • 13, Oct 2015
  • #2
Разобрался. Решение: выбрал нужный компонент, где отображаются цифра (Memo9) и в обработчике событий OnBeforePrint прописал следующее

if <frxDBDataset3."Sverh"> = true then
begin
Memo9.DataField:='NDirS';
end else
Memo9.DataField:='NDir';
так для каждого компонента где должны быть цифры пропишу такой обработчик. Может кому еще пригодится. Вообще подставлять можно любые данные из базы данных по событию с условиями.
 

on-lite


Рег
07 Oct, 2015

Тем
2

Постов
9

Баллов
29
  • 09, Dec 2015
  • #3
fast script вообще позволяет писать на pascal или c пишешь свой обработчик свои формулы и потом уже можешь вставлять их в элементы в отчете
 

sergiodd


Рег
01 Dec, 2015

Тем
1

Постов
2

Баллов
12
  • 24, Apr 2016
  • #4
у FastReport есть замечательная CHM-ка "Руководство разработчика", там кратко расписаны все примеры работы с FastReport.

Приведенный выше пример крайне тривиален и легко реализуется с помощью фаста.

Если описать на пальцах, то на вход идет набор(ы) данных, можно в "сыром" виде, т.к. все суммы и итоги можно подбить с помощью отчета.

Создается заголовок, тело данных выводится с помощью MasterData, а итоги подводятся с помощью финальных бендов.
 

MikaelBox


Рег
25 Nov, 2015

Тем
0

Постов
10

Баллов
10
  • 06, May 2016
  • #5
MikaelBox, post: 765080:
у FastReport есть замечательная CHM-ка "Руководство разработчика", там кратко расписаны все примеры работы с FastReport.
Полностью поддерживаю. FastReport - один из тех редких продуктов, который имеет отличную документацию.
 

MAFyodorov


Рег
29 Dec, 2006

Тем
0

Постов
5

Баллов
5
  • 24, May 2016
  • #6
on-lite, post: 765071:
есть ли возможность подобные отчеты выводить в FastReport используя FastScript например? Я с этим никогда не сталкивался, кто либо делал подобное?
Да, это одна из главных фишек фастрепорта. У многих в проэкт встраиваеься дизайнер, запросы и сами отчеты хрянятся в базе. Генерируются на лету. Это дает возможность их не зашивать в код и править в случае надобности. Плюс можно их добавлять, создавать кастомные отчеты...
 

newbotanik


Рег
29 Sep, 2015

Тем
0

Постов
5

Баллов
5
  • 30, May 2016
  • #7
MikaelBox, post: 765080:
у FastReport есть замечательная CHM-ка "Руководство разработчика", там кратко расписаны все примеры работы с FastReport.
Присоединюсь к ответу, репорт умеет обрабатывать все сырые данные, по сути вы даете отчету данные и описываете все условия его вывода включаю логику сортировки.
 

Zubrb


Рег
30 May, 2016

Тем
0

Постов
4

Баллов
4
  • 31, Jul 2016
  • #8
newbotanik, post: 765082:
Да, это одна из главных фишек фастрепорта. У многих в проэкт встраиваеься дизайнер, запросы и сами отчеты хрянятся в базе...
Не отчеты, а шаблоны отчетов хранятся в базе
 

kouvaev


Рег
23 Mar, 2009

Тем
2

Постов
16

Баллов
36
  • 19, Oct 2016
  • #9
FastReport любимый дизайнер отчетов, но лично мое мнение данные желательно готовить для вывода на печать заранее, по возможности используя весь функционал sql
 

ashensugar


Рег
28 Jul, 2011

Тем
0

Постов
4

Баллов
4
  • 20, Oct 2016
  • #10
Да, отчет лучше не перегружать логикой, а заранее подготавливать данные, а в самом отчете использовать условия для различных подсветок и красот...
 

_user_


Рег
16 Jan, 2013

Тем
0

Постов
6

Баллов
6
  • 11, Dec 2016
  • #11
Здравствуйте! Возможно ли как нибудь сделать ограничение вывода количества строк таблицы на страницу? Есть таблица которая формируется из БД, с ней проблем нет, а вот отчет на котором она формируется, должен иметь таблицу из 10 строк.

Как сделать так, что бы таблица формировалась по 10 строк, остальные на новом листе?
 

Wild_RNB


Рег
19 Oct, 2016

Тем
1

Постов
2

Баллов
12
  • 12, Dec 2016
  • #12
Rabbano, post: 765095:
лучше задать фиксированный размер листа и рассчитать высоту строки для 10 строчек
А остальное место будет пустым?
 

LeshaRB


Рег
11 Jun, 2007

Тем
5

Постов
110

Баллов
160
  • 14, Dec 2016
  • #13
Wild_RNB, post: 765094:
Здравствуйте!
Возможно ли как нибудь сделать ограничение вывода количества строк таблицы на страницу?
Есть таблица которая формируется из БД, с ней проблем нет, а вот отчет на котором она формируется, должен иметь таблицу из 10 строк. Как сделать так, что бы таблица формировалась по 10 строк, остальные на новом листе?
Задайте в скрипте переменную (счетчик) и при выводе строки таблицы увеличивайте на 1. по достижении 10 - NewPage и счетчик в 0
 

er_long76


Рег
11 Nov, 2015

Тем
1

Постов
5

Баллов
15
  • 14, Dec 2016
  • #14
er_long76, post: 765097:
Задайте в скрипте переменную (счетчик) и при выводе строки таблицы увеличивайте на 1. по достижении 10 - NewPage и счетчик в 0
зачем переменную, прямо при печати строки после 10 NewPage формируем новую страницу и всё
 

Goodydim


Рег
12 Mar, 2011

Тем
0

Постов
4

Баллов
4
  • 22, Feb 2017
  • #15
Может быть кто-нибудь сталкивался.

Переводим отчёты с ORACLE-reports на FastReport.

Столкнулись с проблемой вертикального растягивания поля Memo на несколько записей. Например, есть три строки с одинаковым кодом клиента в первом столбце.

Нужно в первом столбце сделать одно поле с кодом клиента, растянутое на все три строки. Кто как решал такую проблему, поделитесь опытом, плз.
 

overturn


Рег
22 Oct, 2014

Тем
0

Постов
8

Баллов
8
  • 22, Feb 2017
  • #16
overturn, post: 765099:
Может быть кто-нибудь сталкивался...
Переводим отчёты с ORACLE-reports на FastReport. Столкнулись с проблемой вертикального растягивания поля Memo на несколько записей.
Например, есть три строки с одинаковым кодом клиента в первом столбце. Нужно в первом столбце сделать одно поле с кодом клиента, растянутое на все три строки.
Кто как решал такую проблему, поделитесь опытом, плз.
Там есть свойство SuppresRepeated
 

Ivanov-m2


Рег
22 Jan, 2006

Тем
1

Постов
10

Баллов
20
  • 22, Feb 2017
  • #17
Ivanov-m2, post: 765100:
Там есть свойство SuppresRepeated
Это свойство скрывает повторяющиеся значения этого поля в последующих строках. Но нужно, чтобы визуально было, к примеру, не три строчки (первая со значением, остальные - без), а чтобы поле первой строки растянулось на вторую и третью строки.
 

overturn


Рег
22 Oct, 2014

Тем
0

Постов
8

Баллов
8
  • 22, Feb 2017
  • #18
overturn, post: 765101:
Это свойство скрывает повторяющиеся значения этого поля в последующих строках.
Но нужно, чтобы визуально было, к примеру, не три строчки (первая со значением, остальные - без), а чтобы поле первой строки растянулось на вторую и третью строки.
Сделать обработку отчёта в 2 прохода, и во втором поиграться с границами ячеек и их содержимым?
 

МарковАлександр


Рег
23 Aug, 2012

Тем
1

Постов
24

Баллов
34
  • 02, Mar 2017
  • #19
overturn, post: 765101:
Это свойство скрывает повторяющиеся значения этого поля в последующих строках.
Но нужно, чтобы визуально было, к примеру, не три строчки (первая со значением, остальные - без), а чтобы поле первой строки растянулось на вторую и третью строки.
У меня именно так и работает. К сожалению, это у меня старый проект и я не могу точно сказать в чем дело. Возможно, нужно установить StretchMode в smMaxHeight. И все у меня делается за один проход:-) Если совсем не получится - напишите - попробую восстановить проект и разобраться...
 

Ivanov-m2


Рег
22 Jan, 2006

Тем
1

Постов
10

Баллов
20
  • 02, Mar 2017
  • #20
а если этот блок повторяющихся значений переходит на другую страницу отчёта - тогда как происходит?
 

antonio2004


Рег
19 Sep, 2007

Тем
0

Постов
2

Баллов
2
  • 02, May 2017
  • #21
overturn, post: 765101:
Это свойство скрывает повторяющиеся значения этого поля в последующих строках.
Но нужно, чтобы визуально было, к примеру, не три строчки (первая со значением, остальные - без), а чтобы поле первой строки растянулось на вторую и третью строки.
FlowTo попробуйте
 

denwir


Рег
18 Jan, 2010

Тем
1

Постов
3

Баллов
13
Тем
49554
Комментарии
57426
Опыт
552966

Интересно