IPB

Welcome Guest ( Log In | Register )

3 Pages V   1 2 3 >  
Reply to this topicStart new topic
> Возникла проблема с многоуровневым отчетом
madmech
post 21.12.2009, 13:03
Post #1


Advanced Member
***

Group: Members
Posts: 86
Joined: 24.04.2009
Member No.: 11744



Господа, добрый день! Помогите разобраться с многоуровневым отчетом, а точнее подскажите, как можно реализовать перенос интересующих меня заголовков в случае непомещения группы оных на одной странице. Сначала скажу пару слов о структуре отчета:

1. MasterData1: "Разбиение 1"
Сhild: SubReport1:

1.1. MasterData2: "Подгруппа 1"

1.1.1. Header1: "Квадратная матрица"
1.1.2. DetailData1: Кросс-таблица
1.1.3. Header2: "Треугольная матрица"
1.1.4. DetailData2: Кросс-таблица

1.2. MasterData2: "Подгруппа 2"

1.2.1. Header1: "Квадратная матрица"
1.2.2. DetailData1: Кросс-таблица
1.2.3. Header2: "Треугольная матрица"
1.2.4. DetailData2: Кросс-таблица

2. MasterData1: "Разбиение 2"
Сhild: SubReport1:

2.1. MasterData2: "Подгруппа 1"

2.1.1. Header1: "Квадратная матрица"
2.1.2. DetailData1: Кросс-таблица
2.1.3. Header2: "Треугольная матрица"
2.1.4. DetailData2: Кросс-таблица

2.2. MasterData2: "Подгруппа 2"

2.2.1. Header1: "Квадратная матрица"
2.2.2. DetailData1: Кросс-таблица
2.2.3. Header2: "Треугольная матрица"
2.2.4. DetailData2: Кросс-таблица


Итак, я хочу "объединить" группу заголовков 1., 1.1., 1.1.1 в одну "группу", т.е. если один из них не помещается на одну страницу, то все три переносятся на следующую страницу. Тоже самое необходимо проделать с:
1.2 и 1.2.1;
2., 2.1., 2.1.1.;
2.2. 2.2.1

Может быть стоит воспользоваться другими объектами FR, изменив структуру отчета без использования подотчетов и данных второго уровня? Или же проще написать скрипт для переноса интересующих меня "групп"?
Go to the top of the page
 
+Quote Post
-=Den=-
post 21.12.2009, 14:59
Post #2


Advanced Member
***

Group: FR Team
Posts: 848
Joined: 23.09.2005
Member No.: 2031



У заголовка группы есть св-во KeepTogether.
Установите в True и группа будет "Держатся Вместе", если конечно размер группы не превышает размер страницы.
Go to the top of the page
 
+Quote Post
madmech
post 21.12.2009, 15:05
Post #3


Advanced Member
***

Group: Members
Posts: 86
Joined: 24.04.2009
Member No.: 11744



Цитата(-=Den=- @ 21.12.2009, 14:59 ) *
У заголовка группы есть св-во KeepTogether.
Установите в True и группа будет "Держатся Вместе", если конечно размер группы не превышает размер страницы.

В том-то и проблема, что размеры всей группы могут превышать размеры страницы, правильнее даже будет сказать, что они всегда превышают размеры страницы, поэтому требование звучит именно так, как звучит. Внутри группы разрывы могут осуществляться. Важно "склеить" только выше названные группообразующие заголовки.
Go to the top of the page
 
+Quote Post
-=Den=-
post 21.12.2009, 16:03
Post #4


Advanced Member
***

Group: FR Team
Posts: 848
Joined: 23.09.2005
Member No.: 2031



Ваше требование как раз описывает работу KeepTogether.
Используйте groupHeader в отчете для разбиение на группы.
смотрите пример из mainDemo "Other features" - "Keep group together" (33.fr3).
Go to the top of the page
 
+Quote Post
madmech
post 21.12.2009, 18:34
Post #5


Advanced Member
***

