Группировка (FR 3.21)
В отчете есть GroupHeader и MasterData, они из одного DataSet'а, заданного запросом в frxADOQuery.
Поле, по которому происходит группировка (назовем его SomeField), не отсортированно.
В итоге получается странная группировка.
Каждый раз, когда меняется значение группировочного поля SomeField, создается новая группа, и, соответственно, встречаются одинаковые группы.
Как правильно задать группировку по неотсортированному полю?
Поле, по которому происходит группировка (назовем его SomeField), не отсортированно.
В итоге получается странная группировка.
Каждый раз, когда меняется значение группировочного поля SomeField, создается новая группа, и, соответственно, встречаются одинаковые группы.
Как правильно задать группировку по неотсортированному полю?
Комментарии
А если идет грпппировка в группировке?
Или еще какое-нибудь сложное условие?
Если сложный фильтр то не вижу как он может повлиять на группировку.
Чисто теоретически можно попробовать через UserDataSet но скорость будет оставлять желать лучшего.
Что тогда?
FR не подходит для данного вида отчетов?
select * from (Owner.SomeProcedure (@Parameter = :Parameter)) order by SomeField
Но все же это не удобно. Полагаю, это недоработка FastReport'а.
Если группировка идет по полю, то она должна идти независимо от данных!
Я считаю, такая возможность должна быть.
Представляешь сколько телодвижений надо будет сделать чтобы сделать группировку по неотсортированному НД.
ИМХО Сортиковку набора данных должен делать сервер (работа у него такая )
Придется уговаривать админа на внесение доп. функциональности в БД.
Набор данных надо разбить на 2 заголовка со вложенностью + на третьем уровне сами данные.
ГРуппирую их GroupHeder'ом,
GroupHeader1 (по полю 1)
---GroupHeader2 (по полю 2)
MasterData
получается в итоге, что заголовок первого уровня повторяется при смене заголовка второго уровня.
А надо слудущую структуру:
Заголовок 1.1
---Заголовок 2.1.1
Данные
---Заголовок 2.1.2
Данные
---Заголовок 2.1.3
Данные
Заголовок 1.2
---Заголокок 2.2.1
Данные
---Заголокок 2.2.2
Данные
...
Как это можно сделать?
А какое условие ты ставишь для группировки в первом и втором заголовках группы?
И что ты выводишь на самих заголовках группы?
Заголовок 1.1
---Заголовок 2.1.1
Данные
Заголовок 1.1 //не особо нужно
---Заголовок 2.1.2
Данные
Заголовок 1.1 //не особо нужно
---Заголовок 2.1.3
Данные
Заголовок 1.2
---Заголокок 2.2.1
Данные
Заголовок 1.2 //не особо нужно
---Заголокок 2.2.2
Данные
...
В заголовке 1 ур. поле1, 2 ур - поле 2.
Данные - остальные данные НД.
Сейчас забил отчет с нуля и все отработало как надо. ))
Спосибо за советы!
Есть один набор данных.
Нужна следущая структура отчета:
<span style='font-family:Courier'>________________________________________________________________________________________________________
|Группировка 1 ур. (2 поля из НД) | Группировка 2 ур. (еще одно поле) | MasterData (остальные поля НД) |
|******************************** | ********************************* | ****************************** |</span>
В общих словах, как сделать горизонтальную группировку?
<ADOQuery1."a"> - поле первой группировки
<ADOQuery1."b"> - поле второй группировки
Группировку со скрытыми данными практически невозможно по-человечески выделить в рамку, чтобы в итоге выглядело следущим образом:
<span style='font-family:Courier'> </span>
Где Поле 1.* - два первых группировочных поля, Поле 2.* - второй уровень группировки, Данные * - MasterData
Когда почти вся рамка была готова, как она и задумывалясь, осталась одна проблема - рамка внизу страницы .
Может кто знает, как просчитать смену сраницы и, при этом, нарисовать (отобразить) линию, закрывающую таблицу в MasterData на текущей странице???
На первом проходе для каждой строки заполняю StringList с признаком смены оформления ячейки (сравниваю текущее значение поля и предыдущее). На втором проходе для каждой ячейки выставляю ее оформление.
Аналогично в UserManual сделана печать итогов в заголовке группы
Каким образом определить, что ячейка является последней на данной странице (у нее же свои настнойки границ, независимо от остальных...)?
Поле в разных НД называется одинаково.
Второй вариант - создать таблицу, в которой есть поля из всех наборов данных, залить в неё данные и далее обрабатывать в запросе
Третий вариант - использовать TfrxUserDataset, подсовывая ему требуемые данные, которые получены в результате обработки программой данных из трёх НД
а последняя ячейка определяется по оставшемуся свободному месту на странице, в onAfterCalcHeight определяю если Engine.freespace<Memo.heght
значит строка на эту страницу не влезет и будет перенесена на следующую
Но как теперь вернуться на строчку назад, чтобы поcтавить ??