Group: Members
Posts: 86
Joined: 24.04.2009
Member No.: 11744



Цитата(-=Den=- @ 21.12.2009, 16:03 ) *
Ваше требование как раз описывает работу KeepTogether.
Используйте groupHeader в отчете для разбиение на группы.
смотрите пример из mainDemo "Other features" - "Keep group together" (33.fr3).

Боюсь, что группы как таковые я использовать не смогу, ибо значения для заголовков группы и для внутренних датабэндов я вынужден брать из разных источников данных. Поэтому и пользуюсь именно той структурой построения отчета, которую привел вначале. А насколько мне известно, группировки изначально базируются на одном наборе данных. Как выйти из ситуации?
Go to the top of the page
 
+Quote Post
-=Den=-
post 21.12.2009, 20:35
Post #6


Advanced Member
***

Group: FR Team
Posts: 848
Joined: 23.09.2005
Member No.: 2031



Если у группы есть какой то общий признак/поле то можно создать группу.
Привязка к датасету не обязательна, можно использовать выражения.
Go to the top of the page
 
+Quote Post
madmech
post 22.12.2009, 11:17
Post #7


Advanced Member
***

Group: Members
Posts: 86
Joined: 24.04.2009
Member No.: 11744



Цитата(-=Den=- @ 21.12.2009, 20:35 ) *
Если у группы есть какой то общий признак/поле то можно создать группу.

Вот именно, что нету!

Цитата
Привязка к датасету не обязательна, можно использовать выражения.

Не понял, поясните. Или лучше отошлите к какому-то конкретному параграфу Руководства Пользователя, если там есть интересующая меня информация.

А вообще, меня в целом устраивает приведенная в первом посте структура отчета. Так что, может, проще написать коротенький скрипт, учитывающий выход за пределы страницы одного из группообразующих заголовков?
Go to the top of the page
 
+Quote Post
madmech
post 22.12.2009, 12:19
Post #8


Advanced Member
***

Group: Members
Posts: 86
Joined: 24.04.2009
Member No.: 11744



И, кстати, еще возникла проблема с переносом кросс-таблицы на следующую страницу. Поясняю. Я хочу, чтобы 1.1.3 и 1.1.4 выводились строго совместно на одной странице, для чего у DetailData2 выставляю свойство KeepHeader в true, а у кросс-таблицы, лежащей в этом бэнде, ставлю свойство KeepTogether в True. Таким образом, заголовок и соответствующая ему кросс-таблица переносятся на следующую страницу в случае совместного непомещения на данной странице. Но! Почему-то у кросс-таблицы кроме "шапки" ничего нет, т.е. все данные, всё "нутро" куда-то исчезает. В чем проблема, подскажите, на мой взгляд, я все делаю правильно, а оно "не заводится".
З.Ы. Вопрос, конечно, можно было задать в отдельной теме, но он все равно тесно примыкает к данной задаче, поэтому я поместил его здесь.
З.З.Ы. Если необходимо, готовый отчет или его скрин я приложу.
Go to the top of the page
 
+Quote Post
-=Den=-
post 22.12.2009, 14:38
Post #9


Advanced Member
***

Group: FR Team
Posts: 848
Joined: 23.09.2005
Member No.: 2031



Цитата(madmech @ 22.12.2009, 08:17 ) *
Вот именно, что нету!
Не понял, поясните. Или лучше отошлите к какому-то конкретному параграфу Руководства Пользователя, если там есть интересующая меня информация.

А вообще, меня в целом устраивает приведенная в первом посте структура отчета. Так что, может, проще написать коротенький скрипт, учитывающий выход за пределы страницы одного из группообразующих заголовков?

Для примера в отчете Simple group из mainDemo используется выражение Copy(<Customers."Company">, 1, 1).
Т.е. можно сделать пользовательскую функцию, которая будет возвращать какой-то признак группы.


Цитата(madmech @ 22.12.2009, 09:19 ) *
И, кстати, еще возникла проблема с переносом кросс-таблицы на следующую страницу. Поясняю. Я хочу, чтобы 1.1.3 и 1.1.4 выводились строго совместно на одной странице, для чего у DetailData2 выставляю свойство KeepHeader в true, а у кросс-таблицы, лежащей в этом бэнде, ставлю свойство KeepTogether в True. Таким образом, заголовок и соответствующая ему кросс-таблица переносятся на следующую страницу в случае совместного непомещения на данной странице. Но! Почему-то у кросс-таблицы кроме "шапки" ничего нет, т.е. все данные, всё "нутро" куда-то исчезает. В чем проблема, подскажите, на мой взгляд, я все делаю правильно, а оно "не заводится".
З.Ы. Вопрос, конечно, можно было задать в отдельной теме, но он все равно тесно примыкает к данной задаче, поэтому я поместил его здесь.
З.З.Ы. Если необходимо, готовый отчет или его скрин я приложу.

Можно сделать и скриптом, отчет должен быть двухпроходными.
первый проход вычисляет высоты для групп (можно сохранять в список), на втором в зависимости от вычисленной высоты и свободного места (Engine.FreeSpace) переносить группу(Engine.NewPage).

По поводу кросса, знакомое описание ошибки.
Возможно даже исправлял, какую версию используете ?
Если с последней такая же ошибка, присылайте отчет (рабочий, желательно на базе из mainDemo. т.е чтобы не требовалось БД), буду разбираться.

Go to the top of the page
 
+Quote Post
madmech
post 22.12.2009, 15:49
Post #10


Advanced Member
***

Group: Members
Posts: 86
Joined: 24.04.2009
Member No.: 11744



Цитата(-=Den=- @ 22.12.2009, 14:38 ) *
По поводу кросса, знакомое описание ошибки.
Возможно даже исправлял, какую версию используете ?
Если с последней такая же ошибка, присылайте отчет (рабочий, желательно на базе из mainDemo. т.е чтобы не требовалось БД), буду разбираться.

Попробовал создать схожую ситуацию в одном из отчетов mainDemo, все оказалось нормально. А в моем отчете - нет. Чудеса какие-то...
Версию использую 4.8.46
Go to the top of the page
 
+Quote Post
madmech
post 22.12.2009, 16:16
Post #11


Advanced Member
***

Group: Members
Posts: 86
Joined: 24.04.2009
Member No.: 11744



Поставил текущую версию FastReport на Turbo Delphi и у меня исчезли все другие компоненты кроме ФастРепортовских!!! Что делать???
UPD. Проблему решил запуском "Install Packages", где выбрал все файлы *.bpl из папки C:\Program Files\Borland\BDS\4.0\Bin.
Но все равно компоненты не должны исчезать.
Go to the top of the page
 
+Quote Post
madmech
post 22.12.2009, 17:10
Post #12


Advanced Member
***

Group: Members
Posts: 86
Joined: 24.04.2009
Member No.: 11744



Могу прислать отчет, построенный на моих данных, на почту, чтобы вы посмотрели, как это безобразие выглядит. Только почту дайте свою.
Go to the top of the page
 
+Quote Post
-=Den=-
post 22.12.2009, 18:16
Post #13


Advanced Member
***

Group: FR Team
Posts: 848
Joined: 23.09.2005
Member No.: 2031



Можете отослать мне на почту, адрес кинул в ЛС.
Go to the top of the page
 
+Quote Post
madmech
post 22.12.2009, 18:47
Post #14


Advanced Member
***

Group: Members
Posts: 86
Joined: 24.04.2009
Member No.: 11744



Отправил.
Go to the top of the page
 
+Quote Post
-=Den=-
post 23.12.2009, 23:12
Post #15


Advanced Member
***

Group: FR Team
Posts: 848
Joined: 23.09.2005
Member No.: 2031



Исправил.
Скачать новый билд можно будет завтра.
Go to the top of the page
 
+Quote Post

3 Pages V   1 2 3 >
Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 



- Time is now: 26.09.2016 - 04:51